Coefficient plots

Food insecurity and main income source
Income per capita

Coefficient plot with poor protein consumption

Coefficient plot with households engaging in risky behaviour

Coefficient plot with stress credit

Coefficient plot between Food insecurity and shocks

Priority households
A household would be considered a priority for intervention when
above the 75th percentile in at least two out of the three food security
indices (food consumption score, coping strategies index and food
insecurity experience scale)

Food security indicators by priority group

Impact of conflict on food insecurity
Effects of conflict on food security

Hierarchical clustering
Dendrogram

Clustering reference table
LS0tDQp0aXRsZTogIkVEQSBub3RlcyBSb3VuZCAzIg0KYXV0aG9yOiAiTXlhbm1hciBGb29kIFNlY3VyaXR5IENsdXN0ZXIiDQpkYXRlOiAiMTQvMDYvMjAyMiINCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIHRoZW1lOiByZWFkYWJsZQ0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19kZXB0aDogNA0KICAgIHRvY19mbG9hdDogdHJ1ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogZmFsc2UNCiAgICBjb2xsYXBzZWQ6IGZhbHNlDQphbHdheXNfYWxsb3dfaHRtbDogdHJ1ZSAgIA0KLS0tDQoNCmBgYHtjc3MsIGVjaG89RkFMU0V9DQoNCiNUT0M6OmJlZm9yZSB7DQogIGNvbnRlbnQ6ICIiOw0KICBkaXNwbGF5OiBibG9jazsNCiAgaGVpZ2h0OiA3MHB4Ow0KICBtYXJnaW46IDJlbSAyMHB4IDQwcHggMjBweDsNCiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJNeWFubWFyX2NsdXN0ZXJfYmx1ZS5wbmciKTsNCiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluOw0KICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyOw0KICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Ow0KfQ0KYGBgDQoNCmBgYHs9aHRtbH0NCjxzdHlsZT4NCiAgICBib2R5IC5tYWluLWNvbnRhaW5lciB7DQogICAgICAgIG1heC13aWR0aDogMTI4MHB4Ow0KICAgIH0NCjwvc3R5bGU+DQpgYGANCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCBmaWcud2lkdGggPSAxMCwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkodGlkeW1vZGVscykNCmxpYnJhcnkoZmFjdG9leHRyYSkNCmxpYnJhcnkoZGVuZGV4dGVuZCkNCmxpYnJhcnkoY29ycnBsb3QpDQpsaWJyYXJ5KHZpcmlkaXMpDQpsaWJyYXJ5KHBhdGNod29yaykNCmxpYnJhcnkoRFQpDQpsaWJyYXJ5KHBhbmRlcikNCmxpYnJhcnkodmlwKQ0KbGlicmFyeShwYXRjaHdvcmspDQpsaWJyYXJ5KGphbml0b3IpDQpsaWJyYXJ5KHJwYXJ0KQ0KbGlicmFyeShycGFydC51dGlscykNCmxpYnJhcnkocmF0dGxlKQ0KbGlicmFyeShycGFydC5wbG90KQ0KbGlicmFyeShkZW5kZXh0ZW5kKQ0KDQojIHNjYWxpbmcgZnVuY3Rpb25zIA0KcmFuZ2UwMSA8LSBmdW5jdGlvbih4KXsoeC1taW4oeCkpLyhtYXgoeCktbWluKHgpKX0NCnJhbmdlX3duYSA8LSBmdW5jdGlvbih4KXsoeC1taW4oeCwgbmEucm0gPSBUUlVFKSkvKG1heCh4LCBuYS5ybSA9IFRSVUUpLW1pbih4LCBuYS5ybSA9IFRSVUUpKX0NCg0KYCVvdXQlYCA8LSBOZWdhdGUoYCVpbiVgKQ0KDQp0aGVtZV9zZXQodGhlbWVfbWluaW1hbCgpKQ0KDQojIHBhbmRlciB0YWJsZXMgYWxsIGluIG9uZSByb3cNCnBhbmRlck9wdGlvbnMoJ3RhYmxlLnNwbGl0LnRhYmxlJywgSW5mKQ0KDQojIGRpc2FibGluZyBzY2llbnRpZmljIG5vdGF0aW9uDQpvcHRpb25zKHNjaXBlbiA9IDk5OSkNCmBgYA0KDQpgYGB7cn0NCnN1cnZleSA8LSByZWFkX2NzdigiLi9kYXRhL3N1cnZleTMuY3N2IikNCg0Kc3VydmV5X21pbmkgPC0gc3VydmV5ICU+JQ0KICBtdXRhdGUoDQogICAgZWR1X2hpZ2hlciA9IGlmZWxzZShob2hfZWR1Y2F0aW9uID09ICJlZHVfaGlnaGVyIiwgMSwgMCksDQogICAgZWR1X2xvdyA9IGlmZWxzZShob2hfZWR1Y2F0aW9uICVpbiUgYyAoImVkdV9ub25lIiwgImVkdV9wcmltYXJ5IiksIDEsIDApLA0KICAgIGVkdV9wcmltYXJ5ID0gaWZlbHNlKGhvaF9lZHVjYXRpb24gPT0gImVkdV9wcmltYXJ5IiwgMSwgMCksDQogICAgZWR1X3NlY29uZGFyeSA9IGlmZWxzZShob2hfZWR1Y2F0aW9uID09ICJlZHVfc2Vjb25kYXJ5IiwgMSwgMCksDQogICAgIyBlZHVfcmVsaWdpb3VzID0gaWZlbHNlKGhvaF9lZHVjYXRpb24gPT0gICJlZHVfcmVsaWdpb3VzIiwgMSwgMCksIA0KICAgIGhoX2RlYnQgPSBjYXNlX3doZW4oaGhfZGVidF9ib3Jyb3dfZnJvbSAlaW4lIGMoMSwgMikgfiAwLCANCiAgICAgICAgICAgICAgICAgICAgICAgIGhoX2RlYnRfYm9ycm93X2Zyb20gJWluJSBjKDMsIDQsIDUsIDYsIDcsIDgsIDkpIH4gMSwgDQogICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gMCkpICU+JQ0KICBzZWxlY3QoDQogICAgaW1zX2Zhcm1lciwNCiAgICBpbXNfb3RoZXIsIA0KICAgIGltc19wdWJsaWNfZW0sIA0KICAgIGltc19zdGFibGVfYWcsIA0KICAgIGltc19zdGFibGVfbm9uX2FnLCANCiAgICBpbXNfY2FzdWFsX2FnLA0KICAgIGltc19jYXN1YWxfbm9uX2FnLA0KICAgIGltc19wcm9mX3NlbGZfZW0sIA0KICAgIGltc19ub19pbmNvbWUsIA0KICAgIHNob2Nrc19jb25mbGljdCwNCiAgICBzaG9ja3NfbG9zdHdvcmssICANCiAgICBzaG9ja3NfZm9vZHByaWNlcywgDQogICAgc2hvY2tzX2NhbnR3b3JrYnVzaW5lc3MsDQogICAgc2hvY2tzX2FjY2Vzc2Vjb25vbXksIA0KICAgIG5vX2FjY2Vzc21hcmtldCwNCiAgICBlZHVfaGlnaGVyLA0KICAgIGVkdV9zZWNvbmRhcnksDQogICAgZWR1X3ByaW1hcnksDQogICAgZWR1X2xvdywNCiAgICBydXJhbCwNCiAgICBjaGlsZHJlbl8wXzQsDQogICAgaG9oX2ZlbWFsZSwNCiAgICBmaWVzX2F0ZWxlc3MsIGZpZXNfZmV3Zm9vZHMsIGZpZXNfaGVhbHRoeSwgZmllc19odW5ncnksDQogICAgZmllc193b3JyaWVkLCBmaWVzX3Jhbm91dCwgZmllc193aGxkYXksIGZpZXNfc2tpcHBlZCwNCiAgICBmY3Nfc3RhcCwgZmNzX3B1bHNlLCBmY3NfZGFpcnksIGZjc19wciwNCiAgICBmY3NfdmVnLCBmY3NfZnJ1aXQsIGZjc19mYXQsIGZjc19zdWdhciwgDQogICAgZmNzX2JvcmRlcmxpbmVfcG9vciwgDQogICAgY3Nfc3RyZXNzX2hoX2Fzc2V0cywNCiAgICBjc19zdHJlc3Nfc3BlbnRfc2F2aW5ncywNCiAgICBjc19zdHJlc3NfY3JlZGl0LA0KICAgIGNzX3N0cmVzc19ib3Jyb3dlZF9tb25leSwNCiAgICBjc19jcmlzaXNfc29sZF9wcm9kX2Fzc2V0cywNCiAgICBjc19jcmlzaXNfbm9fc2Nob29sLA0KICAgIGNzX2NyaXNpc19yZWR1Y2VkX2hlYWx0aF9leHAsDQogICAgY3NfY3Jpc2lzX2NoaWxkd29yaywNCiAgICBjc19jcmlzaXNfY29uc3VtZWRfc2VlZF9zdG9ja3MsDQogICAgY3NfZW1lcmdlbmN5X3NvbGRfaG91c2UsDQogICAgY3NfZW1lcmdlbmN5X2hoX3Jpc2ssDQogICAgY3NfZW1lcmdlbmN5X3NvbGRfbGFzdF9kcmF1Z2h0LA0KICAgIGNzX2VtZXJnZW5jeV9oaF9taWdyYXRpb24sIA0KICAgIGhoX2RlYnRfbW9yZSwNCiAgICBzdXJ2ZXlfaWQsIA0KICAgIGFncmlfaGhkLCANCiAgICBoaF9zaXplLCANCiAgICBub19hY2Nlc3NtYXJrZXQsIA0KICAgIG5vdF9pbXByb3ZlZF9kcmlua2luZ193YXRlciwgDQogICAgdG90X2luY29tZSwNCiAgICBpbmNvbWVfcmVkdWNlZCwgDQogICAgY292aWRfZ29vZHN0cmFuc3AsIA0KICAgIGNvdmlkX21hcmtldGNsb3NlZA0KICApICU+JQ0KICBtdXRhdGUoYWNyb3NzKHdoZXJlKGlzLm51bWVyaWMpLCB+IHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgDQpgYGANCg0KYGBge3J9DQoNCnBsb3RfY29lZiA8LSBmdW5jdGlvbih0YmwpIHsNCiAgDQogIHRibCAlPiUNCiAgICB0aWR5KGNvbmYuaW50ID0gVFJVRSkgJT4lIA0KICAgIGZpbHRlcih0ZXJtICE9ICIoSW50ZXJjZXB0KSIpICU+JSANCiAgICBmaWx0ZXIocC52YWx1ZSA8PSAuMDUpICU+JSANCiAgICBtdXRhdGUodGVybSA9IGZjdF9yZW9yZGVyKHRlcm0sIGVzdGltYXRlKSkgJT4lICANCiAgICBnZ3Bsb3QoYWVzKHggPSBlc3RpbWF0ZSwgeSA9IHRlcm0sIGNvbG91ciA9IGVzdGltYXRlKSkgKyANCiAgICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLCBsdHkgPSAyLCBjb2xvdXIgPSAicmVkIikgKyANCiAgICBnZW9tX3BvaW50KCkgKyANCiAgICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IGNvbmYubG93LCB4bWF4ID0gY29uZi5oaWdoKSwgaGVpZ2h0ID0gLjIpICsgDQogICAgc2NhbGVfY29sb3VyX3ZpcmlkaXMob3B0aW9uID0gInR1cmJvIikgKyANCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsIA0KICAgICAgICAgIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAid2hpdGUiKSkNCn0NCg0KYGBgDQoNCg0KIyMgQ29lZmZpY2llbnQgcGxvdHMgDQoNCmBgYHtyIGZpZy5oZWlnaHQgPSA4fQ0Kc3VydmV5X21pbmkgJT4lDQogIGxlZnRfam9pbihzdXJ2ZXkgJT4lIHNlbGVjdChzY29yZSA9IGZzX3Njb3JlLCBzdXJ2ZXlfaWQpLCBieSA9ICJzdXJ2ZXlfaWQiKSAlPiUgDQogIHNlbGVjdCgtc3VydmV5X2lkLCAtbWF0Y2hlcygiY3NffGZpZXNffGZjc18iKSwgLXRvdF9pbmNvbWUpICU+JQ0KICBtdXRhdGUoc2NvcmUgPSBsb2coc2NvcmUpLCANCiAgICAgICAgIHNjb3JlID0gaWZlbHNlKGlzLmluZmluaXRlKHNjb3JlKSwgMCwgc2NvcmUpKSAgJT4lIA0KICBsbShzY29yZSB+IC4sIGRhdGEgPSAuKSAlPiUgDQogIHBsb3RfY29lZigpICsgDQogIGxhYnModGl0bGUgPSAiRm9vZCBJbnNlY3VyaXR5IFNjb3JlIiwgeSA9ICIiKSArDQoNCnN1cnZleV9taW5pICU+JQ0KICBsZWZ0X2pvaW4oc3VydmV5ICU+JSBzZWxlY3Qoc2NvcmUgPSBoaGZjc19pbnYsIHN1cnZleV9pZCksIGJ5ID0gInN1cnZleV9pZCIpICU+JSANCiAgc2VsZWN0KC1zdXJ2ZXlfaWQsIC1tYXRjaGVzKCJjc198Zmllc198ZmNzXyIpLCAtdG90X2luY29tZSkgJT4lDQogICMgbXV0YXRlKHNjb3JlID0gbG9nKHNjb3JlKSwgDQogICMgICAgICAgIHNjb3JlID0gaWZlbHNlKGlzLmluZmluaXRlKHNjb3JlKSwgMCwgc2NvcmUpKSAgJT4lIA0KICBsbShzY29yZSB+IC4sIGRhdGEgPSAuKSAlPiUgDQogIHBsb3RfY29lZigpICsgDQogIGxhYnModGl0bGUgPSAgIkZvb2QgQ29uc3VtcHRpb24gU2NvcmUiLCB5ID0gIiIpICsNCiAgDQpzdXJ2ZXlfbWluaSAlPiUgDQogIGxlZnRfam9pbihzdXJ2ZXkgJT4lIHNlbGVjdChzY29yZSA9IGNzaV93ZWlnaHRlZCwgc3VydmV5X2lkKSwgYnkgPSAic3VydmV5X2lkIikgJT4lIA0KICBzZWxlY3QoLXN1cnZleV9pZCwgLW1hdGNoZXMoImNzX3xmaWVzX3xmY3NfIiksIC10b3RfaW5jb21lKSAlPiUNCiAgIyBtdXRhdGUoc2NvcmUgPSBsb2coc2NvcmUpLCANCiAgIyAgICAgICAgc2NvcmUgPSBpZmVsc2UoaXMuaW5maW5pdGUoc2NvcmUpLCAwLCBzY29yZSkpICAlPiUgDQogIGxtKHNjb3JlIH4gLiwgZGF0YSA9IC4pICU+JSANCiAgcGxvdF9jb2VmKCkgKyANCiAgbGFicyh0aXRsZSA9ICJDb3BpbmcgU3RyYXRlZ2llcyBJbmRleCIsIHkgPSAiIikgKyANCiAgDQpzdXJ2ZXlfbWluaSAlPiUgDQogIGxlZnRfam9pbihzdXJ2ZXkgJT4lIHNlbGVjdChzY29yZSA9IGZpZXNfcmF3X3JhbmdlLCBzdXJ2ZXlfaWQpLCBieSA9ICJzdXJ2ZXlfaWQiKSAlPiUgDQogIHNlbGVjdCgtc3VydmV5X2lkLCAtbWF0Y2hlcygiY3NffGZpZXNffGZjc18iKSwgLXRvdF9pbmNvbWUpICU+JQ0KICAjIG11dGF0ZShzY29yZSA9IGxvZyhzY29yZSksIA0KICAjICAgICAgICBzY29yZSA9IGlmZWxzZShpcy5pbmZpbml0ZShzY29yZSksIDAsIHNjb3JlKSkgICU+JSANCiAgbG0oc2NvcmUgfiAuLCBkYXRhID0gLikgJT4lIA0KICBwbG90X2NvZWYoKSArIA0KICBsYWJzKHRpdGxlID0gIkZvb2QgSW5zZWN1cml0eSBFeHBlcmllbmNlIFNjYWxlIiwgeSA9ICIiKSArIA0KICANCiAgcGxvdF9hbm5vdGF0aW9uKHRpdGxlID0gIkNvZWZmaWNpZW50IHBsb3RzIC0tIGZvb2Qgc2VjdXJpdHkgaW5kaWNlcyIsIA0KICAgICAgICAgICAgICAgICAgc3VidGl0bGUgPSAiUmVkZGVyIGNvbG91cnMgaW5kaWNhdGUgaGlnaGVyIGNvcnJlbGF0aW9ucyB3aXRoIGZvb2QgaW5zZWN1cml0eSIsIA0KICAgICAgICAgICAgICAgICAgY2FwdGlvbiA9ICJEYXRhIHNvdXJjZTogV0ZQLUZBTyBzdXJ2ZXk7IG9ubHkgc2hvd2luZyBpbmRpY2F0b3JzIHdpdGggcC12YWx1ZSA8IDAuMDUiLCANCiAgICAgICAgICAgICAgICAgIHRoZW1lID0gdGhlbWUocGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gLjUpKSkNCiAgDQpgYGANCg0KPGJyPjxicj4NCg0KIyMjIEZvb2QgaW5zZWN1cml0eSBhbmQgbWFpbiBpbmNvbWUgc291cmNlIA0KDQpgYGB7cn0NCnN1cnZleV9taW5pICU+JQ0KICBsZWZ0X2pvaW4oc3VydmV5ICU+JSBzZWxlY3Qoc2NvcmUgPSBmc19zY29yZSwgc3VydmV5X2lkKSwgYnkgPSAic3VydmV5X2lkIikgJT4lIA0KICBzZWxlY3Qoc2NvcmUsIG1hdGNoZXMoImltc18iKSkgJT4lDQogIG11dGF0ZShzY29yZSA9IGxvZyhzY29yZSksIA0KICAgICAgICAgc2NvcmUgPSBpZmVsc2UoaXMuaW5maW5pdGUoc2NvcmUpLCAwLCBzY29yZSkpICAlPiUgDQogIGxtKHNjb3JlIH4gLiwgZGF0YSA9IC4pICU+JSANCiAgdGlkeShjb25mLmludCA9IFRSVUUpICU+JSANCiAgZmlsdGVyKHRlcm0gIT0gIihJbnRlcmNlcHQpIikgJT4lIA0KICAjIGZpbHRlcihwLnZhbHVlIDw9IC4wNSkgJT4lIA0KICBtdXRhdGUodGVybSA9IHN0cl9yZW1vdmUodGVybSwgImltc18iKSkgJT4lIA0KICBtdXRhdGUodGVybSA9IGZjdF9yZW9yZGVyKHRlcm0sIGVzdGltYXRlKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IGVzdGltYXRlLCB5ID0gdGVybSwgY29sb3VyID0gZXN0aW1hdGUpKSArIA0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLCBsdHkgPSAyLCBjb2xvdXIgPSAicmVkIikgKyANCiAgZ2VvbV9wb2ludCgpICsgDQogIGdlb21fZXJyb3JiYXJoKGFlcyh4bWluID0gY29uZi5sb3csIHhtYXggPSBjb25mLmhpZ2gpLCBoZWlnaHQgPSAuMikgKyANCiAgc2NhbGVfY29sb3VyX3ZpcmlkaXMob3B0aW9uID0gInR1cmJvIikgKyANCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLCANCiAgICAgICAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJ3aGl0ZSIpLCANCiAgICAgICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gLjUpKSArDQogIGxhYnModGl0bGUgPSAiRm9vZCBpbnNlY3VyaXR5IGFuZCBtYWluIGluY29tZSBzb3VyY2UiLCB5ID0gIiIsIA0KICAgICAgIGNhcHRpb24gPSAiRGF0YSBzb3VyY2U6IFdGUC1GQU8gc3VydmV5IikNCmBgYA0KPGJyPjxicj4NCg0KDQpgYGB7cn0NCnBsb3RfY29lZjIgPC0gZnVuY3Rpb24odGJsKSB7DQogIHRibCAlPiUgDQogICAgbG0oc2NvcmUgfiAuLCBkYXRhID0gLikgJT4lIA0KICAgIHRpZHkoY29uZi5pbnQgPSBUUlVFKSAlPiUgDQogICAgZmlsdGVyKHRlcm0gIT0gIihJbnRlcmNlcHQpIikgJT4lIA0KICAgIGZpbHRlcihkZW5zZV9yYW5rKGVzdGltYXRlKSA8PSA3IHwgZGVuc2VfcmFuayhkZXNjKGVzdGltYXRlKSkgPD0gNykgJT4lIA0KICAgICMgZmlsdGVyKHAudmFsdWUgPD0gLjA1KSAlPiUgDQogICAgbXV0YXRlKHRlcm0gPSBzdHJfcmVtb3ZlKHRlcm0sICJzaG9ja3NfIikpICU+JSANCiAgICBtdXRhdGUodGVybSA9IGZjdF9yZW9yZGVyKHRlcm0sIGVzdGltYXRlKSkgJT4lDQogICAgZ2dwbG90KGFlcyh4ID0gZXN0aW1hdGUsIHkgPSB0ZXJtLCBjb2xvdXIgPSBlc3RpbWF0ZSkpICsgDQogICAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMCwgbHR5ID0gMiwgY29sb3VyID0gInJlZCIpICsgDQogICAgZ2VvbV9wb2ludCgpICsgDQogICAgZ2VvbV9lcnJvcmJhcmgoYWVzKHhtaW4gPSBjb25mLmxvdywgeG1heCA9IGNvbmYuaGlnaCksIGhlaWdodCA9IC4yKSArIA0KICAgIHNjYWxlX2NvbG91cl92aXJpZGlzKG9wdGlvbiA9ICJ0dXJibyIpICsgDQogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLCANCiAgICAgICAgICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gIndoaXRlIiksIA0KICAgICAgICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IC41KSkNCn0NCmBgYA0KDQojIyBJbmNvbWUgcGVyIGNhcGl0YQ0KDQpgYGB7cn0NCnN1cnZleSAlPiUgDQogIGdyb3VwX2J5KGluY29tZV9tYWluX3RleHQpICU+JSANCiAgc3VtbWFyaXNlKHRvdF9pbmNvbWUgPSBzdW0odG90X2luY29tZSwgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBwZXJzb25zID0gc3VtKGhoX3NpemUsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgY291bnQgPSBuKCkpICU+JSAgDQogIG11dGF0ZShpbmNvbWVfcGMgPSB0b3RfaW5jb21lIC8gcGVyc29ucywgDQogICAgICAgICBpbmNvbWVfbWFpbl90ZXh0ID0gc3RyX3JlbW92ZShpbmNvbWVfbWFpbl90ZXh0LCAiaW1zXyIpKSAlPiUgDQogIGFycmFuZ2UoZGVzYyhpbmNvbWVfcGMpKSAlPiUNCiAgbXV0YXRlKGluY29tZV9tYWluX3RleHQgPSBmY3RfcmVvcmRlcihpbmNvbWVfbWFpbl90ZXh0LCBpbmNvbWVfcGMpKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IGluY29tZV9wYywgeSA9IGluY29tZV9tYWluX3RleHQsIGZpbGwgPSBpbmNvbWVfbWFpbl90ZXh0KSkgKw0KICBnZW9tX2NvbCgpICsgDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBjb21tYShpbmNvbWVfcGMsIGFjY3VyYWN5ID0gMSkpLCBoanVzdCA9ICJpbndhcmQiKSArIA0KICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBjb21tYSkgKyANCiAgZ3VpZGVzKGZpbGwgPSAibm9uZSIpICsgDQogIGxhYnMoeCA9ICJJbmNvbWUgcGVyIGNhcGl0YSAoTU1LKSIsIHkgPSAiIiwgDQogICAgICAgdGl0bGUgPSAiSW5jb21lIHBlciBjYXBpdGEgaW4ga3lhdCBieSBtYWluIGluY29tZSBzb3VyY2UiKSANCiAgDQpgYGANCg0KDQojIyMgQ29lZmZpY2llbnQgcGxvdCB3aXRoIHBvb3IgcHJvdGVpbiBjb25zdW1wdGlvbg0KDQpgYGB7cn0NCnN1cnZleV9taW5pICU+JSANCiAgbXV0YXRlKHNjb3JlID0gZmNzX3ByKSAlPiUgDQogIHNlbGVjdCgtbWF0Y2hlcygiZmllc198ZmNzX3xjc18iKSwgDQogICAgICAgICAtc3VydmV5X2lkKSAlPiUNCiAgcGxvdF9jb2VmMigpICsgDQogIGxhYnModGl0bGUgPSAiQ29lZmZpY2llbnQgcGxvdCB3aXRoIGZvb2QgaW5zZWN1cml0eSBzY29yZSIpDQoNCg0KYGBgDQoNCjxicj48YnI+DQoNCiMjIyBDb2VmZmljaWVudCBwbG90IHdpdGggaG91c2Vob2xkcyBlbmdhZ2luZyBpbiByaXNreSBiZWhhdmlvdXINCg0KDQpgYGB7cn0NCnN1cnZleV9taW5pICU+JSANCiAgbXV0YXRlKHNjb3JlID0gY3NfZW1lcmdlbmN5X2hoX3Jpc2spICU+JSANCiAgc2VsZWN0KC1tYXRjaGVzKCJmaWVzX3xmY3NffGNzXyIpLCANCiAgICAgICAgIC1zdXJ2ZXlfaWQpICU+JQ0KICBsbShzY29yZSB+IC4sIGRhdGEgPSAuKSAlPiUgDQogIHRpZHkoY29uZi5pbnQgPSBUUlVFKSAlPiUgDQogIGZpbHRlcih0ZXJtICE9ICIoSW50ZXJjZXB0KSIpICU+JSANCiAgZmlsdGVyKGRlbnNlX3JhbmsoZXN0aW1hdGUpIDw9IDcgfCBkZW5zZV9yYW5rKGRlc2MoZXN0aW1hdGUpKSA8PSA3KSAlPiUgDQogICMgZmlsdGVyKHAudmFsdWUgPD0gLjA1KSAlPiUgDQogIG11dGF0ZSh0ZXJtID0gc3RyX3JlbW92ZSh0ZXJtLCAic2hvY2tzXyIpKSAlPiUgDQogIG11dGF0ZSh0ZXJtID0gZmN0X3Jlb3JkZXIodGVybSwgZXN0aW1hdGUpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gZXN0aW1hdGUsIHkgPSB0ZXJtLCBjb2xvdXIgPSBlc3RpbWF0ZSkpICsgDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDAsIGx0eSA9IDIsIGNvbG91ciA9ICJyZWQiKSArIA0KICBnZW9tX3BvaW50KCkgKyANCiAgZ2VvbV9lcnJvcmJhcmgoYWVzKHhtaW4gPSBjb25mLmxvdywgeG1heCA9IGNvbmYuaGlnaCksIGhlaWdodCA9IC4yKSArIA0KICBzY2FsZV9jb2xvdXJfdmlyaWRpcyhvcHRpb24gPSAidHVyYm8iKSArIA0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsIA0KICAgICAgICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gIndoaXRlIiksIA0KICAgICAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoaGp1c3QgPSAuNSkpDQpgYGANCg0KDQojIyMgQ29lZmZpY2llbnQgcGxvdCB3aXRoIHN0cmVzcyBjcmVkaXQgDQoNCmBgYHtyfQ0Kc3VydmV5X21pbmkgJT4lIA0KICBtdXRhdGUoc2NvcmUgPSBjc19zdHJlc3NfaGhfYXNzZXRzKSAlPiUgDQogIHNlbGVjdCgtbWF0Y2hlcygiZmllc198ZmNzX3xjc18iKSwgDQogICAgICAgICAtc3VydmV5X2lkKSAlPiUNCiAgbG0oc2NvcmUgfiAuLCBkYXRhID0gLikgJT4lIA0KICB0aWR5KGNvbmYuaW50ID0gVFJVRSkgJT4lIA0KICBmaWx0ZXIodGVybSAhPSAiKEludGVyY2VwdCkiKSAlPiUgDQogIGZpbHRlcihkZW5zZV9yYW5rKGVzdGltYXRlKSA8PSA3IHwgZGVuc2VfcmFuayhkZXNjKGVzdGltYXRlKSkgPD0gNykgJT4lIA0KICAjIGZpbHRlcihwLnZhbHVlIDw9IC4wNSkgJT4lIA0KICBtdXRhdGUodGVybSA9IHN0cl9yZW1vdmUodGVybSwgInNob2Nrc18iKSkgJT4lIA0KICBtdXRhdGUodGVybSA9IGZjdF9yZW9yZGVyKHRlcm0sIGVzdGltYXRlKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IGVzdGltYXRlLCB5ID0gdGVybSwgY29sb3VyID0gZXN0aW1hdGUpKSArIA0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLCBsdHkgPSAyLCBjb2xvdXIgPSAicmVkIikgKyANCiAgZ2VvbV9wb2ludCgpICsgDQogIGdlb21fZXJyb3JiYXJoKGFlcyh4bWluID0gY29uZi5sb3csIHhtYXggPSBjb25mLmhpZ2gpLCBoZWlnaHQgPSAuMikgKyANCiAgc2NhbGVfY29sb3VyX3ZpcmlkaXMob3B0aW9uID0gInR1cmJvIikgKyANCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLCANCiAgICAgICAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJ3aGl0ZSIpLCANCiAgICAgICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gLjUpKQ0KYGBgDQoNCg0KDQojIyMgQ29lZmZpY2llbnQgcGxvdCBiZXR3ZWVuIEZvb2QgaW5zZWN1cml0eSBhbmQgc2hvY2tzDQoNCmBgYHtyfQ0Kc3VydmV5X21pbmkgJT4lDQogIGxlZnRfam9pbihzdXJ2ZXkgJT4lIHNlbGVjdChzY29yZSA9IGZzX3Njb3JlLCBzdXJ2ZXlfaWQpLCBieSA9ICJzdXJ2ZXlfaWQiKSAlPiUgDQogIHNlbGVjdChzY29yZSwgbWF0Y2hlcygic2hvY2tzXyIpKSAlPiUNCiAgbXV0YXRlKHNjb3JlID0gbG9nKHNjb3JlKSwgDQogICAgICAgICBzY29yZSA9IGlmZWxzZShpcy5pbmZpbml0ZShzY29yZSksIDAsIHNjb3JlKSkgICU+JSANCiAgbG0oc2NvcmUgfiAuLCBkYXRhID0gLikgJT4lIA0KICB0aWR5KGNvbmYuaW50ID0gVFJVRSkgJT4lIA0KICBmaWx0ZXIodGVybSAhPSAiKEludGVyY2VwdCkiKSAlPiUgDQogICMgZmlsdGVyKHAudmFsdWUgPD0gLjA1KSAlPiUgDQogIG11dGF0ZSh0ZXJtID0gc3RyX3JlbW92ZSh0ZXJtLCAic2hvY2tzXyIpKSAlPiUgDQogIG11dGF0ZSh0ZXJtID0gZmN0X3Jlb3JkZXIodGVybSwgZXN0aW1hdGUpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gZXN0aW1hdGUsIHkgPSB0ZXJtLCBjb2xvdXIgPSBlc3RpbWF0ZSkpICsgDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDAsIGx0eSA9IDIsIGNvbG91ciA9ICJyZWQiKSArIA0KICBnZW9tX3BvaW50KCkgKyANCiAgZ2VvbV9lcnJvcmJhcmgoYWVzKHhtaW4gPSBjb25mLmxvdywgeG1heCA9IGNvbmYuaGlnaCksIGhlaWdodCA9IC4yKSArIA0KICBzY2FsZV9jb2xvdXJfdmlyaWRpcyhvcHRpb24gPSAidHVyYm8iKSArIA0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsIA0KICAgICAgICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gIndoaXRlIiksIA0KICAgICAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoaGp1c3QgPSAuNSkpICsNCiAgbGFicyh0aXRsZSA9ICJGb29kIGluc2VjdXJpdHkgYW5kIHNob2NrcyIsIHkgPSAiIiwgDQogICAgICAgY2FwdGlvbiA9ICJEYXRhIHNvdXJjZTogV0ZQLUZBTyBzdXJ2ZXkiKQ0KYGBgDQoNCjxicj48YnI+PGJyPg0KDQojIyBQcmlvcml0eSBob3VzZWhvbGRzDQoNCj5BIGhvdXNlaG9sZCB3b3VsZCBiZSBjb25zaWRlcmVkIGEgcHJpb3JpdHkgZm9yIGludGVydmVudGlvbiB3aGVuIGFib3ZlIHRoZSA3NXRoIHBlcmNlbnRpbGUgaW4gYXQgbGVhc3QgdHdvIG91dCBvZiB0aGUgdGhyZWUgZm9vZCBzZWN1cml0eSBpbmRpY2VzIChmb29kIGNvbnN1bXB0aW9uIHNjb3JlLCBjb3Bpbmcgc3RyYXRlZ2llcyBpbmRleCBhbmQgZm9vZCBpbnNlY3VyaXR5IGV4cGVyaWVuY2Ugc2NhbGUpDQoNCmBgYHtyIGZpZy5oZWlnaHQgPSA4fQ0Kc3VydmV5X21pbmkgJT4lIA0KICBsZWZ0X2pvaW4oc3VydmV5ICU+JSBzZWxlY3Qoc3VydmV5X2lkLCB3ZWlnaHRfZmluYWwsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllc19yYXdfcmFuZ2UsIGNzaV93ZWlnaHRlZCwgaGhmY3NfaW52LCBmc19zY29yZSksIGJ5ID0gInN1cnZleV9pZCIpICU+JQ0KICBtdXRhdGUocHJpb3JpdHkgPSBpZmVsc2UoZnNfc2NvcmUgPj0gcXVhbnRpbGUoZnNfc2NvcmUsIHByb2JzID0gLjc1KSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAicHJpb3JpdHkiLCAibm90X3ByaW9yaXR5IikpICU+JQ0KICBmaWx0ZXIoaGhfc2l6ZSAhPSAwKSAlPiUgDQogIHNlbGVjdChtYXRjaGVzKCJmaWVzX3xmY3NffGNzXyIpLCBwcmlvcml0eSkgJT4lIA0KICBncm91cF9ieShwcmlvcml0eSkgJT4lIA0KICBzdW1tYXJpc2VfYWxsKG1lYW4pICU+JSANCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSAtYyhwcmlvcml0eSkpICU+JSAgDQogIGZpbHRlcihuYW1lICVvdXQlIGMoImhoZmNzX2ludiIsICJmc19zY29yZSIsICJjc2lfd2VpZ2h0ZWQiLCAiZmllc19yYXdfcmFuZ2UiLCAiZmNzX2JvcmRlcmxpbmVfcG9vciIpKSAlPiUgDQogIGdncGxvdChhZXMoeSA9IHZhbHVlLCB4ID0gbmFtZSkpICsgDQogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoKSwgYWVzKGZpbGwgPSBwcmlvcml0eSksIHdpZHRoID0gLjUpICsgDQogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArIA0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gcGVyY2VudF9mb3JtYXQoYWNjdXJhY3kgPSAxKSwgYnJlYWtzID0gc2VxKDAsIDEsIC4xKSkgKyANCiAgbGFicyh4ID0gIiIsIHkgPSAiUGVyY2VudCBvZiBncm91cCIsIA0KICAgICAgIHRpdGxlID0gIkZvb2Qgc2VjdXJpdHkgaW5kaWNhdG9ycyAtLSBwcmlvcml0eSBhbmQgbm9uLXByaW9yaXR5IGdyb3VwIikgKyAgDQogIGNvb3JkX2ZsaXAoKSArIA0KICB0aGVtZShwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gIndoaXRlIikpDQogIA0KIyBnZ3NhdmUoZmlsZW5hbWUgPSAiLi9taXNjL3ByaW9yaXR5X25vbl9wcmlvcml0eV9yb3VuZDMucG5nIiwgZHBpID0gMzAwLCBoZWlnaHQgPSA3LCB3aWR0aCA9IDExLCB1bml0cyA9ICJpbiIpDQogIA0KYGBgDQoNCjxicj48YnI+PGJyPg0KDQojIyBGb29kIHNlY3VyaXR5IGluZGljYXRvcnMgYnkgcHJpb3JpdHkgZ3JvdXAgDQoNCmBgYHtyIGZpZy5oZWlnaHQ9OH0NCnN1cnZleV9taW5pICU+JSANCiAgbGVmdF9qb2luKHN1cnZleSAlPiUgc2VsZWN0KHN1cnZleV9pZCwgd2VpZ2h0X2ZpbmFsLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZXNfcmF3X3JhbmdlLCBjc2lfd2VpZ2h0ZWQsIGhoZmNzX2ludiwgZnNfc2NvcmUpLCBieSA9ICJzdXJ2ZXlfaWQiKSAlPiUNCiAgbXV0YXRlKHByaW9yaXR5ID0gaWZlbHNlKGZzX3Njb3JlID49IHF1YW50aWxlKGZzX3Njb3JlLCBwcm9icyA9IC43NSksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgInByaW9yaXR5IiwgIm5vdF9wcmlvcml0eSIpKSAlPiUNCiAgZmlsdGVyKGhoX3NpemUgIT0gMCkgJT4lIA0KICBzZWxlY3QoLW1hdGNoZXMoImZjc198Y3NffGZpZXNffGNsdXN0ZXJ8c3RhdGV8YWRtM3x3ZWlnaHRfZmluYWwiKSkgJT4lIA0KICBzZWxlY3QoLXN1cnZleV9pZCkgJT4lIA0KICBncm91cF9ieShwcmlvcml0eSkgJT4lIA0KICBzdW1tYXJpc2VfYWxsKG1lYW4pICU+JSANCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSAtYyhwcmlvcml0eSkpICU+JSANCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IHByaW9yaXR5LCB2YWx1ZXNfZnJvbSA9IHZhbHVlKSAlPiUgDQogIGFycmFuZ2UoZGVzYyhwcmlvcml0eSkpICU+JSANCiAgbXV0YXRlKHBlcmNlbnRfZGlmZiA9IChwcmlvcml0eSAtIG5vdF9wcmlvcml0eSkgLyBub3RfcHJpb3JpdHkpICU+JSANCiAgbXV0YXRlX2F0KHZhcnMobm90X3ByaW9yaXR5LCBwcmlvcml0eSwgcGVyY2VudF9kaWZmKSwgfiByb3VuZCgueCAqIDEwMCwgZGlnaXRzID0gMikpICU+JSANCiAgbXV0YXRlKG5vdF9wcmlvcml0eSA9IGlmZWxzZShuYW1lICVpbiUgYygidG90X2luY29tZSIsICJoaF9zaXplIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnNfc2NvcmUiLCAiaGhmY3NfaW52IiwgImNzaV93ZWlnaHRlZCIsICJmaWVzX3Jhd19yYW5nZSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kKG5vdF9wcmlvcml0eSAvIDEwMCwgZGlnaXRzID0gMiksIG5vdF9wcmlvcml0eSksIA0KICAgICAgICAgcHJpb3JpdHkgPSBpZmVsc2UobmFtZSAlaW4lIGMoInRvdF9pbmNvbWUiLCAiaGhfc2l6ZSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZzX3Njb3JlIiwgImhoZmNzX2ludiIsICJjc2lfd2VpZ2h0ZWQiLCAiZmllc19yYXdfcmFuZ2UiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kKHByaW9yaXR5IC8gMTAwLCBkaWdpdHMgPSAyKSwgcHJpb3JpdHkpKSAlPiUgIA0KICBhcnJhbmdlKGRlc2MocGVyY2VudF9kaWZmKSkgJT4lIA0KICBmaWx0ZXIobmFtZSAlb3V0JSBjKCJjc2lfd2VpZ2h0ZWQiLCAiZmllc19yYXdfcmFuZ2UiLCAiaGhmY3NfaW52IiwgImZzX3Njb3JlIiwgInRvdF9pbmNvbWUiKSkgJT4lIA0KICBtdXRhdGUobmFtZSA9IGZjdF9yZW9yZGVyKG5hbWUsIHBlcmNlbnRfZGlmZikpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gcHJpb3JpdHksIHkgPSBuYW1lKSkgKyANCiAgZ2VvbV9jb2woYWVzKGZpbGwgPSBwZXJjZW50X2RpZmYpKSArIA0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGVyY2VudF9kaWZmKSwgaGp1c3QgPSAwLCBzaXplID0gMi41KSArIA0KICBzY2FsZV9maWxsX3ZpcmlkaXMob3B0aW9uID0gImluZmVybm8iLCBkaXJlY3Rpb24gPSAtMSkgKyANCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA2MCwgYnkgPSAxMCkpICsNCiAgbGFicyh4ID0gIiUgb2YgcHJpb3JpdHkgZ3JvdXAiLCB5ID0gIiIsIGZpbGwgPSAiJWRpZmYiLCANCiAgICAgICB0aXRsZSA9ICJJbmRpY2F0b3JzIG1vc3QgYXNzb2NpYXRlZCB3aXRoIGZvb2QgaW5zZWN1cml0eSIsIA0KICAgICAgIHN1YnRpdGxlID0gIkRhcmtlciBjb2xvdXJzIHNob3cgaW5kaWNhdG9ycyBtb3N0IGFzc29jaWF0ZWQgd2l0aCBmb29kIGluc2VjdXJpdHkiLCANCiAgICAgICBjYXB0aW9uID0gIkRhdGEgc291cmNlOiBGQU8tV0ZQIGZvb2Qgc2VjdXJpdHkgc3VydmV5IHJvdW5kIDMiKSArIA0KICB0aGVtZShwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoaGp1c3QgPSAuNSksIA0KICAgICAgICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gIndoaXRlIikpDQoNCiMgZ2dzYXZlKGZpbGVuYW1lID0gIi4vbWlzYy9mb29kX2luc2VjdXJpdHlfcm91bmQzLnBuZyIsIGRwaSA9IDMwMCwgaGVpZ2h0ID0gNywgd2lkdGggPSAxMSwgdW5pdHMgPSAiaW4iKQ0KICANCmBgYA0KDQo8YnI+PGJyPjxicj4NCg0KIyMgSW1wYWN0IG9mIGNvbmZsaWN0IG9uIGZvb2QgaW5zZWN1cml0eQ0KDQpgYGB7cn0NCg0Kc3VydmV5ICU+JQ0KICBzZWxlY3Qoc2hvY2tzX2NvbmZsaWN0LCBob2hfZWR1Y2F0aW9uLCBmc19zY29yZSkgJT4lDQogIGdyb3VwX2J5KGhvaF9lZHVjYXRpb24pICU+JSANCiAgZG8odGlkeShsbShkYXRhID0gLiwgZm9ybXVsYSA9IGZzX3Njb3JlIH4gc2hvY2tzX2NvbmZsaWN0KSwgY29uZi5pbnQgPSBUUlVFKSkgJT4lIA0KICBmaWx0ZXIodGVybSAhPSAiKEludGVyY2VwdCkiICYgIWlzLm5hKGhvaF9lZHVjYXRpb24pKSAlPiUNCiAgZmlsdGVyKHAudmFsdWUgPCAuMDUpICU+JSANCiAgdW5ncm91cCgpICU+JSANCiAgbXV0YXRlKGhvaF9lZHVjYXRpb24gPSBmY3RfcmVvcmRlcihob2hfZWR1Y2F0aW9uLCBlc3RpbWF0ZSkpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gZXN0aW1hdGUsIHkgPSBob2hfZWR1Y2F0aW9uLCBjb2xvdXIgPSBlc3RpbWF0ZSkpICsgDQogICAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMCwgbHR5ID0gMiwgY29sb3VyID0gInJlZCIpICsgDQogICAgZ2VvbV9wb2ludChzaXplID0gMikgKyANCiAgICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IGNvbmYubG93LCB4bWF4ID0gY29uZi5oaWdoKSwgaGVpZ2h0ID0gLjIpICsgDQogICAgc2NhbGVfY29sb3VyX3ZpcmlkaXMob3B0aW9uID0gInR1cmJvIikgKyANCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsIA0KICAgICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA4LjUpLCANCiAgICAgICAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDcsIGZhY2UgPSAiYm9sZCIpLCANCiAgICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSA5KSwgDQogICAgICAgICAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJ3aGl0ZSIpKSArIA0KICBsYWJzKHkgPSAiRWR1Y2F0aW9uIGxldmVsLCBoZWFkIG9mIGhvdXNlaG9sZCIpICsgDQoNCnN1cnZleSAlPiUNCiAgc2VsZWN0KHNob2Nrc19jb25mbGljdCwgaW5jb21lX21haW5fdGV4dCwgZnNfc2NvcmUpICU+JQ0KICBncm91cF9ieShpbmNvbWVfbWFpbl90ZXh0KSAlPiUgDQogIGRvKHRpZHkobG0oZGF0YSA9IC4sIGZvcm11bGEgPSBmc19zY29yZSB+IHNob2Nrc19jb25mbGljdCksIGNvbmYuaW50ID0gVFJVRSkpICU+JSANCiAgZmlsdGVyKHRlcm0gIT0gIihJbnRlcmNlcHQpIiAmICFpcy5uYShpbmNvbWVfbWFpbl90ZXh0KSkgJT4lDQogIGZpbHRlcihwLnZhbHVlIDwgLjA1KSAlPiUgDQogIHVuZ3JvdXAoKSAlPiUgDQogIG11dGF0ZShpbmNvbWVfbWFpbl90ZXh0ID0gc3RyX3JlbW92ZShpbmNvbWVfbWFpbl90ZXh0LCAiaW1zXyIpLCANCiAgICAgICAgIGluY29tZV9tYWluX3RleHQgPSBmY3RfcmVvcmRlcihpbmNvbWVfbWFpbl90ZXh0LCBlc3RpbWF0ZSkpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gZXN0aW1hdGUsIHkgPSBpbmNvbWVfbWFpbl90ZXh0LCBjb2xvdXIgPSBlc3RpbWF0ZSkpICsgDQogICAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMCwgbHR5ID0gMiwgY29sb3VyID0gInJlZCIpICsgDQogICAgZ2VvbV9wb2ludChzaXplID0gMikgKyANCiAgICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IGNvbmYubG93LCB4bWF4ID0gY29uZi5oaWdoKSwgaGVpZ2h0ID0gLjIpICsgDQogICAgc2NhbGVfY29sb3VyX3ZpcmlkaXMob3B0aW9uID0gInR1cmJvIikgKyANCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsIA0KICAgICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA4LjUpLCANCiAgICAgICAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDcsIGZhY2UgPSAiYm9sZCIpLCANCiAgICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSA5KSwgDQogICAgICAgICAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJ3aGl0ZSIpKSArIA0KICBsYWJzKHkgPSAiTWFpbiBpbmNvbWUgc291cmNlIikgKyANCiAgDQogIA0KICBwbG90X2Fubm90YXRpb24odGl0bGUgPSAiSW1wYWN0IG9mIGNvbmZsaWN0IG9uIGZvb2QgaW5zZWN1cml0eSAiLCANCiAgICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gIlJlZGRlciBjb2xvdXJzIGluZGljYXRlIGhpZ2hlciBjb3JyZWxhdGlvbnMgd2l0aCBmb29kIGluc2VjdXJpdHkiLCANCiAgICAgICAgICAgICAgICAgIGNhcHRpb24gPSAiRGF0YSBzb3VyY2U6IFdGUC1GQU8gc3VydmV5OyBvbmx5IHNob3dpbmcgaW5kaWNhdG9ycyB3aXRoIHAtdmFsdWUgPCAwLjA1IiwgDQogICAgICAgICAgICAgICAgICB0aGVtZSA9IHRoZW1lKHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IC41KSkpDQogIA0KIyBnZ3NhdmUoZmlsZW5hbWUgPSAiLi9taXNjL2NvbmZsaWN0X2VzdGltYXRlcy5wbmciLCBkcGkgPSAzMDAsIGhlaWdodCA9IDcsIHdpZHRoID0gMTEsIHVuaXRzID0gImluIikNCg0KDQpgYGANCjxicj48YnI+PGJyPg0KDQojIyMgRWZmZWN0cyBvZiBjb25mbGljdCBvbiBmb29kIHNlY3VyaXR5IA0KDQpgYGB7ciBlc3RpbWF0ZS1wbG90LWZzLWluZGljZXN9DQoNCmNvbl9lc3QgPC0gZnVuY3Rpb24odGJsLCB5LCB4LCB6KXsNCiAgDQogIHkgPC0gZW5xdW8oeSkNCiAgeCA8LSBlbnF1byh4KQ0KICB6IDwtIGVucXVvKHopDQogIA0KICBtb2RlbF9mb3JtdWxhIDwtIGZvcm11bGEocGFzdGUwKHF1b19uYW1lKHkpLCAifiIsIHF1b19uYW1lKHgpKSkNCiAgDQogIGxtKG1vZGVsX2Zvcm11bGEsIGRhdGEgPSB0YmwpICU+JSANCiAgICB0aWR5KGNvbmYuaW50ID0gVFJVRSkgJT4lIA0KICAgIGZpbHRlcih0ZXJtICE9ICIoSW50ZXJjZXB0KSIpICU+JSANCiAgICBtdXRhdGUobW9kZWwgPSBwYXN0ZTAocXVvX25hbWUoeSksICJfIiwgcXVvX25hbWUoeikpKQ0KfQ0KDQpyYmluZCgNCnN1cnZleSAlPiUgDQogIGZpbHRlcihydXJhbCA9PSAxKSAlPiUgDQogIGNvbl9lc3QoaGhmY3NfaW52LCBzaG9ja3NfY29uZmxpY3QsIHJ1cmFsKSwgDQpzdXJ2ZXkgJT4lIA0KICBmaWx0ZXIocnVyYWwgPT0gMSkgJT4lIA0KICBjb25fZXN0KGZpZXNfcmF3X3JhbmdlLCBzaG9ja3NfY29uZmxpY3QsIHJ1cmFsKSwNCnN1cnZleSAlPiUgIA0KICBmaWx0ZXIocnVyYWwgPT0gMSkgJT4lIA0KICBjb25fZXN0KGNzaV93ZWlnaHRlZCwgc2hvY2tzX2NvbmZsaWN0LCBydXJhbCksDQpzdXJ2ZXkgJT4lIA0KICBmaWx0ZXIocnVyYWwgPT0gMCkgJT4lIA0KICBjb25fZXN0KGhoZmNzX2ludiwgc2hvY2tzX2NvbmZsaWN0LCB1cmJhbiksIA0Kc3VydmV5ICU+JSANCiAgZmlsdGVyKHJ1cmFsID09IDApICU+JSANCiAgY29uX2VzdChmaWVzX3Jhd19yYW5nZSwgc2hvY2tzX2NvbmZsaWN0LCB1cmJhbiksDQpzdXJ2ZXkgJT4lICANCiAgZmlsdGVyKHJ1cmFsID09IDApICU+JSANCiAgY29uX2VzdChjc2lfd2VpZ2h0ZWQsIHNob2Nrc19jb25mbGljdCwgdXJiYW4pDQopICU+JSANCiAgbXV0YXRlKHNpZ25pZmljYW50ID0gaWZlbHNlKHAudmFsdWUgPCAwLjA1LCAxLCAwKSwNCiAgICAgICAgIG1vZGVsID0gcmVjb2RlKG1vZGVsLCAiaGhmY3NfaW52X3J1cmFsIiA9ICJGQ1NfcnVyYWwiLCAiaGhmY3NfaW52X3VyYmFuIiA9ICJGQ1NfdXJiYW4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgImZpZXNfcmF3X3JhbmdlX3J1cmFsIiA9ICJGSUVTX3J1cmFsIiwgImZpZXNfcmF3X3JhbmdlX3VyYmFuIiA9ICJGSUVTX3VyYmFuIiwgIA0KICAgICAgICAgICAgICAgICAgICAgICAgImNzaV93ZWlnaHRlZF9ydXJhbCIgPSAiQ1NJX3J1cmFsIiwgImNzaV93ZWlnaHRlZF91cmJhbiIgPSAiQ1NJX3VyYmFuIiksDQogICAgICAgICBtb2RlbCA9IGZjdF9yZW9yZGVyKG1vZGVsLCBlc3RpbWF0ZSkpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gZXN0aW1hdGUsIHkgPSBtb2RlbCwgY29sb3VyID0gZXN0aW1hdGUpKSArIA0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLCBsdHkgPSAyLCBjb2xvdXIgPSAicmVkIikgKyANCiAgZ2VvbV9wb2ludChhZXMocGNoID0gZmN0X3JldihmYWN0b3Ioc2lnbmlmaWNhbnQpKSksIHNpemUgPSAyKSArIA0KICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IGNvbmYubG93LCB4bWF4ID0gY29uZi5oaWdoKSwgaGVpZ2h0ID0gMC4yKSArIA0KICBzY2FsZV9jb2xvdXJfdmlyaWRpcyhvcHRpb24gPSAidHVyYm8iLCBndWlkZSA9ICJub25lIikgKyANCiAgbGFicyh4ID0gIkVzdGltYXRlIiwgeSA9ICIiLCANCiAgICAgICB0aXRsZSA9ICJFZmZlY3Qgb2YgY29uZmxpY3Qgb24gZm9vZCBzZWN1cml0eSBpbmRpY2VzIiwgDQogICAgICAgc3VidGl0bGUgPSAiU3BsaXQgYnkgcnVyYWwvdXJiYW4gY29udGV4dHMiLA0KICAgICAgIHBjaCA9ICJTaWduaWZpY2FudCIpIA0KICANCmBgYA0KDQo8YnI+PGJyPjxicj4NCg0KIyMgQ29tbXVuaXR5IHByZWZlcmVuY2VzDQoNCg0KYGBge3IgZmlnLmhlaWdodD04fQ0Kc3VydmV5ICU+JSANCiAgbXV0YXRlX2F0KHZhcnMoY29udGFpbnMoIm5lZWRfIikpLCB+IC54ICogd2VpZ2h0X2ZpbmFsKSAlPiUgDQogIHNlbGVjdChjb250YWlucygibmVlZF8iKSkgJT4lIA0KICBzZWxlY3QoLWNvbnRhaW5zKCJyZWNlaXZlZCIpKSAlPiUgDQogIHJlcGxhY2UoaXMubmEoLiksIDApICU+JQ0KICBzdW1tYXJpc2VfYWxsKG1lYW4pICU+JQ0KICBwaXZvdF9sb25nZXIoY29scyA9IGV2ZXJ5dGhpbmcoKSkgJT4lIA0KICBmaWx0ZXIodmFsdWUgPj0gLjAxKSAlPiUgDQogIG11dGF0ZShuYW1lID0gc3RyX3JlbW92ZShuYW1lLCAibmVlZF8iKSwgDQogICAgICAgICBuYW1lID0gZmN0X3Jlb3JkZXIobmFtZSwgdmFsdWUpKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IHZhbHVlLCB5ID0gbmFtZSkpICsgDQogIGdlb21fY29sKCkgKyANCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBlcmNlbnQodmFsdWUsIGFjY3VyYWN5ID0gLjEpKSwgaGp1c3QgPSAtLjEpICsgDQogIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBwZXJjZW50KSArDQogIGxhYnMoeCA9ICIlIG9mIHBvcHVsYXRpb24iLCB5ID0gIk5lZWQiLCANCiAgICAgICB0aXRsZSA9ICJNb3N0IGNvbW1vbiBuZWVkcyIsIA0KICAgICAgIGNhcHRpb24gPSAiRGF0YSBzb3VyY2U6IEZBTy1XRlAgZm9vZCBzZWN1cml0eSBzdXJ2ZXkgcm91bmQgMyIpICsgDQogIHRoZW1lKHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAid2hpdGUiKSkNCg0KIyBnZ3NhdmUoZmlsZW5hbWUgPSAiLi9taXNjL21vc3RfY29tbW9uX25lZWRzLnBuZyIsIGRwaSA9IDMwMCwgaGVpZ2h0ID0gNywgd2lkdGggPSAxMSwgdW5pdHMgPSAiaW4iKQ0KDQpgYGANCg0KIyMgSGllcmFyY2hpY2FsIGNsdXN0ZXJpbmcNCg0KYGBge3J9DQojIFVzaW5nIHdhcmQNCnN1cnZleV93YXJkIDwtIHJlY2lwZSh+LiwgZGF0YSA9IHN1cnZleV9taW5pKSAlPiUNCiAgdXBkYXRlX3JvbGUoc3VydmV5X2lkLCBuZXdfcm9sZSA9ICJJRCIpICU+JSANCiAgc3RlcF9ub3JtYWxpemUoYWxsX3ByZWRpY3RvcnMoKSkgJT4lIA0KICBwcmVwKCkgJT4lDQogIGJha2UobmV3X2RhdGEgPSBOVUxMKSAlPiUgDQogIGRpc3QoKSAlPiUgDQogIGhjbHVzdChtZXRob2QgPSAid2FyZC5EMiIpDQoNCnN1cnZleV93YXJkJGxhYmVscyA8LSBzdXJ2ZXkkc3VydmV5X2lkDQoNCmBgYA0KDQpgYGB7cn0NCnN1cnZleV9oY2x1c3QgPC0gdGliYmxlKA0KICBsYWJlbCA9IHN1cnZleV93YXJkJGxhYmVscywNCiAgY2x1c3Rlcl9pZCA9IGN1dHJlZShzdXJ2ZXlfd2FyZCwgayA9IDExKSkgJT4lDQogIHJpZ2h0X2pvaW4oc3VydmV5X21pbmksIGJ5ID0gYygibGFiZWwiID0gInN1cnZleV9pZCIpKSAlPiUgDQogIG11dGF0ZShjbHVzdGVyID0gY2FzZV93aGVuKGNsdXN0ZXJfaWQgPT0gIDEgfiAiTCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJfaWQgPT0gIDIgfiAiTSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyX2lkID09ICAzIH4gIk4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3Rlcl9pZCA9PSAgNCB+ICJPIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJfaWQgPT0gIDUgfiAiUCIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyX2lkID09ICA2IH4gIlEiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3Rlcl9pZCA9PSAgNyB+ICJSIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJfaWQgPT0gIDggfiAiUyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJfaWQgPT0gIDkgfiAiVCIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyX2lkID09IDEwIH4gIlUiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3Rlcl9pZCA9PSAxMSB+ICJWIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJfaWQgPT0gMTIgfiAiVyIpKSAlPiUgDQogIHJlbmFtZShzdXJ2ZXlfaWQgPSBsYWJlbCkgJT4lIA0KICBsZWZ0X2pvaW4oc3VydmV5ICU+JQ0KICAgICAgICAgICAgICBzZWxlY3Qoc3VydmV5X2lkLCBhZG0zX3Bjb2RlLCB3ZWlnaHRfZmluYWwsIA0KICAgICAgICAgICAgICAgICAgICAgaGhmY3NfaW52LCBmc19zY29yZSwgDQogICAgICAgICAgICAgICAgICAgICBmaWVzX3Jhd19yYW5nZSwgY3NpX3dlaWdodGVkKSwgDQogICAgICAgICAgICBieSA9ICJzdXJ2ZXlfaWQiKSAlPiUgDQogIGxlZnRfam9pbihyZWFkX2NzdigiLi9kYXRhL3Bjb2Rlcy5jc3YiKSAlPiUgDQogICAgICAgICAgICAgIHNlbGVjdChhZG1pbjNfcGNvZGUsIHN0YXRlKSAlPiUgDQogICAgICAgICAgICAgIGRpc3RpbmN0KCksIA0KICAgICAgICAgICAgICBieSA9IGMoImFkbTNfcGNvZGUiID0gImFkbWluM19wY29kZSIpKSAlPiUNCiAgbXV0YXRlKGNsdXN0ZXJfaWQgPSBhcy5mYWN0b3IoY2x1c3Rlcl9pZCkpICU+JSANCiAgZ3JvdXBfYnkoY2x1c3Rlcl9pZCkgJT4lIA0KICBtdXRhdGUoY2x1c3Rlcl9jb3VudCA9IGlmZWxzZShpcy5uYShjbHVzdGVyX2lkKSwgMCwgMSksIA0KICAgICAgICAgY2x1c3Rlcl9uID0gc3VtKGNsdXN0ZXJfY291bnQpKSAlPiUgDQogIHVuZ3JvdXAoKQ0KDQoNCmBgYA0KDQojIyMgRGVuZHJvZ3JhbQ0KDQpgYGB7ciBmaWcuaGVpZ2h0ID0gOH0NCnN1cnZleV93YXJkICU+JSBhcy5kZW5kcm9ncmFtKCkgJT4lDQogIHNldCgiYnJhbmNoZXNfa19jb2xvciIsIGsgPSAxMSkgJT4lIA0KICBzZXQoImxhYmVsc19jb2wiLCAid2hpdGUiKSAlPiUgDQogIHBsb3QobWFpbiA9ICJEZW5kcm9ncmFtIG9mIHN1cnZleWVkIGhvdXNlaG9sZHMiKQ0KYGBgDQoNCiMjIyBDbHVzdGVyaW5nIHJlZmVyZW5jZSB0YWJsZSANCg0KYGBge3IgZmlnLmhlaWdodD04fQ0KanMgPC0gYygNCiAgImZ1bmN0aW9uKHNldHRpbmdzKXsiLA0KICAiICB2YXIgZGF0YXRhYmxlID0gc2V0dGluZ3Mub0luc3RhbmNlLmFwaSgpOyIsDQogICIgIHZhciB0YWJsZSA9IGRhdGF0YWJsZS50YWJsZSgpLm5vZGUoKTsiLA0KICAiICB2YXIgY2FwdGlvbiA9ICdmc19zY29yZSwgZmNzLCBmaWVzICYgY3NpIHJlc2NhbGVkIGJldHdlZW4gMCAoYmVzdCkgYW5kIDEgKHdvcnN0KTsgb3RoZXIgY29sdW1ucyBzaG93IHBlcmNlbnRhZ2VzIG9mIGdyb3VwIHBvcHVsYXRpb25zLiciLA0KICAiICAkKHRhYmxlKS5hcHBlbmQoJzxjYXB0aW9uIHN0eWxlPVwiY2FwdGlvbi1zaWRlOiBib3R0b21cIj4nICsgY2FwdGlvbiArICc8L2NhcHRpb24+Jyk7IiwNCiAgIn0iDQopDQoNCnN1cnZleV9oY2x1c3QgJT4lIA0KICBsZWZ0X2pvaW4oc3VydmV5ICU+JSBzZWxlY3Qoc3VydmV5X2lkLCB3ZWlnaHRfZmluYWwpKSAlPiUgDQogICMgZmlsdGVyKGNsdXN0ZXJfaWQgIT0gICJPIikgJT4lDQogIGZpbHRlcihoaF9zaXplICE9IDApICU+JSANCiAgIyBtdXRhdGUoY2x1c3RlciA9IGNhc2Vfd2hlbihjbHVzdGVyID09ICJPIiB+ICJTIiwgVFJVRSB+IHBhc3RlMChjbHVzdGVyKSkpICU+JSANCiAgZ3JvdXBfYnkoY2x1c3RlcikgJT4lIA0KICBzdW1tYXJpc2Uoc2FtcGxlID0gbigpLCAgICAgICANCiAgICAgICAgICAgIGZzX3Njb3JlID0gbWVhbihmc19zY29yZSwgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIGZpZXMgPSBtZWFuKGZpZXNfcmF3X3JhbmdlLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICAgICAgY3NpID0gbWVhbihjc2lfd2VpZ2h0ZWQsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgZmNzID0gbWVhbihoaGZjc19pbnYsIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICB3ZWlnaHRlZCA9IHN1bSh3ZWlnaHRfZmluYWwsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgcnVyYWwgPSBtZWFuKHJ1cmFsLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGluY29tZV9yZWR1Y2VkID0gbWVhbihpbmNvbWVfcmVkdWNlZCwgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIGRlYnRfbW9yZSA9IG1lYW4oaGhfZGVidF9tb3JlLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGNvbmZsaWN0ID0gbWVhbihzaG9ja3NfY29uZmxpY3QpLCANCiAgICAgICAgICAgIGxvc3Rfd29yayA9IG1lYW4oc2hvY2tzX2xvc3R3b3JrKSwgDQogICAgICAgICAgICBmb29kX3ByaWNlcyA9IG1lYW4oc2hvY2tzX2Zvb2RwcmljZXMpLCANCiAgICAgICAgICAgIHN0YWJsZV9ub25fYWcgPSBtZWFuKGltc19zdGFibGVfbm9uX2FnKSwNCiAgICAgICAgICAgIGZhcm1lciA9IG1lYW4oaW1zX2Zhcm1lciksIA0KICAgICAgICAgICAgc3RhYmxlX2FnID0gbWVhbihpbXNfc3RhYmxlX2FnKSwgDQogICAgICAgICAgICBjYXN1YWxfYWcgPSBtZWFuKGltc19jYXN1YWxfYWcpLCANCiAgICAgICAgICAgIGNhc3VhbF9ub25fYWcgPSBtZWFuKGltc19jYXN1YWxfbm9uX2FnKSwgDQogICAgICAgICAgICBwdWJsaWNfZW0gPSBtZWFuKGltc19wdWJsaWNfZW0pLCANCiAgICAgICAgICAgIG5vX2luY29tZSA9IG1lYW4oaW1zX25vX2luY29tZSksDQogICAgICAgICAgICBjaGlsZHJlbl8wXzQgPSBtZWFuKGNoaWxkcmVuXzBfNCwgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBlZHVfc2VjX2hpZ2ggPSBtZWFuKChlZHVfc2Vjb25kYXJ5ICsgZWR1X2hpZ2hlciksIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICB0b3RfaW5jb21lID0gc3VtKHRvdF9pbmNvbWUsIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICBwb3AgPSBzdW0oaGhfc2l6ZSwgbmEucm0gPSBUUlVFKSkgJT4lICANCiAgbXV0YXRlX2F0KHZhcnMocnVyYWw6Y2hpbGRyZW5fMF80KSwgfiByb3VuZCgueCAqIDEwMCwgZGlnaXRzID0gMikpICU+JSANCiAgbXV0YXRlX2F0KHZhcnMoZnNfc2NvcmUsIGZpZXMsIGNzaSwgZmNzKSwgfiByYW5nZV93bmEoLngpKSAlPiUNCiAgbXV0YXRlX2F0KHZhcnMoc2FtcGxlKSwgfiByb3VuZCgoLngpLyBzdW0oLngpICogMTAwLCBkaWdpdHMgPSAyKSkgJT4lIA0KICBtdXRhdGVfYXQodmFycyh3ZWlnaHRlZCksIH4gcm91bmQoKC54KS8gc3VtKC54KSAqIDEwMCwgZGlnaXRzID0gMikpICU+JSANCiAgbXV0YXRlKGluY29tZV9wYyA9IHJvdW5kKHRvdF9pbmNvbWUgLyBwb3AsIGRpZ2l0cyA9IDApKSAlPiUgDQogIHNlbGVjdCgtdG90X2luY29tZSwgLXBvcCwgLXNhbXBsZSkgJT4lIA0KICByZWxvY2F0ZShpbmNvbWVfcGMsIC5hZnRlciA9IHJ1cmFsKSAlPiUgDQogIGFycmFuZ2UoZGVzYyhmc19zY29yZSkpICU+JSANCiAgDQogIGRhdGF0YWJsZShmaWx0ZXIgPSBsaXN0KHBvc2l0aW9uID0gInRvcCIsIGNsZWFyID0gRkFMU0UpLA0KICAgICAgICAgICAgb3B0aW9ucyA9IGxpc3QocGFnZUxlbmd0aCA9IDEyLCBzY3JvbGxYID0gVFJVRSwNCiAgICAgICAgICAgICAgaW5pdENvbXBsZXRlID0gSlMoanMpLCNUaGlzIHdpbGwgYXZvaWQgbG9vcGluZyBvZiB0aGUgY2FwdGlvbiB3aGVuIHRoZXJlIGlzIHBhZ2luYXRpb24NCiAgICAgICAgICAgICAgaGVhZGVyQ2FsbGJhY2sgPSBEVDo6SlMoImZ1bmN0aW9uKHRoZWFkKSB7IiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICIgICQodGhlYWQpLmNzcygnZm9udC1zaXplJywgJy44ZW0nKTsiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAifSIpKSwNCiAgY2FwdGlvbiA9IGh0bWx0b29sczo6dGFncyRjYXB0aW9uKHN0eWxlID0gImNhcHRpb24tc2lkZTogdG9wOyBjb2xvcjogYmxhY2s7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgZm9udC1zaXplOiAxMzAlOyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBvc3NpYmxlIGNvbXBvbmVudCBvZiBhIGJlbmVmaWNpYXJ5IHByb2ZpbGUiKSwgDQogICkgJT4lICANCiAgZm9ybWF0Um91bmQoYygiZnNfc2NvcmUiLCAiZmllcyIsICJjc2kiLCAiZmNzIiwgImVkdV9zZWNfaGlnaCIpLCBkaWdpdHMgPSAzKSAlPiUNCiAgZm9ybWF0U3R5bGUoMCwgdGFyZ2V0ID0gInJvdyIsIGxpbmVIZWlnaHQgPSAiODAlIiwgZm9udFNpemUgPSAiODAlIikgDQoNCmBgYA0KDQo=