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