SGVsbG8gSG93YXJkLA0Kd2UgYXJlIG5vdCBhYmxlIHRvIHJlcHJvZHVjZSB0aGUgaXNzdWUgY29u c2lzdGVudGx5IHNvIHRlc3QgY29kZSBpcyBub3QgYXZhaWxhYmxlIGF0IHRoaXMgdGltZSwgYW5k IEkgZG8gYmVsaWV2ZSB0aGlzIGlzc3VlIHdpbGwgYmUgcHJlc2VudCBpbiB0aGUgbGF0ZXN0IGNv ZGUgYXMgd2VsbCBzaW5jZSBNeWsgYWxzbyByZXBvcnRlZCB0aGUgc2FtZS4uICBBdHRhY2hpbmcg YW5hbHlzaXMgZnJvbSBvdXIgc2lkZSwgaG9wZSBpdCBoZWxwcy4NCg0KVGhlIGNhbGwgc3RhY2sg d2hhdCB3ZSBoYXZlIHNlZW4gaXMsDQoNCiAgICAjMCAweDAwMTFiNjJlIGluIG1kYl9jdXJzb3Jf cHV0IChtYz0weGZmZTUyZDE4LCBrZXk9MHhmZmU1MmU3NCwgZGF0YT0weGZmZTUyZTZjLCBmbGFn cz0wKSBhdCBtZGIuYzo2Njg4DQogICAgIzEgMHgwMDExYzhlYyBpbiBtZGJfcHV0ICh0eG49MHhk YzEzZjAwOCwgZGJpPTIsIGtleT0weGZmZTUyZTc0LCBkYXRhPTB4ZmZlNTJlNmMsIGZsYWdzPTAp IGF0IG1kYi5jOjg3NzENCiAgICAjMiAweDAwYjc5MmI4IGluIExNREI6OkxNREJDb250ZXh0Ojpj cmVhdGVTZXNzaW9uICh0aGlzPTB4ODBjYTQxOCwgc2lkPTB4ODI5N2JlNCAic2lkZWJmMzcwOGYw ZmQ5ZmNiOGUwNjI1MjlkYTQ3YWRmNTE0MDJkZmM0NjAwMDAwMDAwKyIpIGF0IGxtZGJpbnQuY2M6 NDYwDQogICAgIzMgMHgwODA1MzU2NCBpbiB1cGRhdGVMTURCIChyZXF1ZXN0PS4uLiwgZm9yd2Fy ZD1AMHhmZmU1MzE1ZikgYXQgc2Vzc2lvbnNlcnZlci5jYzoxMDc1DQogICAgIzQgcHJvY2Vzc1Jl cXVlc3RXaXRob3V0UmVzcG9uc2UgKHJlcXVlc3Q9Li4uLCBmb3J3YXJkPUAweGZmZTUzMTVmKSBh dCBzZXNzaW9uc2VydmVyLmNjOjExNjANCiAgICAjNSAweDA4MDU2YTgwIGluIHByb2Nlc3NSZXF1 ZXN0ICh0aGlzPTB4ODBiMmFjMCwgZmQ9MzMpIGF0IHNlc3Npb25zZXJ2ZXIuY2M6MTE4OQ0KICAg ICM2IHJlYWRGcm9tU29jayAodGhpcz0weDgwYjJhYzAsIGZkPTMzKSBhdCBzZXNzaW9uc2VydmVy LmNjOjEzNDINCiAgICAjNyBTb2NrSGFuZGxlcjo6aW9SZWFkeSAodGhpcz0weDgwYjJhYzAsIGZk PTMzKSBhdCBzZXNzaW9uc2VydmVyLmNjOjE0NTUNCiAgICAjOCAweDAwYmEyNTkyIGluIHJ1bkNv cmVEaXNwYXRjaGVyIChkZWZhdWx0X3Q9PHZhbHVlIG9wdGltaXplZCBvdXQ+LCBmbGFncz0tMSkg YXQgZmRzLmNjOjg4OQ0KICAgICM5IDB4MDBiYTJmZjcgaW4gRFNFdm50RmRzOjpydW5EaXNwYXRj aGVyICgpIGF0IGZkcy5jYzo5NDUNCiAgICAjMTAgMHgwODA1NTljNiBpbiBtYWluICgpIGF0IHNl c3Npb25zZXJ2ZXIuY2M6MTczOQ0KDQpIZXJlIGl0IGlzIGhlbHBmdWwgdG8gZXhhbWluZSBmcmFt ZXMgIzAgYW5kICMxIGluIGRldGFpbCBpbiByZWxhdGlvbiB0byB0aGUgcmVsZXZhbnQgc291cmNl IGNvZGUgL2xpYnJhcmllcy9saWJsbWRiL21kYi5jLg0KDQpGcmFtZSAjMQ0KDQojMSAgMHgwMDEx YzhlYyBpbiBtZGJfcHV0ICh0eG49MHhkYzEzZjAwOCwgZGJpPTIsIGtleT0weGZmZTUyZTc0LCBk YXRhPTB4ZmZlNTJlNmMsIGZsYWdzPTApIGF0IG1kYi5jOjg3NzENCiAgICAgICAgbWMgPSB7bWNf bmV4dCA9IDB4MCwgbWNfYmFja3VwID0gMHgwLCBtY194Y3Vyc29yID0gMHgwLCBtY190eG4gPSAw eGRjMTNmMDA4LCBtY19kYmkgPSAyLCBtY19kYiA9IDB4ZGMxM2YwODgsIG1jX2RieCA9IDB4ZTEy MTUwMzgsIG1jX2RiZmxhZyA9IDB4ZGMxY2YwOWEgIlwwMzMiLCAnXDAzMicgPHJlcGVhdHMgNTEg dGltZXM+LCBtY19zbnVtID0gMCwgbWNfdG9wID0gMCwgbWNfZmxhZ3MgPSAwLCBtY19wZyA9IHsw eDAsIDB4ODBiMmFjMCwgMHhmZmU1MmQ2OCwgMHgyOGFmY2UsIDB4ZGMxM2YwMDgsIDB4ODBjZTli MCwgMHhmZmU1MmRjOCwgMHg0YzVmZjQsIDB4MmIsIDB4ODBiMmFjMCwgMHhmZmU1MmQ5OCwgMHg0 OTIwOWEsIDB4MmIsIDB4NGM1ZmY0LCAweDIxMjFjYiwgMHgyMTU3NmMsIDB4ODI5N2QzNCwgMHgz NDk3YWYsIDB4MjE1NzZjLCAweDIxMzE2YSwgMHg4Mjk3ZDM0LCAweDgwYWM3YjAsIDB4MWUsIDB4 NDZlZWQ2LCAweDJiLCAweDAsIDB4ODBjZTliMCwgMHg0YzVmZjQsIDB4ODBhYzdiMCwgMHg4Mjk3 ZDM0LCAweGZmZTUyZGY4LCAweDQ2ZmI5Nn0sIG1jX2tpID0gezAsIDIwODksIDUxMTIwLCAyMDU4 LCAzMCwgMCwgMTY3OTYsIDE3LCAxMTc2MCwgNjU1MDksIDMsIDAsIDMyMDQwLCAyMDg5LCAzMCwg MCwgMCwgMCwgMCwgMCwgMywgMCwgMjQ1NjQsIDc2LCA1MTEyMCwgMjA1OCwgMTA5NDQsIDIwNTks IDExODAwLCA2NTUwOSwgNjQ3NTgsIDcwfX0gPC0tLS0tLS0tDQoJDQogICAgICAgIG14ID0ge214 X2N1cnNvciA9IHttY19uZXh0ID0gMHgzOCwgbWNfYmFja3VwID0gMHgzLCBtY194Y3Vyc29yID0g MHgwLCBtY190eG4gPSAweDAsIG1jX2RiaSA9IDAsIG1jX2RiID0gMHgyOCwgbWNfZGJ4ID0gMHgw LCBtY19kYmZsYWcgPSAweDAsIG1jX3NudW0gPSAzLCBtY190b3AgPSAwLCBtY19mbGFncyA9IDE3 LCBtY19wZyA9IHsweDNhOTNkOCwgMHgxMCwgMHgwLCAweDE4LCAweDNhOTNhMCwgMHgwLCAweDNh OTNkMCwgMHgyODlhYmUsIDB4M2E5M2EwLCAweGZmZTUyZDNmLCAweGZmZTUyYzY4LCAweDI4YWZj ZSwgMHhmZmU1MmRiYywgMHhmZmU1MmRiNCwgMHgzLCAweDRjNWZmNCwgMHgxMSwgMHgzNmM5OWIs IDB4NmUsIDB4NzcsIDB4N2MsIDB4NWIsIDB4MzgsIDB4Mjg5YWJlLCAweDAsIDB4MCwgMHgwLCAw eDI4LCAweDAsIDB4MCwgMHgzLCAweDEwfSwgbWNfa2kgPSB7Mzc4NDgsIDU4LCA1MTYxMSwgNTQs IDExMCwgMCwgMTE5LCAwLCAxMjQsIDAsIDkxLCAwLCA1OCwgMCwgMzk2MTQsIDQwLCAwLCAwLCAw LCAwLCAwLCAwLCAxNjAsIDAsIDAsIDAsIDIsIDAsIDE4LCAwLCAxMzYsIDB9fSwgbXhfZGIgPSB7 bWRfcGFkID0gMzgzODkzNiwgbWRfZmxhZ3MgPSA1MTYxMSwgbWRfZGVwdGggPSA1NCwgbWRfYnJh bmNoX3BhZ2VzID0gMTEwLCBtZF9sZWFmX3BhZ2VzID0gMTE5LCBtZF9vdmVyZmxvd19wYWdlcyA9 IDEyNCwgbWRfZW50cmllcyA9IDkxLCBtZF9yb290ID0gNTZ9LCBteF9kYnggPSB7bWRfbmFtZSA9 IHttdl9zaXplID0gNiwgbXZfZGF0YSA9IDB4MH0sIG1kX2NtcCA9IDAsIG1kX2RjbXAgPSAwLCBt ZF9yZWwgPSAweDQwLCBtZF9yZWxjdHggPSAweDB9LCBteF9kYmZsYWcgPSAwICdcMDAwJ30NCiAg ICAgICAgcmMgPSAwIA0KDQpBbmQgc291cmNlIGNvZGUgZm9yIG1kYl9wdXQoKSBpcyBmcm9tIG1k Yi5jDQoNCmludA0KbWRiX3B1dChNREJfdHhuICp0eG4sIE1EQl9kYmkgZGJpLA0KICAgIE1EQl92 YWwgKmtleSwgTURCX3ZhbCAqZGF0YSwgdW5zaWduZWQgaW50IGZsYWdzKQ0Kew0KCU1EQl9jdXJz b3IgbWM7DQoJTURCX3hjdXJzb3IgbXg7DQoJaW50IHJjOw0KDQoJaWYgKCFrZXkgfHwgIWRhdGEg fHwgIVRYTl9EQklfRVhJU1QodHhuLCBkYmksIERCX1VTUlZBTElEKSkNCgkJcmV0dXJuIEVJTlZB TDsNCg0KCWlmIChmbGFncyAmIH4oTURCX05PT1ZFUldSSVRFfE1EQl9OT0RVUERBVEF8TURCX1JF U0VSVkV8TURCX0FQUEVORHxNREJfQVBQRU5ERFVQKSkNCgkJcmV0dXJuIEVJTlZBTDsNCg0KCWlm ICh0eG4tPm10X2ZsYWdzICYgKE1EQl9UWE5fUkRPTkxZfE1EQl9UWE5fQkxPQ0tFRCkpDQoJCXJl dHVybiAodHhuLT5tdF9mbGFncyAmIE1EQl9UWE5fUkRPTkxZKSA/IEVBQ0NFUyA6IE1EQl9CQURf VFhOOw0KDQoJbWRiX2N1cnNvcl9pbml0KCZtYywgdHhuLCBkYmksICZteCk7IDwtLS0tLS0tLSBz ZWUgc291cmNlIGNvZGUgYmVsb3cNCgltYy5tY19uZXh0ID0gdHhuLT5tdF9jdXJzb3JzW2RiaV07 DQoJdHhuLT5tdF9jdXJzb3JzW2RiaV0gPSAmbWM7DQoJcmMgPSBtZGJfY3Vyc29yX3B1dCgmbWMs IGtleSwgZGF0YSwgZmxhZ3MpOyA8LS0tLS0tLS0gc2VlIEZyYW1lICMwDQoJdHhuLT5tdF9jdXJz b3JzW2RiaV0gPSBtYy5tY19uZXh0Ow0KCXJldHVybiByYzsNCn0NCg0KDQpTb3VyY2UgQ29kZSBG b3IgbWRiX2N1cnNvcl9pbml0KCkgRnJvbSBtZGIuYw0KLyoqIEluaXRpYWxpemUgYSBjdXJzb3Ig Zm9yIGEgZ2l2ZW4gdHJhbnNhY3Rpb24gYW5kIGRhdGFiYXNlLiAqLw0Kc3RhdGljIHZvaWQNCm1k Yl9jdXJzb3JfaW5pdChNREJfY3Vyc29yICptYywgTURCX3R4biAqdHhuLCBNREJfZGJpIGRiaSwg TURCX3hjdXJzb3IgKm14KQ0Kew0KCW1jLT5tY19uZXh0ID0gTlVMTDsNCgltYy0+bWNfYmFja3Vw ID0gTlVMTDsNCgltYy0+bWNfZGJpID0gZGJpOw0KCW1jLT5tY190eG4gPSB0eG47DQoJbWMtPm1j X2RiID0gJnR4bi0+bXRfZGJzW2RiaV07DQoJbWMtPm1jX2RieCA9ICZ0eG4tPm10X2RieHNbZGJp XTsNCgltYy0+bWNfZGJmbGFnID0gJnR4bi0+bXRfZGJmbGFnc1tkYmldOw0KCW1jLT5tY19zbnVt ID0gMDsgPC0tLS0tLS0tIA0KCW1jLT5tY190b3AgPSAwOyA8LS0tLS0tLS0gIA0KCW1jLT5tY19w Z1swXSA9IDA7IDwtLS0tLS0tLSANCgltYy0+bWNfa2lbMF0gPSAwOw0KCW1jLT5tY19mbGFncyA9 IDA7DQoJaWYgKHR4bi0+bXRfZGJzW2RiaV0ubWRfZmxhZ3MgJiBNREJfRFVQU09SVCkgew0KCQlt ZGJfdGFzc2VydCh0eG4sIG14ICE9IE5VTEwpOw0KCQltYy0+bWNfeGN1cnNvciA9IG14Ow0KCQlt ZGJfeGN1cnNvcl9pbml0MChtYyk7DQoJfSBlbHNlIHsNCgkJbWMtPm1jX3hjdXJzb3IgPSBOVUxM Ow0KCX0NCglpZiAoKm1jLT5tY19kYmZsYWcgJiBEQl9TVEFMRSkgeyA8LS0tLS0tLS0gZmFsc2Ug Km1jLT5tY19kYmZsYWcgPSAyNywgREJfU1RBTEUgPSAweDAyCQkvKio8IE5hbWVkLURCIHJlY29y ZCBpcyBvbGRlciB0aGFuIHR4bklEICovDQoJCW1kYl9wYWdlX3NlYXJjaChtYywgTlVMTCwgTURC X1BTX1JPT1RPTkxZKTsgDQoJfQ0KfQ0KDQpGcm9tIHRoaXMgd2Uga25vdyB0aGF0IHdoZW4gbWRi X2N1cnNvcl9wdXQoKSBpcyBjYWxsZWQsIHRoZSBmb2xsb3dpbmcgdmFsdWVzIHJlbWFpbiBhc3Np Z25lZDoNCg0KICAgICAgICAgICAgICBtYy0+bWNfc251bSA9IDA7IDwtLS0tLS0tLQ0KCW1jLT5t Y190b3AgPSAwOyA8LS0tLS0tLS0gIA0KCW1jLT5tY19wZ1swXSA9IDA7IDwtLS0tLS0tLSANCg0K YW5kIGl0cyBub3RlZCB0aGVzZSB0d28gdmFsdWVzIHN0aWxsIGhhdmUgdGhlaXIgaW5pdGlhbCB2 YWx1ZXMgYXQgdGhlIHRpbWUgb2YgdGhlIHNlZ21lbnRhdGlvbiBmYXVsdC4NCg0KKGdkYikgZnIg MA0KIzAgMHgwMDExYjYyZSBpbiBtZGJfY3Vyc29yX3B1dCAobWM9MHhmZmU1MmQxOCwga2V5PTB4 ZmZlNTJlNzQsIGRhdGE9MHhmZmU1MmU2YywgZmxhZ3M9MCkgYXQgbWRiLmM6NjY4OA0KNjY4OCBp biBtZGIuYw0KKGdkYikgcCBtYy0+bWNfdG9wDQokMSA9IDANCihnZGIpIHAgbWMtPm1jX3BnW21j LT5tY190b3BdDQokMTkgPSAoTURCX3BhZ2UgKikgMHgwDQoNCkxldCB1cyBjb25zaWRlciBob3cg dGhlIHBhdGggdGFrZW4gdGhyb3VnaCBtZGJfY3Vyc29yX3B1dCgpIGNvdWxkIGFjY291bnQgZm9y IHRoZXNlIG51bGwgdmFyaWFibGUgdmFsdWVzIHdoaWNoIHJlc3VsdCBpbiBhIHNlZ21lbnRhdGlv biBmYXVsdC4NCg0KRnJhbWUgIzANCg0KIzAgIDB4MDAxMWI2MmUgaW4gbWRiX2N1cnNvcl9wdXQg KG1jPTB4ZmZlNTJkMTgsIGtleT0weGZmZTUyZTc0LCBkYXRhPTB4ZmZlNTJlNmMsIGZsYWdzPTAp IGF0IG1kYi5jOjY2ODggPC0tLS0tLS0tIGZsYWdzID0gMA0KICAgICAgICBlbnYgPSAweDgwY2U5 YjANCiAgICAgICAgbGVhZiA9IDx2YWx1ZSBvcHRpbWl6ZWQgb3V0Pg0KICAgICAgICBmcCA9IDx2 YWx1ZSBvcHRpbWl6ZWQgb3V0Pg0KICAgICAgICBtcCA9IDB4MzgNCiAgICAgICAgc3ViX3Jvb3Qg PSAweDAgDQogICAgICAgIGZwX2ZsYWdzID0gPHZhbHVlIG9wdGltaXplZCBvdXQ+DQogICAgICAg IHhkYXRhID0ge212X3NpemUgPSAzODM4ODgwLCBtdl9kYXRhID0gMHhkYzFjZjA5YX0NCiAgICAg ICAgcmRhdGEgPSAweGZmZTUyZTZjDQogICAgICAgIGRrZXkgPSB7bXZfc2l6ZSA9IDAsIG12X2Rh dGEgPSAweDNhOTNjY30NCiAgICAgICAgb2xkZGF0YSA9IHttdl9zaXplID0gMjIsIG12X2RhdGEg PSAweDM2YzgyMH0NCiAgICAgICAgZHVtbXkgPSB7bWRfcGFkID0gMjIsIG1kX2ZsYWdzID0gMTEx MjgsIG1kX2RlcHRoID0gNjU1MDksIG1kX2JyYW5jaF9wYWdlcyA9IDE2LCBtZF9sZWFmX3BhZ2Vz ID0gMTUwNzMyOSwgbWRfb3ZlcmZsb3dfcGFnZXMgPSAwLCBtZF9lbnRyaWVzID0gMzgzODkyOCwg bWRfcm9vdCA9IDM4MzM4NDR9DQogICAgICAgIGRvX3N1YiA9IDANCiAgICAgICAgaW5zZXJ0X2tl eSA9IC0zMDc5OCA8LS0tLS0tLS0gI2RlZmluZSBNREJfTk9URk9VTkQJKC0zMDc5OCkNCiAgICAg ICAgaW5zZXJ0X2RhdGEgPSAtMzA3OTggPC0tLS0tLS0tICNkZWZpbmUgTURCX05PVEZPVU5ECSgt MzA3OTgpDQogICAgICAgIG1jb3VudCA9IDANCiAgICAgICAgZGNvdW50ID0gMA0KICAgICAgICBu b3NwaWxsID0gMCA8LS0tLS0tLS0NCiAgICAgICAgbnNpemUgPSA8dmFsdWUgb3B0aW1pemVkIG91 dD4NCiAgICAgICAgcmMgPSAwIA0KICAgICAgICByYzIgPSA8dmFsdWUgb3B0aW1pemVkIG91dD4N CiAgICAgICAgbmZsYWdzID0gMCA8LS0tLS0tLS0NCiAgICAgICAgX19mdW5jX18gPSAibWRiX2N1 cnNvcl9wdXQiCQ0KDQpXZSBrbm93IHRoYXQgbWMtPm1jX3RvcCBhbmQgbWMtPm1jX3BnWzBdIHdl cmUgaW5pdGlhbGl6ZWQgdG8gMCBpbiBtZGJfY3Vyc29yX2luaXQoKS4gQXMgbXkgYW5ub3RhdGlv bnMgb2YgdGhlIHNvdXJjZSBjb2RlIGJlbG93IHN1Z2dlc3QsIGNhcmVmdWwgYW5hbHlzaXMgcmV2 ZWFscyB0aGF0IHRoZSBwYXRocyBhY3R1YWxseSB0YWtlbiB0aHJvdWdoIG1kYl9jdXJzb3JfcHV0 KCkgZG8gbm90IG1vZGlmeSB0aGVzZSBhc3NpZ25tZW50cy4NCg0KRXhjZXJwdGVkIFNvdXJjZSBD b2RlIEZvciBtZGJfY3Vyc29yX3B1dCgpIEZyb20gbWRiLmMNCg0KaW50DQptZGJfY3Vyc29yX3B1 dChNREJfY3Vyc29yICptYywgTURCX3ZhbCAqa2V5LCBNREJfdmFsICpkYXRhLA0KICAgIHVuc2ln bmVkIGludCBmbGFncykNCnsNCglNREJfZW52CQkqZW52Ow0KCU1EQl9ub2RlCSpsZWFmID0gTlVM TDsNCglNREJfcGFnZQkqZnAsICptcCwgKnN1Yl9yb290ID0gTlVMTDsNCgl1aW50MTZfdAlmcF9m bGFnczsNCglNREJfdmFsCQl4ZGF0YSwgKnJkYXRhLCBka2V5LCBvbGRkYXRhOw0KCU1EQl9kYiBk dW1teTsNCglpbnQgZG9fc3ViID0gMCwgaW5zZXJ0X2tleSwgaW5zZXJ0X2RhdGE7DQoJdW5zaWdu ZWQgaW50IG1jb3VudCA9IDAsIGRjb3VudCA9IDAsIG5vc3BpbGw7DQoJc2l6ZV90IG5zaXplOw0K CWludCByYywgcmMyOw0KCXVuc2lnbmVkIGludCBuZmxhZ3M7DQoJREtCVUY7DQoNCglpZiAobWMg PT0gTlVMTCB8fCBrZXkgPT0gTlVMTCkNCgkJcmV0dXJuIEVJTlZBTDsNCg0KCWVudiA9IG1jLT5t Y190eG4tPm10X2VudjsNCg0KCS8qIENoZWNrIHRoaXMgZmlyc3Qgc28gY291bnRlciB3aWxsIGFs d2F5cyBiZSB6ZXJvIG9uIGFueQ0KCSAqIGVhcmx5IGZhaWx1cmVzLg0KCSAqLw0KCWlmIChmbGFn cyAmIE1EQl9NVUxUSVBMRSkgew0KCQlkY291bnQgPSBkYXRhWzFdLm12X3NpemU7DQoJCWRhdGFb MV0ubXZfc2l6ZSA9IDA7DQoJCWlmICghRl9JU1NFVChtYy0+bWNfZGItPm1kX2ZsYWdzLCBNREJf RFVQRklYRUQpKQ0KCQkJcmV0dXJuIE1EQl9JTkNPTVBBVElCTEU7DQoJfQ0KDQoJbm9zcGlsbCA9 IGZsYWdzICYgTURCX05PU1BJTEw7DQoJZmxhZ3MgJj0gfk1EQl9OT1NQSUxMOw0KDQoJaWYgKG1j LT5tY190eG4tPm10X2ZsYWdzICYgKE1EQl9UWE5fUkRPTkxZfE1EQl9UWE5fQkxPQ0tFRCkpDQoJ CXJldHVybiAobWMtPm1jX3R4bi0+bXRfZmxhZ3MgJiBNREJfVFhOX1JET05MWSkgPyBFQUNDRVMg OiBNREJfQkFEX1RYTjsNCg0KCWlmIChrZXktPm12X3NpemUtMSA+PSBFTlZfTUFYS0VZKGVudikp DQoJCXJldHVybiBNREJfQkFEX1ZBTFNJWkU7DQoNCiNpZiBTSVpFX01BWCA+IE1BWERBVEFTSVpF DQoJaWYgKGRhdGEtPm12X3NpemUgPiAoKG1jLT5tY19kYi0+bWRfZmxhZ3MgJiBNREJfRFVQU09S VCkgPyBFTlZfTUFYS0VZKGVudikgOiBNQVhEQVRBU0laRSkpDQoJCXJldHVybiBNREJfQkFEX1ZB TFNJWkU7DQojZWxzZQ0KCWlmICgobWMtPm1jX2RiLT5tZF9mbGFncyAmIE1EQl9EVVBTT1JUKSAm JiBkYXRhLT5tdl9zaXplID4gRU5WX01BWEtFWShlbnYpKQ0KCQlyZXR1cm4gTURCX0JBRF9WQUxT SVpFOw0KI2VuZGlmDQoNCglEUFJJTlRGKCgiPT0+IHB1dCBkYiAlZCBrZXkgWyVzXSwgc2l6ZSAl IloidSwgZGF0YSBzaXplICUiWiJ1IiwNCgkJRERCSShtYyksIERLRVkoa2V5KSwga2V5ID8ga2V5 LT5tdl9zaXplIDogMCwgZGF0YS0+bXZfc2l6ZSkpOw0KDQoJZGtleS5tdl9zaXplID0gMDsNCg0K CWlmIChmbGFncyA9PSBNREJfQ1VSUkVOVCkgeyA8LS0tLS0tLS0gZmFsc2UgZmxhZ3MgPSAwDQoJ CWlmICghKG1jLT5tY19mbGFncyAmIENfSU5JVElBTElaRUQpKQ0KCQkJcmV0dXJuIEVJTlZBTDsN CgkJcmMgPSBNREJfU1VDQ0VTUzsNCgl9IGVsc2UgaWYgKG1jLT5tY19kYi0+bWRfcm9vdCA9PSBQ X0lOVkFMSUQpIHsgPC0tLS0tLS0tIGZhbHNlLCBtYy0+bWNfZGItPm1kX3Jvb3QgPSA2OA0KCQkv KiBuZXcgZGF0YWJhc2UsIGN1cnNvciBoYXMgbm90aGluZyB0byBwb2ludCB0byAqLw0KCQltYy0+ bWNfc251bSA9IDA7DQoJCW1jLT5tY190b3AgPSAwOw0KCQltYy0+bWNfZmxhZ3MgJj0gfkNfSU5J VElBTElaRUQ7DQoJCXJjID0gTURCX05PX1JPT1Q7ICANCgl9IGVsc2UgeyA8LS0tLS0tLS0gZXhl Y3V0ZWQNCgkJaW50IGV4YWN0ID0gMDsNCgkJTURCX3ZhbCBkMjsNCgkJaWYgKGZsYWdzICYgTURC X0FQUEVORCkgeyA8LS0tLS0tLS0gZmFsc2UgZmxhZ3MgPSAwDQoJCQlNREJfdmFsIGsyOw0KCQkJ cmMgPSBtZGJfY3Vyc29yX2xhc3QobWMsICZrMiwgJmQyKTsNCgkJCWlmIChyYyA9PSAwKSB7DQoJ CQkJcmMgPSBtYy0+bWNfZGJ4LT5tZF9jbXAoa2V5LCAmazIpOw0KCQkJCWlmIChyYyA+IDApIHsN CgkJCQkJcmMgPSBNREJfTk9URk9VTkQ7DQoJCQkJCW1jLT5tY19raVttYy0+bWNfdG9wXSsrOw0K CQkJCX0gZWxzZSB7DQoJCQkJCS8qIG5ldyBrZXkgaXMgPD0gbGFzdCBrZXkgKi8NCgkJCQkJcmMg PSBNREJfS0VZRVhJU1Q7DQoJCQkJfQ0KCQkJfQ0KCQl9IGVsc2UgezwtLS0tLS0tLSBleGVjdXRl ZA0KCQkJcmMgPSBtZGJfY3Vyc29yX3NldChtYywga2V5LCAmZDIsIE1EQl9TRVQsICZleGFjdCk7 IDwtLS0tLS0tLSByZXR1cm5zIC0zMDc5OCB3aGljaCBpcyBNREJfTk9URk9VTkQNCgkJfTwtLS0t LS0tLSBleGVjdXRlZA0KCQlpZiAoKGZsYWdzICYgTURCX05PT1ZFUldSSVRFKSAmJiByYyA9PSAw KSB7IDwtLS0tLS0tLSBmYWxzZSBmbGFncyA9IDANCgkJCURQUklOVEYoKCJkdXBsaWNhdGUga2V5 IFslc10iLCBES0VZKGtleSkpKTsNCgkJCSpkYXRhID0gZDI7DQoJCQlyZXR1cm4gTURCX0tFWUVY SVNUOw0KCQl9DQoJCWlmIChyYyAmJiByYyAhPSBNREJfTk9URk9VTkQpIDwtLS0tLS0tLSBmYWxz ZSByYyA9IE1EQl9OT1RGT1VORA0KCQkJcmV0dXJuIHJjOw0KCX08LS0tLS0tLS0gZXhlY3V0ZWQN Cg0KCWlmIChtYy0+bWNfZmxhZ3MgJiBDX0RFTCkNCgkJbWMtPm1jX2ZsYWdzIF49IENfREVMOw0K DQoJLyogQ3Vyc29yIGlzIHBvc2l0aW9uZWQsIGNoZWNrIGZvciByb29tIGluIHRoZSBkaXJ0eSBs aXN0ICovDQoJaWYgKCFub3NwaWxsKSB7IDwtLS0tLS0tLSB0cnVlDQoJCWlmIChmbGFncyAmIE1E Ql9NVUxUSVBMRSkgew0KCQkJcmRhdGEgPSAmeGRhdGE7DQoJCQl4ZGF0YS5tdl9zaXplID0gZGF0 YS0+bXZfc2l6ZSAqIGRjb3VudDsNCgkJfSBlbHNlIHsNCgkJCXJkYXRhID0gZGF0YTsgPC0tLS0t LS0tIGV4ZWN1dGVkDQoJCX0NCgkJaWYgKChyYzIgPSBtZGJfcGFnZV9zcGlsbChtYywga2V5LCBy ZGF0YSkpKSA8LS0tLS0tLS0gcmV0dXJuZWQgMCBvciB3b3VsZCBoYXZlIHJldHVybmVkDQoJCQly ZXR1cm4gcmMyOw0KCX08LS0tLS0tLS0gZXhlY3V0ZWQNCg0KCWlmIChyYyA9PSBNREJfTk9fUk9P VCkgeyA8LS0tLS0tLS0gZmFsc2UgDQoJCU1EQl9wYWdlICpucDsNCgkJLyogbmV3IGRhdGFiYXNl LCB3cml0ZSBhIHJvb3QgbGVhZiBwYWdlICovDQoJCURQVVRTKCJhbGxvY2F0aW5nIG5ldyByb290 IGxlYWYgcGFnZSIpOw0KCQlpZiAoKHJjMiA9IG1kYl9wYWdlX25ldyhtYywgUF9MRUFGLCAxLCAm bnApKSkgew0KCQkJcmV0dXJuIHJjMjsNCgkJfQ0KCQltZGJfY3Vyc29yX3B1c2gobWMsIG5wKTsN CgkJbWMtPm1jX2RiLT5tZF9yb290ID0gbnAtPm1wX3Bnbm87DQoJCW1jLT5tY19kYi0+bWRfZGVw dGgrKzsNCgkJKm1jLT5tY19kYmZsYWcgfD0gREJfRElSVFk7DQoJCWlmICgobWMtPm1jX2RiLT5t ZF9mbGFncyAmIChNREJfRFVQU09SVHxNREJfRFVQRklYRUQpKQ0KCQkJPT0gTURCX0RVUEZJWEVE KQ0KCQkJbnAtPm1wX2ZsYWdzIHw9IFBfTEVBRjI7DQoJCW1jLT5tY19mbGFncyB8PSBDX0lOSVRJ QUxJWkVEOw0KCX0gZWxzZSB7DQoJCS8qIG1ha2Ugc3VyZSBhbGwgY3Vyc29yIHBhZ2VzIGFyZSB3 cml0YWJsZSAqLw0KCQlyYzIgPSBtZGJfY3Vyc29yX3RvdWNoKG1jKTsgPC0tLS0tLS0tIGlzIHRo aXMgY2FsbGVkIGFuZCByZXR1cm5zIDAgYmVjYXVzZSBpdCBkb2VzIG5vdCByZXR1cm4NCgkJaWYg KHJjMikNCgkJCXJldHVybiByYzI7DQoJfSA8LS0tLS0tLS0gZXhlY3V0ZWQNCg0KCWluc2VydF9r ZXkgPSBpbnNlcnRfZGF0YSA9IHJjOyA8LS0tLS0tLS0gcmMgPSAtMzA3OTggb3IgTURCX05PVEZP VU5EIQ0KCWlmIChpbnNlcnRfa2V5KSB7IDwtLS0tLS0tLSB0cnVlDQoJCS8qIFRoZSBrZXkgZG9l cyBub3QgZXhpc3QgKi8NCgkJRFBSSU5URigoImluc2VydGluZyBrZXkgYXQgaW5kZXggJWkiLCBt Yy0+bWNfa2lbbWMtPm1jX3RvcF0pKTsNCgkJaWYgKChtYy0+bWNfZGItPm1kX2ZsYWdzICYgTURC X0RVUFNPUlQpICYmDQoJCQlMRUFGU0laRShrZXksIGRhdGEpID4gZW52LT5tZV9ub2RlbWF4KSA8 LS0tLS0tLS0gZmFsc2Ugc2luY2UgbWMtPm1jX2RiLT5tZF9mbGFncyA9IDANCgkJew0KCQkJLyog VG9vIGJpZyBmb3IgYSBub2RlLCBpbnNlcnQgaW4gc3ViLURCLiAgU2V0IHVwIGFuIGVtcHR5DQoJ CQkgKiAib2xkIHN1Yi1wYWdlIiBmb3IgcHJlcF9zdWJEQiB0byBleHBhbmQgdG8gYSBmdWxsIHBh Z2UuDQoJCQkgKi8NCgkJCWZwX2ZsYWdzID0gUF9MRUFGfFBfRElSVFk7DQoJCQlmcCA9IGVudi0+ bWVfcGJ1ZjsNCgkJCWZwLT5tcF9wYWQgPSBkYXRhLT5tdl9zaXplOyAvKiB1c2VkIGlmIE1EQl9E VVBGSVhFRCAqLw0KCQkJZnAtPm1wX2xvd2VyID0gZnAtPm1wX3VwcGVyID0gKFBBR0VIRFJTWi1Q QUdFQkFTRSk7DQoJCQlvbGRkYXRhLm12X3NpemUgPSBQQUdFSERSU1o7DQoJCQlnb3RvIHByZXBf c3ViREI7DQoJCX0gPC0tLS0tLS0tIHRoaXMgd2FzIG5vdCBleGVjdXRlZCwgYW5kIHRoZSB2ZXJ5 IGxvbmcgZXh0ZXJuYWwgZWxzZSBjb250aW5nZW5jeSBiZWxvdyBzaG91bGQgYmUgc2tpcHBlZCEN Cgl9IGVsc2Ugew0KCQkvKiB0aGVyZSdzIG9ubHkgYSBrZXkgYW55d2F5LCBzbyB0aGlzIGlzIGEg bm8tb3AgKi8NCgkJaWYgKElTX0xFQUYyKG1jLT5tY19wZ1ttYy0+bWNfdG9wXSkpIHsNCgkJCWNo YXIgKnB0cjsNCgkJCXVuc2lnbmVkIGludCBrc2l6ZSA9IG1jLT5tY19kYi0+bWRfcGFkOw0KCQkJ aWYgKGtleS0+bXZfc2l6ZSAhPSBrc2l6ZSkNCgkJCQlyZXR1cm4gTURCX0JBRF9WQUxTSVpFOw0K CQkJcHRyID0gTEVBRjJLRVkobWMtPm1jX3BnW21jLT5tY190b3BdLCBtYy0+bWNfa2lbbWMtPm1j X3RvcF0sIGtzaXplKTsNCgkJCW1lbWNweShwdHIsIGtleS0+bXZfZGF0YSwga3NpemUpOw0KZml4 X3BhcmVudDoNCgkJCS8qIGlmIG92ZXJ3cml0aW5nIHNsb3QgMCBvZiBsZWFmLCBuZWVkIHRvDQoJ CQkgKiB1cGRhdGUgYnJhbmNoIGtleSBpZiB0aGVyZSBpcyBhIHBhcmVudCBwYWdlDQoJCQkgKi8N CgkJCWlmIChtYy0+bWNfdG9wICYmICFtYy0+bWNfa2lbbWMtPm1jX3RvcF0pIHsNCgkJCQl1bnNp Z25lZCBzaG9ydCBkdG9wID0gMTsNCgkJCQltYy0+bWNfdG9wLS07DQoJCQkJLyogc2xvdCAwIGlz IGFsd2F5cyBhbiBlbXB0eSBrZXksIGZpbmQgcmVhbCBzbG90ICovDQoJCQkJd2hpbGUgKG1jLT5t Y190b3AgJiYgIW1jLT5tY19raVttYy0+bWNfdG9wXSkgew0KCQkJCQltYy0+bWNfdG9wLS07DQoJ CQkJCWR0b3ArKzsNCgkJCQl9DQoJCQkJaWYgKG1jLT5tY19raVttYy0+bWNfdG9wXSkNCgkJCQkJ cmMyID0gbWRiX3VwZGF0ZV9rZXkobWMsIGtleSk7DQoJCQkJZWxzZQ0KCQkJCQlyYzIgPSBNREJf U1VDQ0VTUzsNCgkJCQltYy0+bWNfdG9wICs9IGR0b3A7DQoJCQkJaWYgKHJjMikNCgkJCQkJcmV0 dXJuIHJjMjsNCgkJCX0NCgkJCXJldHVybiBNREJfU1VDQ0VTUzsNCgkJfQ0KDQptb3JlOg0KCQls ZWFmID0gTk9ERVBUUihtYy0+bWNfcGdbbWMtPm1jX3RvcF0sIG1jLT5tY19raVttYy0+bWNfdG9w XSk7DQoJCW9sZGRhdGEubXZfc2l6ZSA9IE5PREVEU1oobGVhZik7DQoJCW9sZGRhdGEubXZfZGF0 YSA9IE5PREVEQVRBKGxlYWYpOw0KDQoJCS8qIERCIGhhcyBkdXBzPyAqLw0KCQlpZiAoRl9JU1NF VChtYy0+bWNfZGItPm1kX2ZsYWdzLCBNREJfRFVQU09SVCkpIHsgDQoJCQkvKiBQcmVwYXJlIChz dWItKXBhZ2Uvc3ViLURCIHRvIGFjY2VwdCB0aGUgbmV3IGl0ZW0sDQoJCQkgKiBpZiBuZWVkZWQu ICBmcDogb2xkIHN1Yi1wYWdlIG9yIGEgaGVhZGVyIGZha2luZw0KCQkJICogaXQuICBtcDogbmV3 IChzdWItKXBhZ2UuICBvZmZzZXQ6IGdyb3d0aCBpbiBwYWdlDQoJCQkgKiBzaXplLiAgeGRhdGE6 IG5vZGUgZGF0YSB3aXRoIG5ldyBwYWdlIG9yIERCLg0KCQkJICovDQoJCQl1bnNpZ25lZAlpLCBv ZmZzZXQgPSAwOw0KCQkJbXAgPSBmcCA9IHhkYXRhLm12X2RhdGEgPSBlbnYtPm1lX3BidWY7DQoJ CQltcC0+bXBfcGdubyA9IG1jLT5tY19wZ1ttYy0+bWNfdG9wXS0+bXBfcGdubzsNCg0KCQkJLyog V2FzIGEgc2luZ2xlIGl0ZW0gYmVmb3JlLCBtdXN0IGNvbnZlcnQgbm93ICovDQoJCQlpZiAoIUZf SVNTRVQobGVhZi0+bW5fZmxhZ3MsIEZfRFVQREFUQSkpIHsNCgkJCQlNREJfY21wX2Z1bmMgKmRj bXA7DQoJCQkJLyogSnVzdCBvdmVyd3JpdGUgdGhlIGN1cnJlbnQgaXRlbSAqLw0KCQkJCWlmIChm bGFncyA9PSBNREJfQ1VSUkVOVCkNCgkJCQkJZ290byBjdXJyZW50Ow0KCQkJCWRjbXAgPSBtYy0+ bWNfZGJ4LT5tZF9kY21wOw0KI2lmIFVJTlRfTUFYIDwgU0laRV9NQVgNCgkJCQlpZiAoZGNtcCA9 PSBtZGJfY21wX2ludCAmJiBvbGRkYXRhLm12X3NpemUgPT0gc2l6ZW9mKHNpemVfdCkpDQoJCQkJ CWRjbXAgPSBtZGJfY21wX2Nsb25nOw0KI2VuZGlmDQoJCQkJLyogZG9lcyBkYXRhIG1hdGNoPyAq Lw0KCQkJCWlmICghZGNtcChkYXRhLCAmb2xkZGF0YSkpIHsNCgkJCQkJaWYgKGZsYWdzICYgKE1E Ql9OT0RVUERBVEF8TURCX0FQUEVORERVUCkpDQoJCQkJCQlyZXR1cm4gTURCX0tFWUVYSVNUOw0K CQkJCQkvKiBvdmVyd3JpdGUgaXQgKi8NCgkJCQkJZ290byBjdXJyZW50Ow0KCQkJCX0NCg0KCQkJ CS8qIEJhY2sgdXAgb3JpZ2luYWwgZGF0YSBpdGVtICovDQoJCQkJZGtleS5tdl9zaXplID0gb2xk ZGF0YS5tdl9zaXplOw0KCQkJCWRrZXkubXZfZGF0YSA9IG1lbWNweShmcCsxLCBvbGRkYXRhLm12 X2RhdGEsIG9sZGRhdGEubXZfc2l6ZSk7DQoNCgkJCQkvKiBNYWtlIHN1Yi1wYWdlIGhlYWRlciBm b3IgdGhlIGR1cCBpdGVtcywgd2l0aCBkdW1teSBib2R5ICovDQoJCQkJZnAtPm1wX2ZsYWdzID0g UF9MRUFGfFBfRElSVFl8UF9TVUJQOw0KCQkJCWZwLT5tcF9sb3dlciA9IChQQUdFSERSU1otUEFH RUJBU0UpOw0KCQkJCXhkYXRhLm12X3NpemUgPSBQQUdFSERSU1ogKyBka2V5Lm12X3NpemUgKyBk YXRhLT5tdl9zaXplOw0KCQkJCWlmIChtYy0+bWNfZGItPm1kX2ZsYWdzICYgTURCX0RVUEZJWEVE KSB7DQoJCQkJCWZwLT5tcF9mbGFncyB8PSBQX0xFQUYyOw0KCQkJCQlmcC0+bXBfcGFkID0gZGF0 YS0+bXZfc2l6ZTsNCgkJCQkJeGRhdGEubXZfc2l6ZSArPSAyICogZGF0YS0+bXZfc2l6ZTsJLyog bGVhdmUgc3BhY2UgZm9yIDIgbW9yZSAqLw0KCQkJCX0gZWxzZSB7DQoJCQkJCXhkYXRhLm12X3Np emUgKz0gMiAqIChzaXplb2YoaW5keF90KSArIE5PREVTSVpFKSArDQoJCQkJCQkoZGtleS5tdl9z aXplICYgMSkgKyAoZGF0YS0+bXZfc2l6ZSAmIDEpOw0KCQkJCX0NCgkJCQlmcC0+bXBfdXBwZXIg PSB4ZGF0YS5tdl9zaXplIC0gUEFHRUJBU0U7DQoJCQkJb2xkZGF0YS5tdl9zaXplID0geGRhdGEu bXZfc2l6ZTsgLyogcHJldGVuZCBvbGRkYXRhIGlzIGZwICovDQoJCQl9IGVsc2UgaWYgKGxlYWYt Pm1uX2ZsYWdzICYgRl9TVUJEQVRBKSB7DQoJCQkJLyogRGF0YSBpcyBvbiBzdWItREIsIGp1c3Qg c3RvcmUgaXQgKi8NCgkJCQlmbGFncyB8PSBGX0RVUERBVEF8Rl9TVUJEQVRBOw0KCQkJCWdvdG8g cHV0X3N1YjsNCgkJCX0gZWxzZSB7DQoJCQkJLyogRGF0YSBpcyBvbiBzdWItcGFnZSAqLw0KCQkJ CWZwID0gb2xkZGF0YS5tdl9kYXRhOw0KCQkJCXN3aXRjaCAoZmxhZ3MpIHsNCgkJCQlkZWZhdWx0 Og0KCQkJCQlpZiAoIShtYy0+bWNfZGItPm1kX2ZsYWdzICYgTURCX0RVUEZJWEVEKSkgew0KCQkJ CQkJb2Zmc2V0ID0gRVZFTihOT0RFU0laRSArIHNpemVvZihpbmR4X3QpICsNCgkJCQkJCQlkYXRh LT5tdl9zaXplKTsNCgkJCQkJCWJyZWFrOw0KCQkJCQl9DQoJCQkJCW9mZnNldCA9IGZwLT5tcF9w YWQ7DQoJCQkJCWlmIChTSVpFTEVGVChmcCkgPCBvZmZzZXQpIHsNCgkJCQkJCW9mZnNldCAqPSA0 OyAvKiBzcGFjZSBmb3IgNCBtb3JlICovDQoJCQkJCQlicmVhazsNCgkJCQkJfQ0KCQkJCQkvKiBG QUxMVEhSVTogQmlnIGVub3VnaCBNREJfRFVQRklYRUQgc3ViLXBhZ2UgKi8NCgkJCQljYXNlIE1E Ql9DVVJSRU5UOg0KCQkJCQlmcC0+bXBfZmxhZ3MgfD0gUF9ESVJUWTsNCgkJCQkJQ09QWV9QR05P KGZwLT5tcF9wZ25vLCBtcC0+bXBfcGdubyk7DQoJCQkJCW1jLT5tY194Y3Vyc29yLT5teF9jdXJz b3IubWNfcGdbMF0gPSBmcDsNCgkJCQkJZmxhZ3MgfD0gRl9EVVBEQVRBOw0KCQkJCQlnb3RvIHB1 dF9zdWI7DQoJCQkJfQ0KCQkJCXhkYXRhLm12X3NpemUgPSBvbGRkYXRhLm12X3NpemUgKyBvZmZz ZXQ7DQoJCQl9DQoNCgkJCWZwX2ZsYWdzID0gZnAtPm1wX2ZsYWdzOw0KCQkJaWYgKE5PREVTSVpF ICsgTk9ERUtTWihsZWFmKSArIHhkYXRhLm12X3NpemUgPiBlbnYtPm1lX25vZGVtYXgpIHsNCgkJ CQkJLyogVG9vIGJpZyBmb3IgYSBzdWItcGFnZSwgY29udmVydCB0byBzdWItREIgKi8NCgkJCQkJ ZnBfZmxhZ3MgJj0gflBfU1VCUDsNCnByZXBfc3ViREI6DQoJCQkJCWlmIChtYy0+bWNfZGItPm1k X2ZsYWdzICYgTURCX0RVUEZJWEVEKSB7DQoJCQkJCQlmcF9mbGFncyB8PSBQX0xFQUYyOw0KCQkJ CQkJZHVtbXkubWRfcGFkID0gZnAtPm1wX3BhZDsNCgkJCQkJCWR1bW15Lm1kX2ZsYWdzID0gTURC X0RVUEZJWEVEOw0KCQkJCQkJaWYgKG1jLT5tY19kYi0+bWRfZmxhZ3MgJiBNREJfSU5URUdFUkRV UCkNCgkJCQkJCQlkdW1teS5tZF9mbGFncyB8PSBNREJfSU5URUdFUktFWTsNCgkJCQkJfSBlbHNl IHsNCgkJCQkJCWR1bW15Lm1kX3BhZCA9IDA7DQoJCQkJCQlkdW1teS5tZF9mbGFncyA9IDA7DQoJ CQkJCX0NCgkJCQkJZHVtbXkubWRfZGVwdGggPSAxOw0KCQkJCQlkdW1teS5tZF9icmFuY2hfcGFn ZXMgPSAwOw0KCQkJCQlkdW1teS5tZF9sZWFmX3BhZ2VzID0gMTsNCgkJCQkJZHVtbXkubWRfb3Zl cmZsb3dfcGFnZXMgPSAwOw0KCQkJCQlkdW1teS5tZF9lbnRyaWVzID0gTlVNS0VZUyhmcCk7DQoJ CQkJCXhkYXRhLm12X3NpemUgPSBzaXplb2YoTURCX2RiKTsNCgkJCQkJeGRhdGEubXZfZGF0YSA9 ICZkdW1teTsNCgkJCQkJaWYgKChyYyA9IG1kYl9wYWdlX2FsbG9jKG1jLCAxLCAmbXApKSkNCgkJ CQkJCXJldHVybiByYzsNCgkJCQkJb2Zmc2V0ID0gZW52LT5tZV9wc2l6ZSAtIG9sZGRhdGEubXZf c2l6ZTsNCgkJCQkJZmxhZ3MgfD0gRl9EVVBEQVRBfEZfU1VCREFUQTsNCgkJCQkJZHVtbXkubWRf cm9vdCA9IG1wLT5tcF9wZ25vOw0KCQkJCQlzdWJfcm9vdCA9IG1wOw0KCQkJfQ0KCQkJaWYgKG1w ICE9IGZwKSB7DQoJCQkJbXAtPm1wX2ZsYWdzID0gZnBfZmxhZ3MgfCBQX0RJUlRZOw0KCQkJCW1w LT5tcF9wYWQgICA9IGZwLT5tcF9wYWQ7DQoJCQkJbXAtPm1wX2xvd2VyID0gZnAtPm1wX2xvd2Vy Ow0KCQkJCW1wLT5tcF91cHBlciA9IGZwLT5tcF91cHBlciArIG9mZnNldDsNCgkJCQlpZiAoZnBf ZmxhZ3MgJiBQX0xFQUYyKSB7DQoJCQkJCW1lbWNweShNRVRBREFUQShtcCksIE1FVEFEQVRBKGZw KSwgTlVNS0VZUyhmcCkgKiBmcC0+bXBfcGFkKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQltZW1jcHko KGNoYXIgKiltcCArIG1wLT5tcF91cHBlciArIFBBR0VCQVNFLCAoY2hhciAqKWZwICsgZnAtPm1w X3VwcGVyICsgUEFHRUJBU0UsDQoJCQkJCQlvbGRkYXRhLm12X3NpemUgLSBmcC0+bXBfdXBwZXIg LSBQQUdFQkFTRSk7DQoJCQkJCWZvciAoaT0wOyBpPE5VTUtFWVMoZnApOyBpKyspDQoJCQkJCQlt cC0+bXBfcHRyc1tpXSA9IGZwLT5tcF9wdHJzW2ldICsgb2Zmc2V0Ow0KCQkJCX0NCgkJCX0NCg0K CQkJcmRhdGEgPSAmeGRhdGE7DQoJCQlmbGFncyB8PSBGX0RVUERBVEE7DQoJCQlkb19zdWIgPSAx Ow0KCQkJaWYgKCFpbnNlcnRfa2V5KQ0KCQkJCW1kYl9ub2RlX2RlbChtYywgMCk7DQoJCQlnb3Rv IG5ld19zdWI7DQoJCX0NCmN1cnJlbnQ6DQoJCS8qIExNREIgcGFzc2VzIEZfU1VCREFUQSBpbiAn ZmxhZ3MnIHRvIHdyaXRlIGEgREIgcmVjb3JkICovDQoJCWlmICgobGVhZi0+bW5fZmxhZ3MgXiBm bGFncykgJiBGX1NVQkRBVEEpDQoJCQlyZXR1cm4gTURCX0lOQ09NUEFUSUJMRTsNCgkJLyogb3Zl cmZsb3cgcGFnZSBvdmVyd3JpdGVzIG5lZWQgc3BlY2lhbCBoYW5kbGluZyAqLw0KCQlpZiAoRl9J U1NFVChsZWFmLT5tbl9mbGFncywgRl9CSUdEQVRBKSkgeyA8LS0tLS0tLS0gaXMgdGhpcyB0YWtl bj8NCgkJCU1EQl9wYWdlICpvbXA7DQoJCQlwZ25vX3QgcGc7DQoJCQlpbnQgbGV2ZWwsIG92cGFn ZXMsIGRwYWdlcyA9IE9WUEFHRVMoZGF0YS0+bXZfc2l6ZSwgZW52LT5tZV9wc2l6ZSk7DQoNCgkJ CW1lbWNweSgmcGcsIG9sZGRhdGEubXZfZGF0YSwgc2l6ZW9mKHBnKSk7DQoJCQlpZiAoKHJjMiA9 IG1kYl9wYWdlX2dldChtYy0+bWNfdHhuLCBwZywgJm9tcCwgJmxldmVsKSkgIT0gMCkNCgkJCQly ZXR1cm4gcmMyOw0KCQkJb3ZwYWdlcyA9IG9tcC0+bXBfcGFnZXM7DQoNCgkJCS8qIElzIHRoZSBv diBwYWdlIGxhcmdlIGVub3VnaD8gKi8NCgkJCWlmIChvdnBhZ2VzID49IGRwYWdlcykgew0KCQkJ ICBpZiAoIShvbXAtPm1wX2ZsYWdzICYgUF9ESVJUWSkgJiYNCgkJCQkgIChsZXZlbCB8fCAoZW52 LT5tZV9mbGFncyAmIE1EQl9XUklURU1BUCkpKQ0KCQkJICB7DQoJCQkJcmMgPSBtZGJfcGFnZV91 bnNwaWxsKG1jLT5tY190eG4sIG9tcCwgJm9tcCk7IDwtLS0tLS0tLSBpcyB0aGlzIHRha2VuPw0K CQkJCWlmIChyYykNCgkJCQkJcmV0dXJuIHJjOw0KCQkJCWxldmVsID0gMDsJCS8qIGRpcnR5IGlu IHRoaXMgdHhuIG9yIGNsZWFuICovDQoJCQkgIH0NCgkJCSAgLyogSXMgaXQgZGlydHk/ICovDQoJ CQkgIGlmIChvbXAtPm1wX2ZsYWdzICYgUF9ESVJUWSkgew0KCQkJCS8qIHllcywgb3ZlcndyaXRl IGl0LiBOb3RlIGluIHRoaXMgY2FzZSB3ZSBkb24ndA0KCQkJCSAqIGJvdGhlciB0byB0cnkgc2hy aW5raW5nIHRoZSBwYWdlIGlmIHRoZSBuZXcgZGF0YQ0KCQkJCSAqIGlzIHNtYWxsZXIgdGhhbiB0 aGUgb3ZlcmZsb3cgdGhyZXNob2xkLg0KCQkJCSAqLw0KCQkJCWlmIChsZXZlbCA+IDEpIHsNCgkJ CQkJLyogSXQgaXMgd3JpdGFibGUgb25seSBpbiBhIHBhcmVudCB0eG4gKi8NCgkJCQkJc2l6ZV90 IHN6ID0gKHNpemVfdCkgZW52LT5tZV9wc2l6ZSAqIG92cGFnZXMsIG9mZjsNCgkJCQkJTURCX3Bh Z2UgKm5wID0gbWRiX3BhZ2VfbWFsbG9jKG1jLT5tY190eG4sIG92cGFnZXMpOw0KCQkJCQlNREJf SUQyIGlkMjsNCgkJCQkJaWYgKCFucCkNCgkJCQkJCXJldHVybiBFTk9NRU07DQoJCQkJCWlkMi5t aWQgPSBwZzsNCgkJCQkJaWQyLm1wdHIgPSBucDsNCgkJCQkJLyogTm90ZSAtIHRoaXMgcGFnZSBp cyBhbHJlYWR5IGNvdW50ZWQgaW4gcGFyZW50J3MgZGlydHlfcm9vbSAqLw0KCQkJCQlyYzIgPSBt ZGJfbWlkMmxfaW5zZXJ0KG1jLT5tY190eG4tPm10X3UuZGlydHlfbGlzdCwgJmlkMik7DQoJCQkJ CW1kYl9jYXNzZXJ0KG1jLCByYzIgPT0gMCk7DQoJCQkJCWlmICghKGZsYWdzICYgTURCX1JFU0VS VkUpKSB7DQoJCQkJCQkvKiBDb3B5IGVuZCBvZiBwYWdlLCBhZGp1c3RpbmcgYWxpZ25tZW50IHNv DQoJCQkJCQkgKiBjb21waWxlciBtYXkgY29weSB3b3JkcyBpbnN0ZWFkIG9mIGJ5dGVzLg0KCQkJ CQkJICovDQoJCQkJCQlvZmYgPSAoUEFHRUhEUlNaICsgZGF0YS0+bXZfc2l6ZSkgJiAtc2l6ZW9m KHNpemVfdCk7DQoJCQkJCQltZW1jcHkoKHNpemVfdCAqKSgoY2hhciAqKW5wICsgb2ZmKSwNCgkJ CQkJCQkoc2l6ZV90ICopKChjaGFyICopb21wICsgb2ZmKSwgc3ogLSBvZmYpOw0KCQkJCQkJc3og PSBQQUdFSERSU1o7DQoJCQkJCX0NCgkJCQkJbWVtY3B5KG5wLCBvbXAsIHN6KTsgLyogQ29weSBi ZWdpbm5pbmcgb2YgcGFnZSAqLw0KCQkJCQlvbXAgPSBucDsNCgkJCQl9DQoJCQkJU0VURFNaKGxl YWYsIGRhdGEtPm12X3NpemUpOw0KCQkJCWlmIChGX0lTU0VUKGZsYWdzLCBNREJfUkVTRVJWRSkp DQoJCQkJCWRhdGEtPm12X2RhdGEgPSBNRVRBREFUQShvbXApOw0KCQkJCWVsc2UNCgkJCQkJbWVt Y3B5KE1FVEFEQVRBKG9tcCksIGRhdGEtPm12X2RhdGEsIGRhdGEtPm12X3NpemUpOw0KCQkJCXJl dHVybiBNREJfU1VDQ0VTUzsNCgkJCSAgfQ0KCQkJfQ0KCQkJaWYgKChyYzIgPSBtZGJfb3ZwYWdl X2ZyZWUobWMsIG9tcCkpICE9IE1EQl9TVUNDRVNTKQ0KCQkJCXJldHVybiByYzI7DQoJCX0gZWxz ZSBpZiAoZGF0YS0+bXZfc2l6ZSA9PSBvbGRkYXRhLm12X3NpemUpIHsNCgkJCS8qIHNhbWUgc2l6 ZSwganVzdCByZXBsYWNlIGl0LiBOb3RlIHRoYXQgd2UgY291bGQNCgkJCSAqIGFsc28gcmV1c2Ug dGhpcyBub2RlIGlmIHRoZSBuZXcgZGF0YSBpcyBzbWFsbGVyLA0KCQkJICogYnV0IGluc3RlYWQg d2Ugb3B0IHRvIHNocmluayB0aGUgbm9kZSBpbiB0aGF0IGNhc2UuDQoJCQkgKi8NCgkJCWlmIChG X0lTU0VUKGZsYWdzLCBNREJfUkVTRVJWRSkpDQoJCQkJZGF0YS0+bXZfZGF0YSA9IG9sZGRhdGEu bXZfZGF0YTsNCgkJCWVsc2UgaWYgKCEobWMtPm1jX2ZsYWdzICYgQ19TVUIpKQ0KCQkJCW1lbWNw eShvbGRkYXRhLm12X2RhdGEsIGRhdGEtPm12X2RhdGEsIGRhdGEtPm12X3NpemUpOw0KCQkJZWxz ZSB7DQoJCQkJbWVtY3B5KE5PREVLRVkobGVhZiksIGtleS0+bXZfZGF0YSwga2V5LT5tdl9zaXpl KTsNCgkJCQlnb3RvIGZpeF9wYXJlbnQ7DQoJCQl9DQoJCQlyZXR1cm4gTURCX1NVQ0NFU1M7DQoJ CX0NCgkJbWRiX25vZGVfZGVsKG1jLCAwKTsNCgl9IDwtLS0tLS0tLSBUaGlzIGVudGlyZSBlbHNl IGNvbnRpbmdlbmN5IHdhcyBsaWtlbHkgc2tpcHBlZCEhDQoNCglyZGF0YSA9IGRhdGE7DQoNCm5l d19zdWI6DQoJbmZsYWdzID0gZmxhZ3MgJiBOT0RFX0FERF9GTEFHUzsNCgluc2l6ZSA9IElTX0xF QUYyKG1jLT5tY19wZ1ttYy0+bWNfdG9wXSkgPyBrZXktPm12X3NpemUgOiBtZGJfbGVhZl9zaXpl KGVudiwga2V5LCByZGF0YSk7IDwtLS0tLS0tLSBTRUdWDQouLi4JDQoNClRoaXMgbWF5IGJlIGFu IGlkZW50aWZpYWJsZSBidWcgaW4gbWRiX2N1cnNvcl9wdXQoKSBhcyBJdCBkb2VzIG5vdCBzYWZl bHkgaGFuZGxlIHRoZSBjYXNlIHdoZW4gdGhlIG5vdGVkIGNhbGwgdG8gbWRiX2N1cnNvcl9zZXQo KSByZXR1cm5zIE1EQl9OT1RGT1VORCAoLTMwNzk4KSENCg0KSXQgZXhwbGljaXRseSBmYWlscyB0 byBwcmVlbXB0aXZlbHkgZXhpdCBieSByZXR1cm5pbmcgYW4gZXJyb3IgaW4gdGhpcyBjYXNlLg0K DQpUaGUgdmFsdWUgb2YgLTMwNzk4IGlzIGluIHR1cm4gYXNzaWduZWQgdG8gaW5zZXJ0X2tleSwg d2hpY2ggaXMgdGhlcmVmb3JlIG5vbi1udWxsIGluIHRoZSBjb25kaXRpb24gb2YgdGhlIHN1YnNl cXVlbnQgaWYgc3RhdGVtZW50Lg0KDQoJaW5zZXJ0X2tleSA9IGluc2VydF9kYXRhID0gcmM7IDwt LS0tLS0tLSBpbnNlcnRfa2V5ID0gLTMwNzk4IG9yIE1EQl9OT1RGT1VORCENCglpZiAoaW5zZXJ0 X2tleSkgeyA8LS0tLS0tLS0gdHJ1ZQ0KCQkvKiBUaGUga2V5IGRvZXMgbm90IGV4aXN0ICovDQoJ CURQUklOVEYoKCJpbnNlcnRpbmcga2V5IGF0IGluZGV4ICVpIiwgbWMtPm1jX2tpW21jLT5tY190 b3BdKSk7DQoJCWlmICgobWMtPm1jX2RiLT5tZF9mbGFncyAmIE1EQl9EVVBTT1JUKSAmJg0KCQkJ TEVBRlNJWkUoa2V5LCBkYXRhKSA+IGVudi0+bWVfbm9kZW1heCkgPC0tLS0tLS0tIGZhbHNlIHNp bmNlIG1jLT5tY19kYi0+bWRfZmxhZ3MgPSAwDQoJCXsNCgkJCS8qIFRvbyBiaWcgZm9yIGEgbm9k ZSwgaW5zZXJ0IGluIHN1Yi1EQi4gIFNldCB1cCBhbiBlbXB0eQ0KCQkJICogIm9sZCBzdWItcGFn ZSIgZm9yIHByZXBfc3ViREIgdG8gZXhwYW5kIHRvIGEgZnVsbCBwYWdlLg0KCQkJICovDQoJCQlm cF9mbGFncyA9IFBfTEVBRnxQX0RJUlRZOw0KCQkJZnAgPSBlbnYtPm1lX3BidWY7DQoJCQlmcC0+ bXBfcGFkID0gZGF0YS0+bXZfc2l6ZTsgLyogdXNlZCBpZiBNREJfRFVQRklYRUQgKi8NCgkJCWZw LT5tcF9sb3dlciA9IGZwLT5tcF91cHBlciA9IChQQUdFSERSU1otUEFHRUJBU0UpOw0KCQkJb2xk ZGF0YS5tdl9zaXplID0gUEFHRUhEUlNaOw0KCQkJZ290byBwcmVwX3N1YkRCOw0KCQl9IDwtLS0t LS0tLSB0aGlzIHdhcyBub3QgZXhlY3V0ZWQsIGFuZCB0aGUgdmVyeSBsb25nIGVsc2UgY29udGlu Z2VuY3kgYmVsb3cgaXMgc2tpcHBlZCENCgl9IGVsc2Ugew0KU2luY2UgbWMtPm1jX2RiLT5tZF9m bGFncyA9IDAsIHRoZSBjb250aW5nZW5jeSBpbiB0aGUgZW1iZWRkZWQgaWYgc3RhdGVtZW50IGZh aWxzLg0KDQpUaGUgc2VnbWVudGF0aW9uIGZhdWx0IG9jY3VycyBkdWUgdG8gdGhlIGNhbGwgb2Yg SVNfTEVBRjIgb24gdGhlIG51bGwgcG9pbnRlciBtYy0+bWNfcGdbMF0uDQoNCglyZGF0YSA9IGRh dGE7DQoNCm5ld19zdWI6DQoJbmZsYWdzID0gZmxhZ3MgJiBOT0RFX0FERF9GTEFHUzsNCgluc2l6 ZSA9IElTX0xFQUYyKG1jLT5tY19wZ1ttYy0+bWNfdG9wXSkgPyBrZXktPm12X3NpemUgOiBtZGJf bGVhZl9zaXplKGVudiwga2V5LCByZGF0YSk7IDwtLS0tLS0tLSBTRUdWDQoNCg0KUmVnYXJkcywN ClJvYmlucy4NCg0KLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCkZyb206IEhvd2FyZCBDaHUg PGh5Y0BzeW1hcy5jb20+IA0KU2VudDogTW9uZGF5LCBKdW5lIDE3LCAyMDE5IDU6NTUgUE0NClRv OiBSb2JpbnMgR2VvcmdlIDxncm9iaW5zQHB1bHNlc2VjdXJlLm5ldD47IG9wZW5sZGFwLWl0c0BP cGVuTERBUC5vcmcNClN1YmplY3Q6IFJlOiAoSVRTIzkwMzcpIG9ic2VydmluZyBjcmFzaCBpbiBt ZGJfY3Vyc29yX3B1dCgpDQoNCkNBVVRJT046IFRoaXMgZW1haWwgb3JpZ2luYXRlZCBmcm9tIG91 dHNpZGUgb2YgUHVsc2VTZWN1cmUuIERvIG5vdCBjbGljayBsaW5rcyBvciBvcGVuIGF0dGFjaG1l bnRzIHVubGVzcyB5b3UgcmVjb2duaXplIHRoZSBzZW5kZXIgYW5kIGtub3cgdGhlIGNvbnRlbnQg aXMgc2FmZS4NCg0KDQpncm9iaW5zQHB1bHNlc2VjdXJlLm5ldCB3cm90ZToNCj4gRnVsbF9OYW1l OiBSb2JpbnMgR2VvcmdlDQo+IFZlcnNpb246IDAuOS4xOA0KPiBPUzogQ2VudG9zDQo+IFVSTDog ZnRwOi8vZnRwLm9wZW5sZGFwLm9yZy9pbmNvbWluZy8NCj4gU3VibWlzc2lvbiBmcm9tOiAoTlVM TCkgKDEyMS4yNDQuMTU0LjEzNCkNCj4NCj4NCj4gSSBhbSBzZWVpbmcgTE1EQiBjcmFzaCwgcGxl YXNlIGZpbmQgdGhlIHN0YWNrIHRyYWNlLg0KPg0KPiAjMCAgMHgwMDllMzYyZSBpbiBtZGJfY3Vy c29yX3B1dCAobWM9MHhmZmQ1OWJiOCwga2V5PTB4ZmZkNTlkMTQsIA0KPiBkYXRhPTB4ZmZkNTlk MGMsIGZsYWdzPTApIGF0IG1kYi5jOjY2ODgNCj4gIzEgIDB4MDA5ZTQ4ZWMgaW4gbWRiX3B1dCAo dHhuPTB4ZDc0ZDMwMDgsIGRiaT0yLCBrZXk9MHhmZmQ1OWQxNCwgDQo+IGRhdGE9MHhmZmQ1OWQw YywgZmxhZ3M9MCkgYXQgbWRiLmM6ODc3MQ0KPiAjMiAgMHgwMGY1Y2VmOCBpbiBMTURCOjpMTURC Q29udGV4dDo6Y3JlYXRlU2Vzc2lvbiAodGhpcz0weDgwY2M2MTAsIA0KPiBzaWQ9MHg4MGNkMGZj ICJzaWQxNDIyNDE5ZTVmZDZjZDIyNGYyNzhkNzQyOTNjNTBmNWVmOTY1OTM3MDAwMDAwMDArIikg DQo+IGF0DQo+IGxtZGJpbnQuY2M6NDYwDQo+ICMzICAweDA4MDUzOThlIGluIHVwZGF0ZUxNREIg KHJlcXVlc3Q9Li4uLCBmb3J3YXJkPUAweGZmZDU5ZmZmKSBhdA0KPiBzZXNzaW9uc2VydmVyLmNj OjExNTQNCj4gIzQgIHByb2Nlc3NSZXF1ZXN0V2l0aG91dFJlc3BvbnNlIChyZXF1ZXN0PS4uLiwg Zm9yd2FyZD1AMHhmZmQ1OWZmZikgDQo+IGF0DQo+IHNlc3Npb25zZXJ2ZXIuY2M6MTI0MA0KPiAj NSAgMHgwODA1NjkzNiBpbiBaU3ViSGFuZGxlcjo6aW9SZWFkeSAodGhpcz0weGZmZDVhYTFjLCBm ZD0yMCkgYXQNCj4gc2Vzc2lvbnNlcnZlci5jYzoxNTAxDQo+ICM2ICAweDAwZjg3MGQyIGluIHJ1 bkNvcmVEaXNwYXRjaGVyIChkZWZhdWx0X3Q9PHZhbHVlIG9wdGltaXplZCBvdXQ+LCANCj4gZmxh Z3M9LTEpIGF0IGZkcy5jYzo4ODkNCj4gIzcgIDB4MDBmODdiMzcgaW4gRFNFdm50RmRzOjpydW5E aXNwYXRjaGVyICgpIGF0IGZkcy5jYzo5NDUNCj4gIzggIDB4MDgwNTYyNDggaW4gbWFpbiAoKSBh dCBzZXNzaW9uc2VydmVyLmNjOjE4MjANCj4NCj4gQW55Ym9keSBoYXMgc2VlbiBzaW1pbGFyIGlz c3VlIGJlZm9yZT8NCg0KRG9lc24ndCBzb3VuZCBmYW1pbGlhci4gQnV0IDAuOS4xOCBpcyBxdWl0 ZSBvbGQuIElmIHlvdSBjYW4gcmVwcm9kdWNlIHRoaXMgaXNzdWUgaW4gMC45LjIzIHRoZW4gd2Un bGwgdGFrZSBhIGxvb2suIFRlc3QgY29kZSB0byByZXByb2R1Y2UgdGhlIHByb2JsZW0gd291bGQg YWxzbyBiZSBuZWVkZWQuDQoNCi0tDQogIC0tIEhvd2FyZCBDaHUNCiAgQ1RPLCBTeW1hcyBDb3Jw LiAgICAgICAgICAgaHR0cHM6Ly9uYW0wNC5zYWZlbGlua3MucHJvdGVjdGlvbi5vdXRsb29rLmNv bS8/dXJsPWh0dHAlM0ElMkYlMkZ3d3cuc3ltYXMuY29tJmFtcDtkYXRhPTAyJTdDMDElN0MlN0Mw MDNiOTA3ZDJkZGU0NDAyOGFkYzA4ZDZmMzFlZDljNCU3QzMyOTBhOTE3OWRkNjQzZGI4NDNiYTNl Mzc2ZjlmOTZjJTdDMCU3QzAlN0M2MzY5NjM3MTExNjkyNTE5NDkmYW1wO3NkYXRhPTJ1R1JvTUdW ZGhDbmlVRGhYZnpQZ0FtaVYxa3Q2NmRXN3U4ckRtR3Q2YVklM0QmYW1wO3Jlc2VydmVkPTANCiAg RGlyZWN0b3IsIEhpZ2hsYW5kIFN1biAgICAgaHR0cHM6Ly9uYW0wNC5zYWZlbGlua3MucHJvdGVj dGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0dHAlM0ElMkYlMkZoaWdobGFuZHN1bi5jb20lMkZoeWMl MkYmYW1wO2RhdGE9MDIlN0MwMSU3QyU3QzAwM2I5MDdkMmRkZTQ0MDI4YWRjMDhkNmYzMWVkOWM0 JTdDMzI5MGE5MTc5ZGQ2NDNkYjg0M2JhM2UzNzZmOWY5NmMlN0MwJTdDMCU3QzYzNjk2MzcxMTE2 OTI1MTk0OSZhbXA7c2RhdGE9MyUyRkxSUE0lMkJIdElhUm9LYU16JTJGMjclMkZvNFpUOFhoVGNG SlR2eXBCc3N4MHI4JTNEJmFtcDtyZXNlcnZlZD0wDQogIENoaWVmIEFyY2hpdGVjdCwgT3BlbkxE QVAgIGh0dHBzOi8vbmFtMDQuc2FmZWxpbmtzLnByb3RlY3Rpb24ub3V0bG9vay5jb20vP3VybD1o dHRwJTNBJTJGJTJGd3d3Lm9wZW5sZGFwLm9yZyUyRnByb2plY3QlMkYmYW1wO2RhdGE9MDIlN0Mw MSU3QyU3QzAwM2I5MDdkMmRkZTQ0MDI4YWRjMDhkNmYzMWVkOWM0JTdDMzI5MGE5MTc5ZGQ2NDNk Yjg0M2JhM2UzNzZmOWY5NmMlN0MwJTdDMCU3QzYzNjk2MzcxMTE2OTI1MTk0OSZhbXA7c2RhdGE9 N2lUWE1nMk5TZVhHJTJGS3A5cWFIUVBPQyUyRktiakNWJTJCSzNKcyUyRmVuaEZwTEdZJTNEJmFt cDtyZXNlcnZlZD0wDQo=