IyEgL2Jpbi9zaAouICIke3NyY2Rpcj0ufS9pbml0LnNoIjsgcGF0aF9wcmVwZW5kXyAuIC4uL3NyYwoKIyBUZXN0IC0tYWRkLWxvY2F0aW9uPWZpbGUgb3B0aW9uLgoKaWYgKGVjaG8gInRlc3RpbmdcYyI7IGVjaG8gMSwyLDMpIHwgZ3JlcCBjID4vZGV2L251bGw7IHRoZW4KICAjIFN0YXJkZW50IFZpc3RyYSBTVlI0IGdyZXAgbGFja3MgLWUsIHNheXMgZ2hhemlAY2FpcC5ydXRnZXJzLmVkdS4KICBpZiAoZWNobyAtbiB0ZXN0aW5nOyBlY2hvIDEsMiwzKSB8IHNlZCBzLy1uL3huLyB8IGdyZXAgeG4gPi9kZXYvbnVsbDsgdGhlbgogICAgYWNfbj0gYWNfYz0nCicgYWNfdD0nICAgICAgICAnCiAgZWxzZQogICAgYWNfbj0tbiBhY19jPSBhY190PQogIGZpCmVsc2UKICBhY19uPSBhY19jPSdcYycgYWNfdD0KZmkKCiMgU29tZSBmb2xkIHByb2dyYW1zIChsaWtlIFN1bk9TNCBhbmQgRnJlZUJTRCkgZG9uJ3QgaGF2ZSBhbiBvcHRpb24gdG8gd3JhcCBhdAojIHNwYWNlcy4KZWNobyBhYmMgfCBmb2xkIC1iIC1zIC13IDIwID4vZGV2L251bGwgMj4mMSB8fCB7CiAgZWNobyAiU2tpcHBpbmcgdGVzdDogZm9sZCBwcm9ncmFtIG5vdCBQT1NJWCBjb21wbGlhbnQiCiAgRXhpdCA3Nwp9CgojIFNvbWUgZm9sZCBwcm9ncmFtcyAobGlrZSBOZXRCU0QgNS4wKSByZW1vdmUgdHJhaWxpbmcgc3BhY2VzIHdoZW4gd3JhcHBpbmcuCmVjaG8gYWIgY2QgfCBmb2xkIC1iIC1zIC13IDMgfCBncmVwICcgJyA+L2Rldi9udWxsIHx8IHsKICBlY2hvICJTa2lwcGluZyB0ZXN0OiBmb2xkIHByb2dyYW0gdHJpbXMgdHJhaWxpbmcgc3BhY2VzIgogIEV4aXQgNzcKfQoKIyBTb21lIGZvbGQgcHJvZ3JhbXMgKGxpa2UgSFAtVVgpIGluc2VydCBhIG5ld2xpbmUgYXQgdGhlIGVuZCwgaWYgdGhlIGxhc3QKIyBsaW5lIHdhcyBub3QgdGVybWluYXRlZCB3aXRoIGEgbmV3bGluZSBhbmQgdGhlIC1zIG9wdGlvbiB3YXMgZ2l2ZW4uCmZvbGRvdXRwdXRjb3VudD1gZWNobyAkYWNfbiAiYWJjJGFjX2MiIHwgZm9sZCAtYiAtcyAtdyAyMCB8IHdjIC1jYApmb2xkb3V0cHV0Y291bnQ9YGVjaG8gIiRmb2xkb3V0cHV0Y291bnQiIHwgc2VkIC1lICdzL1sgCV0vL2cnYAp0ZXN0ICIkZm9sZG91dHB1dGNvdW50IiA9IDMgfHwgewogIGVjaG8gIlNraXBwaW5nIHRlc3Q6IGZvbGQgcHJvZ3JhbSBpbnNlcnRzIGV4dHJhIG5ld2xpbmUiCiAgRXhpdCA3Nwp9CgpjYXQgPDxcRU9GID4gbWZpLXRlc3Q1LnBvCiMgSEVBREVSLgojCm1zZ2lkICIiCm1zZ3N0ciAiIgoiUHJvamVjdC1JZC1WZXJzaW9uOiBCb25uaWUgVHlsZXJcbiIKIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iCiJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCgojOiBtYXJyaWVkLW1lbjo0CiMsIGZ1enp5Cm1zZ2lkICJUaGUgd29ybGQgaXMgZnVsbCBvZiBtYXJyaWVkIG1lbiIKbXNnc3RyICJTbyB2aWVsZSB2ZXJoZWlyYXRldGUgTeRubmVyIgoKIzogbWFycmllZC1tZW46NQptc2dpZCAid2l0aCB3aXZlcyB3aG8gbmV2ZXIgdW5kZXJzdGFuZCIKbXNnc3RyICJ1bmQgaWhyZSBGcmF1ZW4gdmVyc3RlaGVuIHNpZSBuaWNodCIKCiM6IG1hcnJpZWQtbWVuOjYKbXNnaWQgIlRoZXkncmUgbG9va2luZyBmb3Igc29tZW9uZSB0byBzaGFyZSIKbXNnc3RyICIiCgojIHNjaHdlciB6dSD8YmVyc2V0emVuLi4uCiM6IG1hcnJpZWQtbWVuOjcKbXNnaWQgInRoZSBleGNpdGVtZW50IG9mIGEgbG92ZSBhZmZhaXIiCm1zZ3N0ciAiIgoKIzogbWFycmllZC1tZW46OAptc2dpZCAiSnVzdCBhcyBzb29uIGFzIHRoZXkgZmluZCB5b3UiCm1zZ3N0ciAiIgoKIzogbWFycmllZC1tZW46OQptc2dpZCAiVGhleSB3YXJuIHlvdSBhbmQgZGFybiB5b3UiCm1zZ3N0ciAiIgoKI34gbXNnaWQgIllvdSBmbHkgb24gdGhlIHdpbmdzIG9mIHJvbWFuY2UiCiN+IG1zZ3N0ciAiRGllIEZs/GdlbCBkZXIgZnJpc2NoZW4gTGllYmUgaGViZW4gZGljaCB6dW0gSGltbWVsIgoKIywgZnV6enkKI34gbXNnaWQgIkluIHRoZSBleWVzIG9mIHRoZSB3b3JsZCIKI34gbXNnc3RyICJG/HIgZGllIGFuZGVyZW4iCgojIEV0d2FzIGZyZWllINxiZXJzZXR6dW5nLgojfiBtc2dpZCAiWW91J3JlIGp1c3QgYW5vdGhlciBjcmF6eSBnaXJsIgojfiBtc2dzdHIgImJpc3QgZHUgYmxv3yBlaW4gdmVycvxja3RlcyBkdW1tZXMgRGluZyIKCiN+IG1zZ2lkICJXaG8gbG92ZXMgYSBtYXJyaWVkIG1hbiIKI34gbXNnc3RyICJkYXMgZWluZW4gdmVyaGVpcmF0ZXRlbiBNYW5uIGxpZWJ0IgpFT0YKCjogJHtNU0dGSUxURVI9bXNnZmlsdGVyfQpMQ19BTEw9QyAke01TR0ZJTFRFUn0gLS1hZGQtbG9jYXRpb249ZmlsZSAtaSBtZmktdGVzdDUucG8gLW8gbWZpLXRlc3Q1Lm91dCBcCiAgICAgIGZvbGQgLWIgLXMgLXcgMjAgPm1maS10ZXN0NS5lcnIgMj4mMQpyZXN1bHQ9JD8KY2F0IG1maS10ZXN0NS5lcnIgfCBncmVwIC12ICd3YXJuaW5nOiBMb2NhbGUgY2hhcnNldCcgfCBncmVwIC12ICdeICcKdGVzdCAkcmVzdWx0ID0gMCB8fCB7IEV4aXQgMTsgfQoKY2F0IDw8XEVPRiA+IG1maS10ZXN0NS5vawojIEhFQURFUi4KIwptc2dpZCAiIgptc2dzdHIgIiIKIlByb2plY3QtSWQtVmVyc2lvbjogXG4iCiJCb25uaWUgVHlsZXJcbiIKIkNvbnRlbnQtVHlwZTogXG4iCiJ0ZXh0L3BsYWluOyBcbiIKImNoYXJzZXQ9SVNPLTg4NTktMVxuIgoiQ29udGVudC1UcmFuc2Zlci1FbmNcbiIKIm9kaW5nOiA4Yml0XG4iCgojOiBtYXJyaWVkLW1lbgojLCBmdXp6eQptc2dpZCAiVGhlIHdvcmxkIGlzIGZ1bGwgb2YgbWFycmllZCBtZW4iCm1zZ3N0ciAiIgoiU28gdmllbGUgXG4iCiJ2ZXJoZWlyYXRldGUgTeRubmVyIgoKIzogbWFycmllZC1tZW4KbXNnaWQgIndpdGggd2l2ZXMgd2hvIG5ldmVyIHVuZGVyc3RhbmQiCm1zZ3N0ciAiIgoidW5kIGlocmUgRnJhdWVuIFxuIgoidmVyc3RlaGVuIHNpZSBuaWNodCIKCiM6IG1hcnJpZWQtbWVuCm1zZ2lkICJUaGV5J3JlIGxvb2tpbmcgZm9yIHNvbWVvbmUgdG8gc2hhcmUiCm1zZ3N0ciAiIgoKIyBzY2h3ZXIgenUg/GJlcnNldHplbi4uLgojOiBtYXJyaWVkLW1lbgptc2dpZCAidGhlIGV4Y2l0ZW1lbnQgb2YgYSBsb3ZlIGFmZmFpciIKbXNnc3RyICIiCgojOiBtYXJyaWVkLW1lbgptc2dpZCAiSnVzdCBhcyBzb29uIGFzIHRoZXkgZmluZCB5b3UiCm1zZ3N0ciAiIgoKIzogbWFycmllZC1tZW4KbXNnaWQgIlRoZXkgd2FybiB5b3UgYW5kIGRhcm4geW91Igptc2dzdHIgIiIKCiN+IG1zZ2lkICJZb3UgZmx5IG9uIHRoZSB3aW5ncyBvZiByb21hbmNlIgojfiBtc2dzdHIgIiIKI34gIkRpZSBGbPxnZWwgZGVyIFxuIgojfiAiZnJpc2NoZW4gTGllYmUgXG4iCiN+ICJoZWJlbiBkaWNoIHp1bSBcbiIKI34gIkhpbW1lbCIKCiMsIGZ1enp5CiN+IG1zZ2lkICJJbiB0aGUgZXllcyBvZiB0aGUgd29ybGQiCiN+IG1zZ3N0ciAiRvxyIGRpZSBhbmRlcmVuIgoKIyBFdHdhcyBmcmVpZSDcYmVyc2V0enVuZy4KI34gbXNnaWQgIllvdSdyZSBqdXN0IGFub3RoZXIgY3JhenkgZ2lybCIKI34gbXNnc3RyICIiCiN+ICJiaXN0IGR1IGJsb98gZWluIFxuIgojfiAidmVycvxja3RlcyBkdW1tZXMgXG4iCiN+ICJEaW5nIgoKI34gbXNnaWQgIldobyBsb3ZlcyBhIG1hcnJpZWQgbWFuIgojfiBtc2dzdHIgIiIKI34gImRhcyBlaW5lbiBcbiIKI34gInZlcmhlaXJhdGV0ZW4gTWFubiBcbiIKI34gImxpZWJ0IgpFT0YKCjogJHtESUZGPWRpZmZ9CiR7RElGRn0gbWZpLXRlc3Q1Lm9rIG1maS10ZXN0NS5vdXQKcmVzdWx0PSQ/CgpleGl0ICRyZXN1bHQK