IyBNYWtlZmlsZSBmb3IgVklNIG9uIFdpbjMyLCB1c2luZyAnRUdDUy9taW5ndzMyIDEuMS4yJy4KIyBJbmZvIGF0IGh0dHA6Ly93d3cubWluZ3cub3JnCiMgQWxzbyByZXF1aXJlcyAnR05VIG1ha2UgMy43NycsIHdoaWNoIHlvdSBjYW4gZ2V0IHRocm91Z2ggYSBsaW5rCiMgdG8gJ0phbkphYXAncyBwYWdlIGZyb20gdGhlIGFib3ZlIHBhZ2UuCiMgR2V0IG1pc3NpbmcgbGlicmFyaWVzIGZyb20gaHR0cDovL2dudXdpbjMyLnNmLm5ldC4KIwojIFRlc3RlZCBvbiBXaW4zMiBOVCA0IGFuZCBXaW45NS4KIwojIFRvIG1ha2UgZXZlcnl0aGluZywganVzdCAnbWFrZSAtZiBNYWtlX21pbmcubWFrJwojIFRvIG1ha2UganVzdCBlLmcuIGd2aW0uZXhlLCAnbWFrZSAtZiBNYWtlX21pbmcubWFrIGd2aW0uZXhlJwojIEFmdGVyIGEgcnVuLCB5b3UgY2FuICdtYWtlIC1mIE1ha2VfbWluZy5tYWsgY2xlYW4nIHRvIGNsZWFuIHVwCiMKIyBOT1RFOiBTb21ldGltZXMgJ0dOVSBNYWtlJyB3aWxsIHN0b3AgYWZ0ZXIgYnVpbGRpbmcgdmltcnVuLmV4ZSAtLSBJIHRoaW5rCiMgaXQncyBqdXN0IHJ1biBvdXQgb2YgbWVtb3J5IG9yIHNvbWV0aGluZy4gIFJ1biBhZ2FpbiwgYW5kIGl0IHdpbGwgY29udGludWUKIyB3aXRoICd4eGQnLgojCiMgIm1ha2UgdXB4IiBtYWtlcyAqY29tcHJlc3NlZCogdmVyc2lvbnMgb2YgdGhlIEdVSSBhbmQgY29uc29sZSBFWEVzLCB1c2luZyB0aGUKIyBleGNlbGxlbnQgVVBYIGNvbXByZXNzb3I6CiMgICAgIGh0dHA6Ly91cHguc291cmNlZm9yZ2UubmV0LwojCiMgTWFpbnRhaW5lZCBieSBSb24gQWFyb24gPHJvbmFoYXJvbkB5YWhvby5jb20+CiMgdXBkYXRlZCAyMDAzIEphbiAyMAoKIz4+Pj4+IGNob29zZSBvcHRpb25zOgojIHNldCB0byB5ZXMgZm9yIGEgZGVidWcgYnVpbGQKREVCVUc9bm8KIyBzZXQgdG8gU0laRSBmb3Igc2l6ZSwgU1BFRUQgZm9yIHNwZWVkLCBNQVhTUEVFRCBmb3IgbWF4aW11bSBvcHRpbWl6YXRpb24KT1BUSU1JWkU9TUFYU1BFRUQKIyBzZXQgdG8geWVzIHRvIG1ha2UgZ3ZpbSwgbm8gZm9yIHZpbQpHVUk9eWVzCiMgRkVBVFVSRVM9W1RJTlkgfCBTTUFMTCAgfCBOT1JNQUwgfCBCSUcgfCBIVUdFXQojIHNldCB0byBUSU5ZIHRvIG1ha2UgbWluaW1hbCB2ZXJzaW9uIChmZXcgZmVhdHVyZXMpCkZFQVRVUkVTPUJJRwojIHNldCB0byBvbmUgb2YgaTM4NiwgaTQ4NiwgaTU4NiwgaTY4NiBhcyB0aGUgbWluaW11bSB0YXJnZXQgcHJvY2Vzc29yCkFSQ0g9aTM4NgojIHNldCB0byB5ZXMgdG8gY3Jvc3MtY29tcGlsZSBmcm9tIHVuaXg7IG5vPW5hdGl2ZSBXaW5kb3dzCkNST1NTPW5vCiMgc2V0IHRvIHBhdGggdG8gaWNvbnYuaCBhbmQgbGliaWNvbnYuYSB0byBlbmFibGUgdXNpbmcgJ2ljb252LmRsbCcKI0lDT05WPSIuIgpJQ09OVj15ZXMKR0VUVEVYVD15ZXMKIyBzZXQgdG8geWVzIHRvIGluY2x1ZGUgbXVsdGlieXRlIHN1cHBvcnQKTUJZVEU9eWVzCiMgc2V0IHRvIHllcyB0byBpbmNsdWRlIElNRSBzdXBwb3J0CklNRT15ZXMKRFlOQU1JQ19JTUU9eWVzCiMgc2V0IHRvIHllcyB0byBlbmFibGUgd3JpdGluZyBhIHBvc3RzY3JpcHQgZmlsZSB3aXRoIDpoYXJkY29weQpQT1NUU0NSSVBUPW5vCiMgc2V0IHRvIHllcyB0byBlbmFibGUgT0xFIHN1cHBvcnQKT0xFPW5vCiMgU2V0IHRoZSBkZWZhdWx0ICQoV0lOVkVSKSB0byBtYWtlIGl0IHdvcmsgd2l0aCBwcmUtV2luMmsKV0lOVkVSID0gMHgwNDAwCiMgU2V0IHRvIHllcyB0byBlbmFibGUgQ3Njb3BlIHN1cHBvcnQKQ1NDT1BFPXllcwojIFNldCB0byB5ZXMgdG8gZW5hYmxlIE5ldGJlYW5zIHN1cHBvcnQKTkVUQkVBTlM9JChHVUkpCgoKIyBJZiB0aGUgdXNlciBkb2Vzbid0IHdhbnQgZ2V0dGV4dCwgdW5kZWZpbmUgaXQuCmlmZXEgKG5vLCAkKEdFVFRFWFQpKQpHRVRURVhUPQplbmRpZgojIEFkZGVkIGJ5IEUuRi4gQW1hdHJpYSA8ZWZlcm5hMUBwbGF0ZWEucHRpYy5tZWMuZXM+IDIwMDEgRmViIDIzCiMgVW5jb21tZW50IHRoZSBmaXJzdCBsaW5lIGFuZCBvbmUgb2YgdGhlIGZvbGxvd2luZyB0aHJlZSBpZiB5b3Ugd2FudCBOYXRpdmUgTGFuZ3VhZ2UKIyBTdXBwb3J0LiAgWW91J2xsIG5lZWQgZ251X2dldHRleHQud2luMzIsIGEgTUlOR1czMiBXaW5kb3dzIFBPUlQgb2YgZ2V0dGV4dCBieQojIEZyYW5jbyBCZXogPGZyYW5jby5iZXpAZ214LmRlPi4gIEl0IG1heSBiZSBmb3VuZCBhdAojIGh0dHA6Ly9ob21lLmEtY2l0eS5kZS9mcmFuY28uYmV6L2dldHRleHQvZ2V0dGV4dF93aW4zMl9lbi5odG1sCiMgVGVzdGVkIHdpdGggbWluZ3czMiB3aXRoIEdDQy0yLjk1LjIgb24gV2luOTgKIyBVcGRhdGVkIDIwMDEgSnVuIDkKI0dFVFRFWFQ9YzovZ2V0dGV4dC53aW4zMi5tc3ZjcnQKI1NUQVRJQ19HRVRURVhUPVVTRV9TVEFUSUNfR0VUVEVYVAojRFlOQU1JQ19HRVRURVhUPVVTRV9HRVRURVhUX0RMTAojRFlOQU1JQ19HRVRURVhUPVVTRV9TQUZFX0dFVFRFWFRfRExMClNBRkVfR0VUVEVYVF9ETExfT0JKID0gJChHRVRURVhUKS9zcmMvc2FmZV9nZXR0ZXh0X2RsbC9zYWZlX2dldHRleHRfZGxsLm8KIyBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgdW5jb21tZW50IHRoZSB0d28gZm9sbG93aW5nIGxpbmVzLCB5b3UgZ2V0IGEgInNhZmUiIHZlcnNpb24KIyB3aXRob3V0IGxpbmtpbmcgdGhlIHNhZmVfZ2V0dGV4dF9kbGwubyBvYmplY3QgZmlsZS4KI0RZTkFNSUNfR0VUVEVYVD1EWU5BTUlDX0dFVFRFWFQKI0dFVFRFWFRfRFlOQU1JQz1nbnVfZ2V0dGV4dC5kbGwKSU5UTFBBVEg9JChHRVRURVhUKS9saWIvbWluZ3czMgpJTlRMTElCPWdudV9nZXR0ZXh0CgojIElmIHlvdSBhcmUgdXNpbmcgZ2V0dGV4dC0wLjEwLjM1IGZyb20gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9nZXR0ZXh0CiMgb3IgZ2V0dGV4dC0wLjEwLjM3IGZyb20gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9taW5nd3JlcC8KIyB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZywgYnV0IEkgY2FuJ3QgYnVpbGQgYSBzdGF0aWMgdmVyc2nzbiB3aXRoIHRoZW0sID8tKHwKI0dFVFRFWFQ9YzovZ2V0dGV4dC0wLjEwLjM3LTIwMDEwNDMwCiNTVEFUSUNfR0VUVEVYVD1VU0VfU1RBVElDX0dFVFRFWFQKI0RZTkFNSUNfR0VUVEVYVD1EWU5BTUlDX0dFVFRFWFQKI0lOVExQQVRIPSQoR0VUVEVYVCkvbGliCiNJTlRMTElCPWludGwKCiMgdW5jb21tZW50ICdQRVJMJyBpZiB5b3Ugd2FudCBhIHBlcmwtZW5hYmxlZCB2ZXJzaW9uCiNQRVJMPUM6L3BlcmwKaWZkZWYgUEVSTAppZm5kZWYgUEVSTF9WRVIKUEVSTF9WRVI9NTYKZW5kaWYKaWZuZGVmIERZTkFNSUNfUEVSTApEWU5BTUlDX1BFUkw9eWVzCmVuZGlmCiMgb24gTGludXgsIGZvciBjcm9zcy1jb21waWxlLCBpdCdzIGhlcmU6CiNQRVJMTElCPS9ob21lL3Jvbi9BY3RpdmVQZXJsL2xpYgojIG9uIE5ULCBpdCdzIGhlcmU6ClBFUkxMSUI9JChQRVJMKS9saWIKUEVSTExJQlM9JChQRVJMTElCKS9Db3JlCmVuZGlmCgojIHVuY29tbWVudCAnTVpTQ0hFTUUnIGlmIHlvdSB3YW50IGEgTXpTY2hlbWUtZW5hYmxlZCB2ZXJzaW9uCiNNWlNDSEVNRT1kOi9wbHQKaWZkZWYgTVpTQ0hFTUUKaWZuZGVmIERZTkFNSUNfTVpTQ0hFTUUKRFlOQU1JQ19NWlNDSEVNRT15ZXMKZW5kaWYKCmlmbmRlZiBNWlNDSEVNRV9WRVIKTVpTQ0hFTUVfVkVSPTIwNV8wMDAKZW5kaWYKCmlmbmRlZiBNWlNDSEVNRV9QUkVDSVNFX0dDCk1aU0NIRU1FX1BSRUNJU0VfR0M9bm8KZW5kaWYKCiMgZm9yIHZlcnNpb24gNC54IHdlIG5lZWQgdG8gZ2VuZXJhdGUgYnl0ZS1jb2RlIGZvciBTY2hlbWUgYmFzZQppZm5kZWYgTVpTQ0hFTUVfR0VORVJBVEVfQkFTRQpNWlNDSEVNRV9HRU5FUkFURV9CQVNFPW5vCmVuZGlmCgppZmVxIChubywkKERZTkFNSUNfTVpTQ0hFTUUpKQppZmVxICh5ZXMsJChNWlNDSEVNRV9QUkVDSVNFX0dDKSkKTVpTQ0hFTUVfTElCPS1sbXpzY2gkKE1aU0NIRU1FX1ZFUikKZWxzZQpNWlNDSEVNRV9MSUIgPSAtbG16c2NoJChNWlNDSEVNRV9WRVIpIC1sbXpnYyQoTVpTQ0hFTUVfVkVSKQplbmRpZgojIHRoZSBtb2Rlcm4gTWluR1cgY2FuIGR5bmFtaWNhbGx5IGxpbmsgdG8gZGxscyBkaXJlY3RseS4KIyBwb2ludCBNWlNDSEVNRV9ETExTIHRvIHdoZXJlIHlvdSBwdXQgbGlibXpzY2hYWFhYWFhYLmRsbCBhbmQgbGliZ2NYWFhYWFhYLmRsbAppZm5kZWYgTVpTQ0hFTUVfRExMUwpNWlNDSEVNRV9ETExTPSQoTVpTQ0hFTUUpCmVuZGlmCk1aU0NIRU1FX0xJQkRJUj0tTCQoTVpTQ0hFTUVfRExMUykgLUwkKE1aU0NIRU1FX0RMTFMpXGxpYgplbmRpZgoKZW5kaWYKCiMgUHl0aG9uIHN1cHBvcnQgLS0gd29ya3Mgd2l0aCB0aGUgQWN0aXZlU3RhdGUgcHl0aG9uIDIuMCByZWxlYXNlIChhbmQgb3RoZXJzCiMgdG9vLCBwcm9iYWJseSkKIwojIHVuY29tbWVudCAnUFlUSE9OJyB0byBtYWtlIHB5dGhvbi1lbmFibGVkIHZlcnNpb24KIyBQdXQgdGhlIHBhdGggdG8gdGhlIHB5dGhvbiBkaXN0cm8gaGVyZS4gIElmIGNyb3NzIGNvbXBpbGluZyBmcm9tIExpbnV4LCB5b3UKIyB3aWxsIGFsc28gbmVlZCB0byBjb252ZXJ0IHRoZSBoZWFkZXIgZmlsZXMgdG8gdW5peCBpbnN0ZWFkIG9mIGRvcyBmb3JtYXQ6CiMgICBmb3IgZmlsIGluICouaCA7IGRvIHZpbSAtZSAtYyAnc2V0IGZmPXVuaXh8d3xxJyAkZmlsCiMgYW5kIGFsc28sIHlvdSB3aWxsIG5lZWQgdG8gbWFrZSBhIG1pbmd3MzIgJ2xpYnB5dGhvbjIwLmEnIHRvIGxpbmsgd2l0aDoKIyAgIGNkICRQWVRIT04vbGlicwojICAgcGV4cG9ydHMgcHl0aG9uMjAuZGxsID4gcHl0aG9uMjAuZGVmCiMgICBkbGx0b29sIC1kIHB5dGhvbjIwLmRlZiAtbCBsaWJweXRob24yMC5hCiMgb24gbXkgTGludXggYm94LCBJIHB1dCB0aGUgUHl0aG9uIHN0dWZmIGhlcmU6CiNQWVRIT049L2hvbWUvcm9uL0FjdGl2ZVB5dGhvbi0yLjAuMC0yMDIvc3JjL0NvcmUKIyBvbiBteSBOVCBib3gsIGl0J3MgaGVyZToKI1BZVEhPTj1jOi9weXRob24yMAoKaWZkZWYgUFlUSE9OCmlmbmRlZiBEWU5BTUlDX1BZVEhPTgpEWU5BTUlDX1BZVEhPTj15ZXMKZW5kaWYKCmlmbmRlZiBQWVRIT05fVkVSClBZVEhPTl9WRVI9MjIKZW5kaWYKCmlmZXEgKG5vLCQoRFlOQU1JQ19QWVRIT04pKQpQWVRIT05MSUI9LUwkKFBZVEhPTikvbGlicyAtbHB5dGhvbiQoUFlUSE9OX1ZFUikKZW5kaWYKIyBteSBpbmNsdWRlIGZpbGVzIGFyZSBpbiAnd2luMzJpbmMnIG9uIExpbnV4LCBhbmQgJ2luY2x1ZGUnIGluIHRoZSBzdGFuZGFyZAojIE5UIGRpc3RybyAoQWN0aXZlU3RhdGUpCmlmZXEgKCQoQ1JPU1MpLG5vKQpQWVRIT05JTkM9LUkgJChQWVRIT04pL2luY2x1ZGUKZWxzZQpQWVRIT05JTkM9LUkgJChQWVRIT04pL3dpbjMyaW5jCmVuZGlmCmVuZGlmCgojCVRDTCBpbnRlcmZhY2U6CiMJICBUQ0w9W1BhdGggdG8gVENMIGRpcmVjdG9yeV0KIwkgIERZTkFNSUNfVENMPXllcyAodG8gbG9hZCB0aGUgVENMIERMTCBkeW5hbWljYWxseSkKIwkgIFRDTF9WRVI9W1RDTCB2ZXJzaW9uLCBlZyA4MywgODRdIChkZWZhdWx0IGlzIDgzKQojVENMPWM6L3RjbAppZmRlZiBUQ0wKaWZuZGVmIERZTkFNSUNfVENMCkRZTkFNSUNfVENMPXllcwplbmRpZgppZm5kZWYgVENMX1ZFUgpUQ0xfVkVSID0gODMKZW5kaWYKVENMSU5DICs9IC1JJChUQ0wpL2luY2x1ZGUKZW5kaWYKCgojCVJ1YnkgaW50ZXJmYWNlOgojCSAgUlVCWT1bUGF0aCB0byBSdWJ5IGRpcmVjdG9yeV0KIwkgIERZTkFNSUNfUlVCWT15ZXMgKHRvIGxvYWQgdGhlIFJ1YnkgRExMIGR5bmFtaWNhbGx5KQojCSAgUlVCWV9WRVI9W1J1YnkgdmVyc2lvbiwgZWcgMTYsIDE3XSAoZGVmYXVsdCBpcyAxNikKIwkgIFJVQllfVkVSX0xPTkc9W1J1YnkgdmVyc2lvbiwgZWcgMS42LCAxLjddIChkZWZhdWx0IGlzIDEuNikKIwkgICAgWW91IG11c3Qgc2V0IFJVQllfVkVSX0xPTkcgd2hlbiBjaGFuZ2UgUlVCWV9WRVIuCiNSVUJZPWM6L3J1YnkKaWZkZWYgUlVCWQppZm5kZWYgRFlOQU1JQ19SVUJZCkRZTkFNSUNfUlVCWT15ZXMKZW5kaWYKIyAgU2V0IGRlZmF1bHQgdmFsdWUKaWZuZGVmIFJVQllfVkVSClJVQllfVkVSID0gMTYKZW5kaWYKaWZuZGVmIFJVQllfVkVSX0xPTkcKUlVCWV9WRVJfTE9ORyA9IDEuNgplbmRpZgoKaWZuZGVmIFJVQllfUExBVEZPUk0KaWZlcSAoJChSVUJZX1ZFUiksIDE2KQpSVUJZX1BMQVRGT1JNID0gaTU4Ni1tc3dpbjMyCmVsc2UKaWZuZXEgKCQod2lsZGNhcmQgJChSVUJZKS9saWIvcnVieS8kKFJVQllfVkVSX0xPTkcpL2kzODYtbWluZ3czMiksKQpSVUJZX1BMQVRGT1JNID0gaTM4Ni1taW5ndzMyCmVsc2UKUlVCWV9QTEFURk9STSA9IGkzODYtbXN3aW4zMgplbmRpZgplbmRpZgplbmRpZgoKaWZuZGVmIFJVQllfSU5TVEFMTF9OQU1FCmlmZXEgKCQoUlVCWV9WRVIpLCAxNikKUlVCWV9JTlNUQUxMX05BTUUgPSBtc3dpbjMyLXJ1YnkkKFJVQllfVkVSKQplbHNlClJVQllfSU5TVEFMTF9OQU1FID0gbXN2Y3J0LXJ1YnkkKFJVQllfVkVSKQplbmRpZgplbmRpZgoKUlVCWUlOQyA9LUkgJChSVUJZKS9saWIvcnVieS8kKFJVQllfVkVSX0xPTkcpLyQoUlVCWV9QTEFURk9STSkgLUkgJChSVUJZKS9pbmNsdWRlL3J1YnktJChSVUJZX1ZFUl9MT05HKSAtSSAkKFJVQlkpL2luY2x1ZGUvcnVieS0kKFJVQllfVkVSX0xPTkcpLyQoUlVCWV9QTEFURk9STSkKaWZlcSAobm8sICQoRFlOQU1JQ19SVUJZKSkKUlVCWUxJQiA9IC1MJChSVUJZKS9saWIgLWwkKFJVQllfSU5TVEFMTF9OQU1FKQplbmRpZgoKZW5kaWYgIyBSVUJZCgojIFNlZSBmZWF0dXJlLmggZm9yIGEgbGlzdCBvZiBvcHRpb25zLgojIEFueSBvdGhlciBkZWZpbmVzIGNhbiBiZSBpbmNsdWRlZCBoZXJlLgpERUZfR1VJPS1ERkVBVF9HVUlfVzMyIC1ERkVBVF9DTElQQk9BUkQKREVGSU5FUz0tRFdJTjMyIC1EV0lOVkVSPSQoV0lOVkVSKSAtRF9XSU4zMl9XSU5OVD0kKFdJTlZFUikgXAoJLURIQVZFX1BBVEhERUYgLURGRUFUXyQoRkVBVFVSRVMpCmlmZXEgKCQoQ1JPU1MpLHllcykKIyBjcm9zcy1jb21waWxlciBwcmVmaXg6CkNST1NTX0NPTVBJTEUgPSBpNTg2LXBjLW1pbmd3MzJtc3ZjLQpERUwgPSBybQpNS0RJUiA9IG1rZGlyIC1wCkRJUlNMQVNIID0gLwplbHNlCiMgbm9ybWFsIChXaW5kb3dzKSBjb21waWxhdGlvbjoKQ1JPU1NfQ09NUElMRSA9CmlmbmVxIChzaC5leGUsICQoU0hFTEwpKQpERUwgPSBybQpNS0RJUiA9IG1rZGlyIC1wCkRJUlNMQVNIID0gLwplbHNlCkRFTCA9IGRlbApNS0RJUiA9IG1rZGlyCkRJUlNMQVNIID0gXFwKZW5kaWYKZW5kaWYKQ0MgOj0gJChDUk9TU19DT01QSUxFKWdjYwpXSU5EUkVTIDo9ICQoQ1JPU1NfQ09NUElMRSl3aW5kcmVzCgojPj4+Pj4gZW5kIG9mIGNob2ljZXMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpDRkxBR1MgPSAtSXByb3RvICQoREVGSU5FUykgLXBpcGUgLXcgLW1hcmNoPSQoQVJDSCkgLVdhbGwKCmlmZGVmIEdFVFRFWFQKREVGSU5FUyArPSAtREhBVkVfR0VUVEVYVCAtREhBVkVfTE9DQUxFX0gKR0VUVEVYVElOQ0xVREUgPSAkKEdFVFRFWFQpL2luY2x1ZGUKR0VUVEVYVExJQiA9ICQoSU5UTFBBVEgpCmlmZXEgKHllcywgJChHRVRURVhUKSkKREVGSU5FUyArPSAtRERZTkFNSUNfR0VUVEVYVAplbHNlCmlmZGVmIERZTkFNSUNfR0VUVEVYVApERUZJTkVTICs9IC1EJChEWU5BTUlDX0dFVFRFWFQpCmlmZGVmIEdFVFRFWFRfRFlOQU1JQwpERUZJTkVTICs9IC1ER0VUVEVYVF9EWU5BTUlDIC1ER0VUVEVYVF9ETEw9XCIkKEdFVFRFWFRfRFlOQU1JQylcIgplbmRpZgplbmRpZgplbmRpZgplbmRpZgoKaWZkZWYgUEVSTApDRkxBR1MgKz0gLUkkKFBFUkxMSUJTKSAtREZFQVRfUEVSTCAtTCQoUEVSTExJQlMpCmlmZXEgKHllcywgJChEWU5BTUlDX1BFUkwpKQpDRkxBR1MgKz0gLUREWU5BTUlDX1BFUkwgLUREWU5BTUlDX1BFUkxfRExMPVwicGVybCQoUEVSTF9WRVIpLmRsbFwiCmVuZGlmCmVuZGlmCgppZmRlZiBNWlNDSEVNRQpDRkxBR1MgKz0gLUkkKE1aU0NIRU1FKS9pbmNsdWRlIC1ERkVBVF9NWlNDSEVNRSAtRE1aU0NIRU1FX0NPTExFQ1RTPVwiJChNWlNDSEVNRSkvY29sbGVjdHNcIgppZmVxICh5ZXMsICQoRFlOQU1JQ19NWlNDSEVNRSkpCkNGTEFHUyArPSAtRERZTkFNSUNfTVpTQ0hFTUUgLUREWU5BTUlDX01aU0NIX0RMTD1cImxpYm16c2NoJChNWlNDSEVNRV9WRVIpLmRsbFwiIC1ERFlOQU1JQ19NWkdDX0RMTD1cImxpYm16Z2MkKE1aU0NIRU1FX1ZFUikuZGxsXCIKZW5kaWYKZW5kaWYKCmlmZGVmIFJVQlkKQ0ZMQUdTICs9IC1ERkVBVF9SVUJZICQoUlVCWUlOQykKaWZlcSAoeWVzLCAkKERZTkFNSUNfUlVCWSkpCkNGTEFHUyArPSAtRERZTkFNSUNfUlVCWSAtRERZTkFNSUNfUlVCWV9ETEw9XCIkKFJVQllfSU5TVEFMTF9OQU1FKS5kbGxcIgpDRkxBR1MgKz0gLUREWU5BTUlDX1JVQllfVkVSPSQoUlVCWV9WRVIpCmVuZGlmCmVuZGlmCgppZmRlZiBQWVRIT04KQ0ZMQUdTICs9IC1ERkVBVF9QWVRIT04gJChQWVRIT05JTkMpCmlmZXEgKHllcywgJChEWU5BTUlDX1BZVEhPTikpCkNGTEFHUyArPSAtRERZTkFNSUNfUFlUSE9OIC1ERFlOQU1JQ19QWVRIT05fRExMPVwicHl0aG9uJChQWVRIT05fVkVSKS5kbGxcIgplbmRpZgplbmRpZgoKaWZkZWYgVENMCkNGTEFHUyArPSAtREZFQVRfVENMICQoVENMSU5DKQppZmVxICh5ZXMsICQoRFlOQU1JQ19UQ0wpKQpDRkxBR1MgKz0gLUREWU5BTUlDX1RDTCAtRERZTkFNSUNfVENMX0RMTD1cInRjbCQoVENMX1ZFUikuZGxsXCIKZW5kaWYKZW5kaWYKCmlmZXEgKCQoUE9TVFNDUklQVCkseWVzKQpERUZJTkVTICs9IC1ETVNXSU5QUwplbmRpZgoKaWZlcSAoeWVzLCAkKE9MRSkpCkRFRklORVMgKz0gLURGRUFUX09MRQplbmRpZgoKaWZlcSAoJChDU0NPUEUpLHllcykKREVGSU5FUyArPSAtREZFQVRfQ1NDT1BFCmVuZGlmCgppZmVxICgkKE5FVEJFQU5TKSx5ZXMpCiMgT25seSBhbGxvdyBORVRCRUFOUyBmb3IgYSBHVUkgYnVpbGQuCmlmZXEgKHllcywgJChHVUkpKQpERUZJTkVTICs9IC1ERkVBVF9ORVRCRUFOU19JTlRHCgppZmVxICgkKE5CREVCVUcpLCB5ZXMpCkRFRklORVMgKz0gLUROQkRFQlVHCk5CREVCVUdfSU5DTCA9IG5iZGVidWcuaApOQkRFQlVHX1NSQyA9IG5iZGVidWcuYwplbmRpZgplbmRpZgplbmRpZgoKaWZkZWYgWFBNCiMgT25seSBhbGxvdyBYUE0gZm9yIGEgR1VJIGJ1aWxkLgppZmVxICh5ZXMsICQoR1VJKSkKQ0ZMQUdTICs9IC1ERkVBVF9YUE1fVzMyIC1JICQoWFBNKS9pbmNsdWRlCmVuZGlmCmVuZGlmCgppZmVxICgkKERFQlVHKSx5ZXMpCkNGTEFHUyArPSAtZyAtZnN0YWNrLWNoZWNrCkRFQlVHX1NVRkZJWD1kCmVsc2UKaWZlcSAoJChPUFRJTUlaRSksIFNJWkUpCkNGTEFHUyArPSAtT3MKZWxzZQppZmVxICgkKE9QVElNSVpFKSwgTUFYU1BFRUQpCkNGTEFHUyArPSAtTzMKQ0ZMQUdTICs9IC1mb21pdC1mcmFtZS1wb2ludGVyIC1mcmVnLXN0cnVjdC1yZXR1cm4KZWxzZSAgIyBTUEVFRApDRkxBR1MgKz0gLU8yCmVuZGlmCmVuZGlmCkNGTEFHUyArPSAtcwplbmRpZgoKTElCID0gLWxrZXJuZWwzMiAtbHVzZXIzMiAtbGdkaTMyIC1sYWR2YXBpMzIgLWxjb21kbGczMiAtbGNvbWN0bDMyIC1sdmVyc2lvbgpHVUlPQkogPSAgJChPVVRESVIpL2d1aS5vICQoT1VURElSKS9ndWlfdzMyLm8gJChPVVRESVIpL2d1aV9iZXZhbC5vICQoT1VURElSKS9vc193MzJleGUubwpPQkogPSBcCgkkKE9VVERJUikvYnVmZmVyLm8gXAoJJChPVVRESVIpL2NoYXJzZXQubyBcCgkkKE9VVERJUikvZGlmZi5vIFwKCSQoT1VURElSKS9kaWdyYXBoLm8gXAoJJChPVVRESVIpL2VkaXQubyBcCgkkKE9VVERJUikvZXZhbC5vIFwKCSQoT1VURElSKS9leF9jbWRzLm8gXAoJJChPVVRESVIpL2V4X2NtZHMyLm8gXAoJJChPVVRESVIpL2V4X2RvY21kLm8gXAoJJChPVVRESVIpL2V4X2V2YWwubyBcCgkkKE9VVERJUikvZXhfZ2V0bG4ubyBcCgkkKE9VVERJUikvZmlsZWlvLm8gXAoJJChPVVRESVIpL2ZvbGQubyBcCgkkKE9VVERJUikvZ2V0Y2hhci5vIFwKCSQoT1VURElSKS9oYXJkY29weS5vIFwKCSQoT1VURElSKS9oYXNodGFiLm8gXAoJJChPVVRESVIpL21haW4ubyBcCgkkKE9VVERJUikvbWFyay5vIFwKCSQoT1VURElSKS9tZW1maWxlLm8gXAoJJChPVVRESVIpL21lbWxpbmUubyBcCgkkKE9VVERJUikvbWVudS5vIFwKCSQoT1VURElSKS9tZXNzYWdlLm8gXAoJJChPVVRESVIpL21pc2MxLm8gXAoJJChPVVRESVIpL21pc2MyLm8gXAoJJChPVVRESVIpL21vdmUubyBcCgkkKE9VVERJUikvbWJ5dGUubyBcCgkkKE9VVERJUikvbm9ybWFsLm8gXAoJJChPVVRESVIpL29wcy5vIFwKCSQoT1VURElSKS9vcHRpb24ubyBcCgkkKE9VVERJUikvb3Nfd2luMzIubyBcCgkkKE9VVERJUikvb3NfbXN3aW4ubyBcCgkkKE9VVERJUikvcGF0aGRlZi5vIFwKCSQoT1VURElSKS9wb3B1cG1udS5vIFwKCSQoT1VURElSKS9xdWlja2ZpeC5vIFwKCSQoT1VURElSKS9yZWdleHAubyBcCgkkKE9VVERJUikvc2NyZWVuLm8gXAoJJChPVVRESVIpL3NlYXJjaC5vIFwKCSQoT1VURElSKS9zcGVsbC5vIFwKCSQoT1VURElSKS9zeW50YXgubyBcCgkkKE9VVERJUikvdGFnLm8gXAoJJChPVVRESVIpL3Rlcm0ubyBcCgkkKE9VVERJUikvdWkubyBcCgkkKE9VVERJUikvdW5kby5vIFwKCSQoT1VURElSKS92ZXJzaW9uLm8gXAoJJChPVVRESVIpL3ZpbXJjLm8gXAoJJChPVVRESVIpL3dpbmRvdy5vCgppZmRlZiBQRVJMCk9CSiArPSAkKE9VVERJUikvaWZfcGVybC5vCmVuZGlmCmlmZGVmIE1aU0NIRU1FCk9CSiArPSAkKE9VVERJUikvaWZfbXpzY2gubwpNWlNDSEVNRV9JTkNMID0gaWZfbXpzY2guaAppZmVxICh5ZXMsJChNWlNDSEVNRV9HRU5FUkFURV9CQVNFKSkKQ0ZMQUdTICs9IC1ESU5DTFVERV9NWlNDSEVNRV9CQVNFCk1aX0VYVFJBX0RFUCArPSBtenNjaGVtZV9iYXNlLmMKZW5kaWYKaWZlcSAoeWVzLCQoTVpTQ0hFTUVfUFJFQ0lTRV9HQykpCkNGTEFHUyArPSAtRE1aX1BSRUNJU0VfR0MKZW5kaWYKZW5kaWYKaWZkZWYgUFlUSE9OCk9CSiArPSAkKE9VVERJUikvaWZfcHl0aG9uLm8KZW5kaWYKaWZkZWYgUlVCWQpPQkogKz0gJChPVVRESVIpL2lmX3J1YnkubwplbmRpZgppZmRlZiBUQ0wKT0JKICs9ICQoT1VURElSKS9pZl90Y2wubwplbmRpZgppZmVxICgkKENTQ09QRSkseWVzKQpPQkogKz0gJChPVVRESVIpL2lmX2NzY29wZS5vCmVuZGlmCmlmZXEgKCQoTkVUQkVBTlMpLHllcykKIyBPbmx5IGFsbG93IE5FVEJFQU5TIGZvciBhIEdVSSBidWlsZC4KaWZlcSAoeWVzLCAkKEdVSSkpCk9CSiArPSAkKE9VVERJUikvbmV0YmVhbnMubwpMSUIgKz0gLWx3c29jazMyCmVuZGlmCmVuZGlmCmlmZGVmIFhQTQojIE9ubHkgYWxsb3cgWFBNIGZvciBhIEdVSSBidWlsZC4KaWZlcSAoeWVzLCAkKEdVSSkpCk9CSiArPSAkKE9VVERJUikveHBtX3czMi5vCiMgWW91J2xsIG5lZWQgbGliWHBtLmEgZnJvbSBodHRwOi8vZ251d2luMzIuc2YubmV0CkxJQiArPSAtTCAkKFhQTSkvbGliIC1sWHBtCmVuZGlmCmVuZGlmCgoKaWZkZWYgTVpTQ0hFTUUKTVpTQ0hFTUVfU1VGRklYID0gWgplbmRpZgoKaWZlcSAoJChHVUkpLHllcykKVEFSR0VUIDo9IGd2aW0kKERFQlVHX1NVRkZJWCkuZXhlCkRFRklORVMgKz0gJChERUZfR1VJKQpPQkogKz0gJChHVUlPQkopCkxGTEFHUyArPSAtbXdpbmRvd3MKT1VURElSID0gZ29iaiQoREVCVUdfU1VGRklYKSQoTVpTQ0hFTUVfU1VGRklYKQplbHNlClRBUkdFVCA6PSB2aW0kKERFQlVHX1NVRkZJWCkuZXhlCk9VVERJUiA9IG9iaiQoREVCVUdfU1VGRklYKSQoTVpTQ0hFTUVfU1VGRklYKQplbmRpZgoKaWZkZWYgR0VUVEVYVAppZm5lcSAoeWVzLCAkKEdFVFRFWFQpKQpDRkxBR1MgKz0gLUkkKEdFVFRFWFRJTkNMVURFKQppZm5kZWYgU1RBVElDX0dFVFRFWFQKTElCICs9IC1MJChHRVRURVhUTElCKSAtbCQoSU5UTExJQikKaWZlcSAoVVNFX1NBRkVfR0VUVEVYVF9ETEwsICQoRFlOQU1JQ19HRVRURVhUKSkKT0JKKz0kKFNBRkVfR0VUVEVYVF9ETExfT0JKKQplbmRpZgplbHNlCkxJQiArPSAtTCQoR0VUVEVYVExJQikgLWxpbnRsCmVuZGlmCmVuZGlmCmVuZGlmCgppZmRlZiBQRVJMCmlmZXEgKG5vLCAkKERZTkFNSUNfUEVSTCkpCkxJQiArPSAtbHBlcmwkKFBFUkxfVkVSKQplbmRpZgplbmRpZgoKaWZkZWYgVENMCkxJQiArPSAtTCQoVENMKS9saWIKaWZlcSAoeWVzLCAkKERZTkFNSUNfVENMKSkKTElCICs9IC1sdGNsc3R1YiQoVENMX1ZFUikKZWxzZQpMSUIgKz0gLWx0Y2wkKFRDTF9WRVIpCmVuZGlmCmVuZGlmCgppZmVxICh5ZXMsICQoT0xFKSkKTElCICs9IC1sb2xlYXV0MzIgLWxzdGRjKysKT0JKICs9ICQoT1VURElSKS9pZl9vbGUubwplbmRpZgoKaWZlcSAoeWVzLCAkKE1CWVRFKSkKREVGSU5FUyArPSAtREZFQVRfTUJZVEUKZW5kaWYKCmlmZXEgKHllcywgJChJTUUpKQpERUZJTkVTICs9IC1ERkVBVF9NQllURV9JTUUKaWZlcSAoeWVzLCAkKERZTkFNSUNfSU1FKSkKREVGSU5FUyArPSAtRERZTkFNSUNfSU1FCmVsc2UKTElCICs9IC1saW1tMzIKZW5kaWYKZW5kaWYKCmlmZGVmIElDT05WCmlmbmVxICh5ZXMsICQoSUNPTlYpKQpMSUIgKz0gLUwkKElDT05WKQpDRkxBR1MgKz0gLUkkKElDT05WKQplbmRpZgpERUZJTkVTKz0tRERZTkFNSUNfSUNPTlYKZW5kaWYKCmFsbDogJChUQVJHRVQpIHZpbXJ1bi5leGUgeHhkL3h4ZC5leGUgaW5zdGFsbC5leGUgdW5pbnN0YWwuZXhlIEd2aW1FeHQvZ3ZpbWV4dC5kbGwKCnZpbXJ1bi5leGU6IHZpbXJ1bi5jCgkkKENDKSAkKENGTEFHUykgLW8gdmltcnVuLmV4ZSB2aW1ydW4uYyAkKExJQikKCmluc3RhbGwuZXhlOiBkb3NpbnN0LmMKCSQoQ0MpICQoQ0ZMQUdTKSAtbyBpbnN0YWxsLmV4ZSBkb3NpbnN0LmMgJChMSUIpIC1sb2xlMzIgLWx1dWlkCgp1bmluc3RhbC5leGU6IHVuaW5zdGFsLmMKCSQoQ0MpICQoQ0ZMQUdTKSAtbyB1bmluc3RhbC5leGUgdW5pbnN0YWwuYyAkKExJQikKCiQoVEFSR0VUKTogJChPVVRESVIpICQoT0JKKQoJJChDQykgJChDRkxBR1MpICQoTEZMQUdTKSAtbyAkQCAkKE9CSikgJChMSUIpIC1sb2xlMzIgLWx1dWlkICQoTVpTQ0hFTUVfTElCRElSKSAkKE1aU0NIRU1FX0xJQikgJChQWVRIT05MSUIpICQoUlVCWUxJQikKCnVweDogZXhlcwoJdXB4IGd2aW0uZXhlCgl1cHggdmltLmV4ZQoKeHhkL3h4ZC5leGU6IHh4ZC94eGQuYwoJJChNQUtFKSAtQyB4eGQgLWYgTWFrZV9jeWcubWFrIENDPSQoQ0MpCgpHdmltRXh0L2d2aW1leHQuZGxsOiBHdmltRXh0L2d2aW1leHQuY3BwIEd2aW1FeHQvZ3ZpbWV4dC5yYyBHdmltRXh0L2d2aW1leHQuaAoJJChNQUtFKSAtQyBHdmltRXh0IC1mIE1ha2VfbWluZy5tYWsgQ1JPU1M9JChDUk9TUykgQ1JPU1NfQ09NUElMRT0kKENST1NTX0NPTVBJTEUpCgpjbGVhbjoKCS0kKERFTCkgJChPVVRESVIpJChESVJTTEFTSCkqLm8KCS0kKERFTCkgJChPVVRESVIpJChESVJTTEFTSCkqLnJlcwoJLXJtZGlyICQoT1VURElSKQoJLSQoREVMKSAqLmV4ZQoJLSQoREVMKSBwYXRoZGVmLmMKaWZkZWYgUEVSTAoJLSQoREVMKSBpZl9wZXJsLmMKZW5kaWYKaWZkZWYgTVpTQ0hFTUUKCS0kKERFTCkgbXpzY2hlbWVfYmFzZS5jCmVuZGlmCgkkKE1BS0UpIC1DIEd2aW1FeHQgLWYgTWFrZV9taW5nLm1hayBjbGVhbgoJJChNQUtFKSAtQyB4eGQgLWYgTWFrZV9jeWcubWFrIGNsZWFuCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKSU5DTCA9IHZpbS5oIGZlYXR1cmUuaCBvc193aW4zMi5oIG9zX2Rvcy5oIGFzY2lpLmgga2V5bWFwLmggdGVybS5oIG1hY3Jvcy5oIFwKCXN0cnVjdHMuaCByZWdleHAuaCBvcHRpb24uaCBleF9jbWRzLmggcHJvdG8uaCBnbG9iYWxzLmggZmFyc2kuaCBcCglndWkuaAoKJChPVVRESVIpLyUubyA6ICUuYyAkKElOQ0wpCgkkKENDKSAtYyAkKENGTEFHUykgJDwgLW8gJEAKCiQoT1VURElSKS92aW1yZXMucmVzOiB2aW0ucmMgdmVyc2lvbi5oIGd1aV93MzJfcmMuaAoJJChXSU5EUkVTKSAkKERFRklORVMpIHZpbS5yYyAkKE9VVERJUikvdmltcmVzLnJlcwoKJChPVVRESVIpL3ZpbXJjLm86ICQoT1VURElSKS92aW1yZXMucmVzCgkkKFdJTkRSRVMpICQoT1VURElSKS92aW1yZXMucmVzICQoT1VURElSKS92aW1yYy5vCgokKE9VVERJUik6CgkkKE1LRElSKSAkKE9VVERJUikKCiQoT1VURElSKS9leF9kb2NtZC5vOglleF9kb2NtZC5jICQoSU5DTCkgZXhfY21kcy5oCgkkKENDKSAtYyAkKENGTEFHUykgZXhfZG9jbWQuYyAtbyAkKE9VVERJUikvZXhfZG9jbWQubwoKJChPVVRESVIpL2V4X2V2YWwubzoJZXhfZXZhbC5jICQoSU5DTCkgZXhfY21kcy5oCgkkKENDKSAtYyAkKENGTEFHUykgZXhfZXZhbC5jIC1vICQoT1VURElSKS9leF9ldmFsLm8KCiQoT1VURElSKS9pZl9jc2NvcGUubzoJaWZfY3Njb3BlLmMgJChJTkNMKSBpZl9jc2NvcGUuaAoJJChDQykgLWMgJChDRkxBR1MpIGlmX2NzY29wZS5jIC1vICQoT1VURElSKS9pZl9jc2NvcGUubwoKIyBSZW1vdmUgLURfX0lJRF9ERUZJTkVEX18gZm9yIG5ld2VyIHZlcnNpb25zIG9mIHRoZSB3MzJhcGkKJChPVVRESVIpL2lmX29sZS5vOiBpZl9vbGUuY3BwICQoSU5DTCkKCSQoQ0MpICQoQ0ZMQUdTKSAtYyAtbyAkKE9VVERJUikvaWZfb2xlLm8gaWZfb2xlLmNwcAoKJChPVVRESVIpL2lmX3J1YnkubzogaWZfcnVieS5jICQoSU5DTCkKaWZlcSAoMTYsICQoUlVCWSkpCgkkKENDKSAkKENGTEFHUykgLVVfV0lOMzIgLWMgLW8gJChPVVRESVIpL2lmX3J1YnkubyBpZl9ydWJ5LmMKZW5kaWYKCmlmX3BlcmwuYzogaWZfcGVybC54cyB0eXBlbWFwCglwZXJsICQoUEVSTExJQikvRXh0VXRpbHMveHN1YnBwIC1wcm90b3R5cGVzIC10eXBlbWFwIFwKCSAgICAgJChQRVJMTElCKS9FeHRVdGlscy90eXBlbWFwIGlmX3BlcmwueHMgPiAkQAoKJChPVVRESVIpL25ldGJlYW5zLm86CW5ldGJlYW5zLmMgJChJTkNMKSAkKE5CREVCVUdfSU5DTCkgJChOQkRFQlVHX1NSQykKCSQoQ0MpIC1jICQoQ0ZMQUdTKSBuZXRiZWFucy5jIC1vICQoT1VURElSKS9uZXRiZWFucy5vCgokKE9VVERJUikvaWZfbXpzY2gubzoJaWZfbXpzY2guYyAkKElOQ0wpIGlmX216c2NoLmggJChNWl9FWFRSQV9ERVApCgkkKENDKSAtYyAkKENGTEFHUykgaWZfbXpzY2guYyAtbyAkKE9VVERJUikvaWZfbXpzY2gubwoKbXpzY2hlbWVfYmFzZS5jOgoJJChNWlNDSEVNRSkvbXpjIC0tYy1tb2RzIG16c2NoZW1lX2Jhc2UuYyArK2xpYiBzY2hlbWUvYmFzZQoKcGF0aGRlZi5jOiAkKElOQ0wpCmlmbmVxIChzaC5leGUsICQoU0hFTEwpKQoJQGVjaG8gY3JlYXRpbmcgcGF0aGRlZi5jCglAZWNobyAnLyogcGF0aGRlZi5jICovJyA+IHBhdGhkZWYuYwoJQGVjaG8gJyNpbmNsdWRlICJ2aW0uaCInID4+IHBhdGhkZWYuYwoJQGVjaG8gJ2NoYXJfdSAqZGVmYXVsdF92aW1fZGlyID0gKGNoYXJfdSAqKSIkKFZJTVJDTE9DKSI7JyA+PiBwYXRoZGVmLmMKCUBlY2hvICdjaGFyX3UgKmRlZmF1bHRfdmltcnVudGltZV9kaXIgPSAoY2hhcl91ICopIiQoVklNUlVOVElNRURJUikiOycgPj4gcGF0aGRlZi5jCglAZWNobyAnY2hhcl91ICphbGxfY2ZsYWdzID0gKGNoYXJfdSAqKSIkKENDKSAkKENGTEFHUykiOycgPj4gcGF0aGRlZi5jCglAZWNobyAnY2hhcl91ICphbGxfbGZsYWdzID0gKGNoYXJfdSAqKSIkKENDKSAkKENGTEFHUykgJChMRkxBR1MpIC1vICQoVEFSR0VUKSAkKExJQikgLWxvbGUzMiAtbHV1aWQgJChNWlNDSEVNRV9MSUJESVIpICQoTVpTQ0hFTUVfTElCKSAkKFBZVEhPTkxJQikgJChSVUJZTElCKSI7JyA+PiBwYXRoZGVmLmMKCUBlY2hvICdjaGFyX3UgKmNvbXBpbGVkX3VzZXIgPSAoY2hhcl91ICopIiQoVVNFUk5BTUUpIjsnID4+IHBhdGhkZWYuYwoJQGVjaG8gJ2NoYXJfdSAqY29tcGlsZWRfc3lzID0gKGNoYXJfdSAqKSIkKFVTRVJET01BSU4pIjsnID4+IHBhdGhkZWYuYwplbHNlCglAZWNobyBjcmVhdGluZyBwYXRoZGVmLmMKCUBlY2hvIC8qIHBhdGhkZWYuYyAqLyA+IHBhdGhkZWYuYwoJQGVjaG8gI2luY2x1ZGUgInZpbS5oIiA+PiBwYXRoZGVmLmMKCUBlY2hvIGNoYXJfdSAqZGVmYXVsdF92aW1fZGlyID0gKGNoYXJfdSAqKSIkKFZJTVJDTE9DKSI7ID4+IHBhdGhkZWYuYwoJQGVjaG8gY2hhcl91ICpkZWZhdWx0X3ZpbXJ1bnRpbWVfZGlyID0gKGNoYXJfdSAqKSIkKFZJTVJVTlRJTUVESVIpIjsgPj4gcGF0aGRlZi5jCglAZWNobyBjaGFyX3UgKmFsbF9jZmxhZ3MgPSAoY2hhcl91ICopIiQoQ0MpICQoQ0ZMQUdTKSI7ID4+IHBhdGhkZWYuYwoJQGVjaG8gY2hhcl91ICphbGxfbGZsYWdzID0gKGNoYXJfdSAqKSIkKENDKSAkKENGTEFHUykgJChMRkxBR1MpIC1vICQoVEFSR0VUKSAkKExJQikgLWxvbGUzMiAtbHV1aWQgJChNWlNDSEVNRV9MSUJESVIpICQoTVpTQ0hFTUVfTElCKSAkKFBZVEhPTkxJQikgJChSVUJZTElCKSI7ID4+IHBhdGhkZWYuYwoJQGVjaG8gY2hhcl91ICpjb21waWxlZF91c2VyID0gKGNoYXJfdSAqKSIkKFVTRVJOQU1FKSI7ID4+IHBhdGhkZWYuYwoJQGVjaG8gY2hhcl91ICpjb21waWxlZF9zeXMgPSAoY2hhcl91ICopIiQoVVNFUkRPTUFJTikiOyA+PiBwYXRoZGVmLmMKZW5kaWYK