IyBUaGlzIGlzIGEgZnJvemVuIHN0YXRlIGZpbGUgZ2VuZXJhdGVkIGJ5IEdOVSBNNCAxLjQuMTcKVjEKUTEsMQpbXQpUMjIsMTMzCl9BU19MSVRFUkFMX0hFUkVET0NfSUZtNF9pZihtNF9pbmRleChbJDFdLCBbQFN8QF0pLCBbLTFdLAogIFttNF9pZihtNF9pbmRleChtNF90cmFuc2xpdChbWyQxXV0sIFtcYF0sIFskXSksIFskXSksIFstMV0sCiAgICBbJDBfWUVTXSwgWyQwX05PXSldLAogIFskMF9OT10pClQxNiw0MDAKX0FTX0VYSVRfUFJFUEFSRV9tNF9kZWZ1bl9wcm8oWyQwXSlBU19SRVFVSVJFX1NIRUxMX0ZOKFthc19mbl9zZXRfc3RhdHVzXSwKICBbQVNfRlVOQ1RJT05fREVTQ1JJQkUoW2FzX2ZuX3NldF9zdGF0dXNdLCBbU1RBVFVTXSwKICAgIFtTZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuXSldLCBbICByZXR1cm4gJFtdMV0pQVNfUkVRVUlSRV9TSEVMTF9GTihbYXNfZm5fZXhpdF0sCiAgW0FTX0ZVTkNUSU9OX0RFU0NSSUJFKFthc19mbl9leGl0XSwgW1NUQVRVU10sCiAgICBbRXhpdCB0aGUgc2hlbGwgd2l0aCBTVEFUVVMsIGV2ZW4gaW4gYSAidHJhcCAwIiBvciAic2V0IC1lIiBjb250ZXh0Ll0pXSwKWyAgc2V0ICtlCiAgYXNfZm5fc2V0X3N0YXR1cyAkWzFdCiAgZXhpdCAkWzFdXSlbXV9tNF9kZWZ1bl9lcGkoWyQwXSkKVDEyLDY5Cl9tNF9saXN0X2NtcG00X2lmKFskMV0sIFtdLCBbMG00X2lnbm9yZV0sIFskMl0sIFswXSwgW200X3VucXVvdGVdLCBbJDJtNF9pZ25vcmVdKQpGMTIsOQptNF9kZWJ1Z2ZpbGVkZWJ1Z2ZpbGUKVDE3LDAKQVNfTUVTU0FHRV9MT0dfRkQKVDgsMApfbTRfd2FybgpUMjcsMzAKbTRfbG9jYXRpb24oX0FTX01FX1BSRVBBUkUpLi4vLi4vbGliL200c3VnYXIvbTRzaC5tNDoxMTIyClQyMCwyOQptNF9sb2NhdGlvbihBU19FWElUKS4uLy4uL2xpYi9tNHN1Z2FyL200c2gubTQ6NTg1ClQyMSw0NzkKX0FTX1ZBUl9BUklUSF9QUkVQQVJFX200X2RlZnVuX3BybyhbJDBdKUFTX0ZVTkNUSU9OX0RFU0NSSUJFKFthc19mbl9hcml0aF0sIFtBUkcuLi5dLApbUGVyZm9ybSBhcml0aG1ldGljIGV2YWx1YXRpb24gb24gdGhlIEFSR3MsIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluCnRoZSBnbG9iYWwgJGFzX3ZhbC4gIFRha2UgYWR2YW50YWdlIG9mIHNoZWxscyB0aGF0IGNhbiBhdm9pZCBmb3Jrcy4KVGhlIGFyZ3VtZW50cyBtdXN0IGJlIHBvcnRhYmxlIGFjcm9zcyAkKCgpKSBhbmQgZXhwci5dKQpBU19JRihbX0FTX1JVTihbIkFTX0VTQ0FQRShtNF9xdW90ZShfQVNfVkFSX0FSSVRIX1dPUktTKSkiXSldLApbZXZhbCAnYXNfZm5fYXJpdGggKCkKICB7CiAgICBhc192YWw9JCgoICRbXSogKSkKICB9J10sClthc19mbl9hcml0aCAoKQogIHsKICAgIGFzX3ZhbD1gZXhwciAiJFtdQCIgfHwgdGVzdCAkPyAtZXEgMWAKICB9XSkgIyBhc19mbl9hcml0aApbXV9tNF9kZWZ1bl9lcGkoWyQwXSkKVDE1LDIxOAptNF9tYXBfYXJnc19zZXBtNF9pZihbJCNdLCBbMF0sIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkI10pXSwKICAgICAgIFskI10sIFsxXSwgW10sCiAgICAgICBbJCNdLCBbMl0sIFtdLAogICAgICAgWyQjXSwgWzNdLCBbXSwKICAgICAgIFskI10sIFs0XSwgWyQxWyQ0XSQyW11dLAogICAgICAgWyQxWyQ0XSQyW11fbTRfZm9yZWFjaChbJDNbXSQxXSwgWyQyXSwgbTRfc2hpZnQzKCRAKSldKQpUMjIsMzAKbTRfbG9jYXRpb24oQVNfVEVTVF9YKS4uLy4uL2xpYi9tNHN1Z2FyL200c2gubTQ6MTA5MApUOCwxNTAKbTRfZGVmdW5tNF9kZWZpbmUoW200X2xvY2F0aW9uKCQxKV0sIG00X2xvY2F0aW9uKW00X2RlZmF1bHQoWyQzXSwgW200X2RlZmluZV0pKFskMV0sCiAgW19tNF9kZWZ1bl9wcm8oXW00X2RxdW90ZSgkWzBdKVspJDJbXV9tNF9kZWZ1bl9lcGkoXW00X2RxdW90ZSgkWzBdKVspXSkKVDE4LDUwCl9tNF9zZXRfY29udGVudHNfMV9tNF9zdGFja19yZXZlcnNlKFtfbTRfc2V0KFskMV0pXSwgW19tNF9zZXRfKCQxKV0pClQxOCw5NApfbTRfc2V0X2NvbnRlbnRzXzJfbTRfc3RhY2tfcmV2ZXJzZShbX200X3NldF8oJDEpXSwgW19tNF9zZXQoWyQxXSldLAogIFskMltdX200X2RlZm4oW19tNF9zZXRfKCQxKV0pJDNdLCBbJDRbXV0pClQ4LDgxCm00X2Nob21wbTRfZm9ybWF0KFtbJS4qc11dLCBtNF9pbmRleChtNF90cmFuc2xpdChbWyQxXV0sIFsKLy5dLCBbLyAgXSlbLi8uXSwgWy8uXSksIFskMV0pClQxMCw2OApfQVNfVFJfQ1BQX0FTX0xJVEVSQUxfSUYoWyQxXSwgWypdWwkgXVsKXSkoW10sIFskMF9JTkRJUl0sIFskMF9MSVRFUkFMXSkoWyQxXSkKVDE2LDI4MwpfQVNfVEVTVF9QUkVQQVJFX200X2RlZnVuX3BybyhbJDBdKUFTX1JFUVVJUkVfU0hFTExfRk4oW2FzX2ZuX2V4ZWN1dGFibGVfcF0sCiAgW0FTX0ZVTkNUSU9OX0RFU0NSSUJFKFthc19mbl9leGVjdXRhYmxlX3BdLCBbRklMRV0sCiAgICBbVGVzdCBpZiBGSUxFIGlzIGFuIGV4ZWN1dGFibGUgcmVndWxhciBmaWxlLl0pXSwKICBbICB0ZXN0IC1mICIkW10xIiAmJiB0ZXN0IC14ICIkW10xIl0pYXNfdGVzdF94PSd0ZXN0IC14Jwphc19leGVjdXRhYmxlX3A9YXNfZm5fZXhlY3V0YWJsZV9wCltdX200X2RlZnVuX2VwaShbJDBdKQpUMTgsMzAzCl9BU19FQ0hPX05fUFJFUEFSRV9tNF9kZWZ1bl9wcm8oWyQwXSlFQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQpjYXNlIGBlY2hvIC1uIHhgIGluIEAlOkAoKCgoKAotbiopCiAgY2FzZSBgZWNobyAneHlcYydgIGluCiAgKmMqKSBFQ0hPX1Q9JwknOzsJIyBFQ0hPX1QgaXMgc2luZ2xlIHRhYiBjaGFyYWN0ZXIuCiAgeHkpICBFQ0hPX0M9J1xjJzs7CiAgKikgICBlY2hvIGBlY2hvIGtzaDg4IGJ1ZyBvbiBBSVggNi4xYCA+IC9kZXYvbnVsbAogICAgICAgRUNIT19UPScJJzs7CiAgZXNhYzs7CiopCiAgRUNIT19OPSctbic7Owplc2FjCltdX200X2RlZnVuX2VwaShbJDBdKQpUMTMsODIKbTRfZHF1b3RlX2VsdG00X2lmKFskI10sIFswXSwgW10sCiAgICAgICBbJCNdLCBbMV0sIFtbWyQxXV1dLAogICAgICAgW1tbJDFdXSwkMChtNF9zaGlmdCgkQCkpXSkKVDI0LDMyCm00X2RlZmF1bHRfbmJsYW5rX3F1b3RlZG00X2lmYmxhbmsoWyQxXSwgW1skMl1dLCBbWyQxXV0pClQ5LDU3Cm00X2FwcGVuZG00X2RlZmluZShbJDFdLCBtNF9pZmRlZihbJDFdLCBbX200X2RlZm4oWyQxXSlbJDNdXSlbJDJdKQpUMTEsMzcKbTRfbGlzdF9jbXBfJDBfcmF3KG00X2RxdW90ZSgkMSksIG00X2RxdW90ZSgkMikpClQ3LDg0Cl9tNF9mb3IkNFskMV0kNVtdbTRfaWYoWyQxXSwgWyQyXSwgW10sCgkJIFskMChtNF9ldmFsKFskMSArICQzXSksIFskMl0sIFskM10sIFskNF0sIFskNV0pXSkKVDEyLDc4Cm00X2ZvcmVhY2hfd200X3B1c2hkZWYoWyQxXSltNF9tYXBfYXJnc193KFskMl0sCiAgW200X2RlZmluZShbJDFdLF0sIFspJDNdKW00X3BvcGRlZihbJDFdKQpUNSwxMTMKQVNfSUZfbTRfZGVmdW5fcHJvKFskMF0paWYgJDE7IHRoZW4gOgogICQyCm00X21hcF9hcmdzX3BhaXIoW18kMF0sIFtfJDBfRUxTRV0sIG00X3NoaWZ0MigkQCkpZmlbXVtdX200X2RlZnVuX2VwaShbJDBdKQpUMTEsMTY1Cl9tNF9kdW1wZGVmbTRfaWYoWyQjXSwgWzBdLCBbbTRfZmF0YWwoWyQwOiBtaXNzaW5nIGFyZ3VtZW50XSldLAogICAgICAgWyQjXSwgWzFdLCBbbTRfYnVpbHRpbihbZHVtcGRlZl0sIFskMV0pXSwKICAgICAgIFttNF9tYXBfYXJnc19zZXAoW200X2J1aWx0aW4oW2R1bXBkZWZdLF0sIFspXSwgW10sICRAKV0pClQyNSwzMAptNF9sb2NhdGlvbihBU19WQVJfQVJJVEgpLi4vLi4vbGliL200c3VnYXIvbTRzaC5tNDoxOTgxClQxNCwxMzEKbTRfc2V0X2FkZF9hbGxtNF9kZWZpbmUoW19tNF9zZXRfc2l6ZSgkMSldLCBtNF9ldmFsKG00X3NldF9zaXplKFskMV0pCiAgKyBtNF9sZW4obTRfaWZkZWYoW19tNF9zZXRfY2xlYW51cCgkMSldLCBbXyQwX2NoZWNrXSwgW18kMF0pKFskMV0sICRAKSkpKQpGNyw0Cm00X2luY3JpbmNyCkY4LDQKX200X2RlZm5kZWZuClQxMywxMjQKX200X2RlZnVuX3Byb200X2lmZGVmKFtfbTRfZXhwYW5zaW9uX3N0YWNrXSwgW10sIFtfbTRfZGVmdW5fcHJvX291dGVyKFskMV0pXSltNF9leHBhbnNpb25fc3RhY2tfcHVzaChbJDFdKW00X3B1c2hkZWYoW19tNF9leHBhbmRpbmcoJDEpXSkKVDE1LDExNApBU19WQVJfVEVTVF9TRVRBU19MSVRFUkFMX1dPUkRfSUYoWyQxXSwKICBbJHskMSs6fSBmYWxzZV0sCiAgW3sgYXNfdmFyPSQxOyBldmFsIFwkeyRhc192YXIrOn0gZmFsc2U7IH1dLAogIFtldmFsIFwkeyQxKzp9IGZhbHNlXSkKVDcsMTExCkFTX0VYSVRfbTRfZGVmdW5fcHJvKFskMF0pQVNfUkVRVUlSRShbX0FTX0VYSVRfUFJFUEFSRV0pW11hc19mbl9leGl0IG00X2lmdmFsKFskMV0sIFskMV0sIFskXVs/XSlbXV9tNF9kZWZ1bl9lcGkoWyQwXSkKVDI3LDMwCm00X2xvY2F0aW9uKF9BU19DUl9QUkVQQVJFKS4uLy4uL2xpYi9tNHN1Z2FyL200c2gubTQ6MTc5MwpUMTMsMTc1Cm00X2RlZnVuX2luaXRtNF9kZWZpbmUoWyQxXSwgWyQzW11dKW00X2RlZnVuKFskMV0sCiAgIFskMltdX200X3BvcGRlZihdbTRfZHF1b3RlKCRbMF0pWyltNF9pbmRpcihdbTRfZHF1b3RlKCRbMF0pZG5sClttNF9pZihdbTRfZHF1b3RlKCRbI10pWywgWzBdLCBbXSwgXW00X2RxdW90ZShbLCRdQClbKSldLCBbbTRfcHVzaGRlZl0pClQxMiw2NApfQVNfRUNIT19MT0dfQVNfRUNITyhbJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkMV0sIEFTX01FU1NBR0VfTE9HX0ZEKVtdClQxMiwxMzEKX0FTX0VDSE9fTE9HX200X2RlZnVuX3BybyhbJDBdKUFTX1JFUVVJUkUoW19BU19MSU5FTk9fUFJFUEFSRV0pW11fbTRfcG9wZGVmKFskMF0pbTRfaW5kaXIoWyQwXW00X2lmKFskI10sIFswXSwgW10sIFssJEBdKSlbXV9tNF9kZWZ1bl9lcGkoWyQwXSkKVDE3LDYwNApfQVNfU0hFTExfRk5fV09SS2FzX2ZuX3JldHVybiAoKSB7IChleGl0IFskXTEpOyB9CmFzX2ZuX3N1Y2Nlc3MgKCkgeyBhc19mbl9yZXR1cm4gMDsgfQphc19mbl9mYWlsdXJlICgpIHsgYXNfZm5fcmV0dXJuIDE7IH0KYXNfZm5fcmV0X3N1Y2Nlc3MgKCkgeyByZXR1cm4gMDsgfQphc19mbl9yZXRfZmFpbHVyZSAoKSB7IHJldHVybiAxOyB9CgpleGl0Y29kZT0wCmFzX2ZuX3N1Y2Nlc3MgfHwgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3N1Y2Nlc3MgZmFpbGVkLjsgfQphc19mbl9mYWlsdXJlICYmIHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9mYWlsdXJlIHN1Y2NlZWRlZC47IH0KYXNfZm5fcmV0X3N1Y2Nlc3MgfHwgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3JldF9zdWNjZXNzIGZhaWxlZC47IH0KYXNfZm5fcmV0X2ZhaWx1cmUgJiYgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3JldF9mYWlsdXJlIHN1Y2NlZWRlZC47IH0KQVNfSUYoWyggc2V0IHg7IGFzX2ZuX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gIlskXTEiICldLCBbXSwKICAgICAgW2V4aXRjb2RlPTE7IGVjaG8gcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgbm90IHNhdmVkLl0pCnRlc3QgeCRleGl0Y29kZSA9IHgwW10KVDIxLDk3Cm00X2NvcHlyaWdodF9jb25kZW5zZW00X3RleHRfd3JhcChtNF9icGF0c3Vic3QobTRfZmxhdHRlbihbWyQxXV0pLApbKEMpWy0JICwwLTldKlwoWzEtOV1bMC05XVswLTldWzAtOV1cKV0sIFsoQykgXDFdKSkKVDE3LDIwMwptNF9jcl9ub3RfTGV0dGVycwECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjKiUmJygpJCssLi8wMTIzNDU2Nzg5Ojs8PT4/QFtcXV5fYHt8fX5/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8tClQyMSwxCl9tNF9kaXZlcnQoTTRTSC1JTklUKTYKVDEyLDY2Cm00X3JlX3N0cmluZ1thYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXzAxMjM0NTY3ODldKgpUMTYsNQpfbTRfZGl2ZXJ0KEdST1cpMTAwMDAKVDE4LDcyCm00X3ZlcnNpb25fY29tcGFyZV9tNF9saXN0X2NtcF9yYXcoX200X3ZlcnNpb25fdW5sZXR0ZXIoWyQxXSksIF9tNF92ZXJzaW9uX3VubGV0dGVyKFskMl0pKQpUMzEsMzAKbTRfbG9jYXRpb24oX0FTX0xJTkVOT19QUkVQQVJFKS4uLy4uL2xpYi9tNHN1Z2FyL200c2gubTQ6MTE2NwpUMjUsMQpfbTRfZGl2ZXJ0KE00U0gtU0FOSVRJWkUpNApUMTAsMTIwCl9BU19FU0NBUEVtNF9pZihtNF9pbmRleChtNF90cmFuc2xpdChbWyQxXV0sIFskM10sIFskMiQyJDIkMl0pLCBbJDJdKSwgWy0xXSwKICAgICAgIFskMF9dLCBbbTRfYnBhdHN1YnN0XSkoWyQxXSwgW1skMiQzXV0sIFtcXFwmXSkKVDI5LDI5Cm00X2xvY2F0aW9uKF9BU19FWElUX1BSRVBBUkUpLi4vLi4vbGliL200c3VnYXIvbTRzaC5tNDo1NjgKVDE1LDE2NQpfbTRfc2V0X2FkZF9hbGxtNF9pZihbJCNdLCBbMl0sIFtdLAogICAgICAgW200X2lmZGVmKFtfbTRfc2V0KFskMV0sJDMpXSwgW10sCgkJIFttNF9kZWZpbmUoW19tNF9zZXQoWyQxXSwkMyldLCBbMV0pbTRfcHVzaGRlZihbX200X3NldChbJDFdKV0sCgkgICBbJDNdKS1dKSQwKFskMV0sIG00X3NoaWZ0MigkQCkpXSkKVDE3LDc4MApfQVNfRVJST1JfUFJFUEFSRUFTX1JFUVVJUkVfU0hFTExfRk4oW2FzX2ZuX2Vycm9yXSwKICBbQVNfRlVOQ1RJT05fREVTQ1JJQkUoW2FzX2ZuX2Vycm9yXSwgW1NUQVRVUyBFUlJPUl1tNF9pZnZhbChBU19NRVNTQUdFX0xPR19GRCwKICAgICAgW1sgW1tMSU5FTk8gTE9HX0ZEXV1dXSksCiAgICBbT3V0cHV0ICJgYmFzZW5hbWUgQFN8QDBgOiBlcnJvcjogRVJST1IiIHRvIHN0ZGVyci5dCm00X2lmdmFsKEFTX01FU1NBR0VfTE9HX0ZELAogICAgW1tJZiBMSU5FTk8gYW5kIExPR19GRCBhcmUgcHJvdmlkZWQsIGFsc28gb3V0cHV0IHRoZSBlcnJvciB0byBMT0dfRkQsCiAgICAgIHJlZmVyZW5jaW5nIExJTkVOTy5dXSkKICAgIFtUaGVuIGV4aXQgdGhlIHNjcmlwdCB3aXRoIFNUQVRVUywgdXNpbmcgMSBpZiB0aGF0IHdhcyAwLl0pXSwKWyAgYXNfc3RhdHVzPSRbMV07IHRlc3QgJGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQptNF9pZnZhbChBU19NRVNTQUdFX0xPR19GRCwKW200X3B1c2hkZWYoW0FTX01FU1NBR0VfTE9HX0ZEXSwgWyRbNF1dKWRubAogIGlmIHRlc3QgIiRbNF0iOyB0aGVuCiAgICBBU19MSU5FTk9fUFVTSChbJFszXV0pCiAgICBfQVNfRUNIT19MT0coW2Vycm9yOiAkWzJdXSkKICBmaQptNF9kZWZpbmUoW0FTX01FU1NBR0VfTE9HX0ZEXSldLCBbbTRfcHVzaGRlZihbQVNfTUVTU0FHRV9MT0dfRkRdKV0pZG5sCiAgQVNfTUVTU0FHRShbZXJyb3I6ICRbMl1dLCBbMl0pCl9tNF9wb3BkZWYoW0FTX01FU1NBR0VfTE9HX0ZEXSlkbmwKICBBU19FWElUKFskYXNfc3RhdHVzXSldKQpUOCw0Cm00X3F1b3RlWyQqXQpUMTUsNAptNF9QQUNLQUdFX1lFQVIyMDEyClQxMCwyMTEKbTRfZHVtcGRlZm00X2lmKFskI10sIFswXSwgW200X2ZhdGFsKFskMDogbWlzc2luZyBhcmd1bWVudF0pXSwKICAgICAgIFskI10sIFsxXSwgW200X2lmZGVmKFskMV0sIFttNF9lcnJwcmludG4oCiAgWyQxOgldbTRfZHF1b3RlKF9tNF9kZWZuKFskMV0pKSldLCBbbTRfZmF0YWwoWyQwOiB1bmRlZmluZWQgbWFjcm86ICQxXSldKV0sCiAgICAgICBbbTRfbWFwX2FyZ3MoWyQwXSwgJEApXSkKVDE1LDE5MwptNF9jcl9ub3RfYWxudW0BAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyolJicoKSQrLC4vOjs8PT4/QFtcXV5fYHt8fX5/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8tClQ2LDIxCl9BU19JRmVsaWYgJDE7IHRoZW4gOgogICQyCgpUMTMsMTUKQVNfVkFSX1BPUERFRm00X3BvcGRlZihbJDFdKQpUMjMsMjkKbTRfbG9jYXRpb24oQVNfUkVRVUlSRSkuLi8uLi9saWIvbTRzdWdhci9tNHNoLm00OjM4NQpGNiwzCm00X2xlbmxlbgpUMTQsNDIKbTRfZGl2ZXJ0X3RleHRtNF9kaXZlcnRfcHVzaChbJDFdKSQyCm00X2RpdmVydF9wb3AoWyQxXSkKVDgsOTQKQVNfVU5TRVRfbTRfZGVmdW5fcHJvKFskMF0peyBBU19MSVRFUkFMX1dPUkRfSUYoWyQxXSwgW10sIFtldmFsIF0pJDE9OyB1bnNldCAkMTt9W11fbTRfZGVmdW5fZXBpKFskMF0pClQxMCwxMTUKQVNfVkFSX0dFVEFTX0xJVEVSQUxfV09SRF9JRihbJDFdLAoJICAgICAgIFskJDFdLAogIFtgZXZhbCAnYXNfdmFsPSR7J19BU19FU0NBUEUoW1skMV1dLCBbYF0sIFtcXSknfTtBU19FQ0hPKFsiJGFzX3ZhbCJdKSdgXSkKVDI5LDMwCm00X2xvY2F0aW9uKF9BU19MTl9TX1BSRVBBUkUpLi4vLi4vbGliL200c3VnYXIvbTRzaC5tNDoxMjIzCkYxMiw5Cm00X2RlYnVnbW9kZWRlYnVnbW9kZQpUMTAsMjgwCm00X3NldF9hZGRtNF9pZmRlZihbX200X3NldChbJDFdLCQyKV0sCgkgIFttNF9pZihtNF9pbmRpcihbX200X3NldChbJDFdLCQyKV0pLCBbMF0sCgkJIFttNF9kZWZpbmUoW19tNF9zZXQoWyQxXSwkMildLAoJCQkgICAgWzFdKV9tNF9zZXRfc2l6ZShbJDFdLCBbbTRfaW5jcl0pJDNdLCBbJDRdKV0sCgkgIFttNF9kZWZpbmUoW19tNF9zZXQoWyQxXSwkMildLAoJCSAgICAgWzFdKW00X3B1c2hkZWYoW19tNF9zZXQoWyQxXSldLAoJCQkJICAgIFskMl0pX200X3NldF9zaXplKFskMV0sIFttNF9pbmNyXSkkM10pClQxNCwxMjIKbTRfYXBwZW5kX3VuaXFtNF9pZnZhbChbJDNdLCBbbTRfaWYobTRfaW5kZXgoWyQyXSwgWyQzXSksIFstMV0sIFtdLAoJCSAgICAgICBbbTRfd2Fybihbc3ludGF4XSwKCQkJCVskMDogYCQyJyBjb250YWlucyBgJDMnXSldKV0pXyQwKCRAKQpUMTUsMApfbTRfZGl2ZXJ0X2R1bXAKVDI3LDMwCm00X2xvY2F0aW9uKEFTX1ZBUl9QVVNIREVGKS4uLy4uL2xpYi9tNHN1Z2FyL200c2gubTQ6MjA2NgpUMjAsMjAKbTRfUEFDS0FHRV9CVUdSRVBPUlRidWctYXV0b2NvbmZAZ251Lm9yZwpUOCw2NgptNF9pZnNldG00X2lmZGVmKFskMV0sCgkgIFttNF9pZnZhbChfbTRfZGVmbihbJDFdKSwgWyQyXSwgWyQzXSldLAoJICBbJDNdKQpUNywxODIKbTRfY29uZG00X2lmKFskI10sIFswXSwgW200X2ZhdGFsKFskMDogY2Fubm90IGJlIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50c10pXSwKICAgICAgIFskI10sIFsxXSwgWyQxXSwKICAgICAgIG00X2V2YWwoWyQjICUgM10pLCBbMl0sIFttNF9mYXRhbChbJDA6IG1pc3NpbmcgYW4gYXJndW1lbnRdKV0sCiAgICAgICBbXyQwKCRAKV0pClQ5LDE1CkFTX0VDSE9fTiRhc19lY2hvX24gJDFbXQpUOSwxMjkKQVNfRUNIT19OX200X2RlZnVuX3BybyhbJDBdKUFTX1JFUVVJUkUoW19BU19FQ0hPX1BSRVBBUkVdKVtdX200X3BvcGRlZihbJDBdKW00X2luZGlyKFskMF1tNF9pZihbJCNdLCBbMF0sIFtdLCBbLCRAXSkpW11fbTRfZGVmdW5fZXBpKFskMF0pClQxMiwzMAptNF9lc3lzY21kX3NtNF9jaG9tcF9hbGwobTRfZXN5c2NtZChbJDFdKSkKVDYsMjY0CkFTX0ZPUl9tNF9kZWZ1bl9wcm8oWyQwXSltNF9wdXNoZGVmKFskMV0sIG00X2lmKFskM10sIFtdLCBbWyQkMl1dLCBtNF90cmFuc2xpdChbJDNdLCBbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl8wMTIzNDU2Nzg5XVslKz06LC4vLV0pLCBbXSwgW1skM11dLCBbWyQkMl1dKSlmb3IgJDJbXW00X2lmdmFsKFskM10sIFsgaW4gJDNdKQpkbyA6CiAgJDQKZG9uZVtdX200X3BvcGRlZihbJDFdKVtdX200X2RlZnVuX2VwaShbJDBdKQpUMTQsMjc2Cl9BU19DUl9QUkVQQVJFX200X2RlZnVuX3BybyhbJDBdKSMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCmFzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJwphc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5Jwphc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKW11fbTRfZGVmdW5fZXBpKFskMF0pClQxNSwxNDgKX200X2FwcGVuZF91bmlxbTRfaWZkZWYoWyQxXSwKCSAgW200X2lmKG00X2luZGV4KFskM11fbTRfZGVmbihbJDFdKVskM10sIFskMyQyJDNdKSwgWy0xXSwKCQkgW200X2FwcGVuZChbJDFdLCBbJDJdLCBbJDNdKSQ0XSwgWyQ1XSldLAoJICBbbTRfZGVmaW5lKFskMV0sIFskMl0pJDRdKQpUMzIsMzAKbTRfbG9jYXRpb24oX0FTX01LRElSX1BfUFJFUEFSRSkuLi8uLi9saWIvbTRzdWdhci9tNHNoLm00OjEyOTYKVDIwLDIwMQpfQVNfQkFTRU5BTUVfUFJFUEFSRV9tNF9kZWZ1bl9wcm8oWyQwXSlBU19SRVFVSVJFKFtfQVNfRVhQUl9QUkVQQVJFXSlpZiAoYmFzZW5hbWUgLS0gLykgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgIlhgYmFzZW5hbWUgLS0gLyAyPiYxYCIgPSAiWC8iOyB0aGVuCiAgYXNfYmFzZW5hbWU9YmFzZW5hbWUKZWxzZQogIGFzX2Jhc2VuYW1lPWZhbHNlCmZpCltdX200X2RlZnVuX2VwaShbJDBdKQpUMTcsMjcyCl9BU19JREVOVElGSUVSX0lGbTRfY29uZChbWyQxXV0sIFtdLCBbXSwKCSBbbTRfZXZhbChtNF9sZW4obTRfdHJhbnNsaXQoW1skMV1dLCBdW1thYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXzAxMjM0NTY3ODldXVspKSA+IDApXSwgWzFdLCBbXSwKCSBbbTRfbGVuKG00X3RyYW5zbGl0KG00X2Zvcm1hdChbWyUuMXNdXSwgWyQxXSksIF1bW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfXV1bKSldLCBbMF0sIFstXSkKVDExLDg1CkFTX0JBU0VOQU1FJGFzX2Jhc2VuYW1lIC0tICQxIHx8Cl9BU19CQVNFTkFNRV9FWFBSKFskMV0pIDI+L2Rldi9udWxsIHx8Cl9BU19CQVNFTkFNRV9TRUQoWyQxXSlbXQpUMTEsMTI0CkFTX0JBU0VOQU1FX200X2RlZnVuX3BybyhbJDBdKUFTX1JFUVVJUkUoW18kMF9QUkVQQVJFXSlbXV9tNF9wb3BkZWYoWyQwXSltNF9pbmRpcihbJDBdbTRfaWYoWyQjXSwgWzBdLCBbXSwgWywkQF0pKVtdX200X2RlZnVuX2VwaShbJDBdKQpUOSwzMQpfbTRfYXBwbHltNF9pZihbJDJdLCBbXSwgW10sIFskMSgkMilbXV0pClQxMyw4NApfQVNfUVVPVEVfT0xEbTRfd2Fybihbb2Jzb2xldGVdLAogICBbYmFjayBxdW90ZXMgYW5kIGRvdWJsZSBxdW90ZXMgbXVzdCBub3QgYmUgZXNjYXBlZCBpbjogJDFdKSQxClQxMCwyCm00X3VucXVvdGUkKgpUOSw3MgptNF9tYXBhbGxtNF9pZihbJDJdLCBbXSwgW10sCiAgICAgICBbX200X2ZvcmVhY2goW200X2FwcGx5KFskMV0sXSwgWyldLCBbXSwgJDIpXSkKRjE0LDYKX200X2RpdmVydF9yYXdkaXZlcnQKVDYsMTIyCm00X2Nkcm00X2lmKFskI10sIDAsIFttNF9mYXRhbChbJDA6IGNhbm5vdCBiZSBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHNdKV0sCiAgICAgICBbJCNdLCAxLCBbXSwKICAgICAgIFttNF9kcXVvdGUobTRfc2hpZnQoJEApKV0pClQxNiwyNwpfQVNfUVVPVEVfTU9ERVJOX0FTX0VTQ0FQRShbJDFdLCBbYF0sIFsiIl0pClQxNCw0MQpfbTRfbGlzdF9jbXBfMV9tNF9saXN0X2NtcF8yKFskMl0sIFttNF9zaGlmdDIoJEApXSwgJDEpClQxNCw5NQpfbTRfbGlzdF9jbXBfMl9tNF9saXN0X2NtcChbJDEkM10sIG00X2NtcChbJDMrMF0sIFskMSswXSkpKAogIFtfbTRfbGlzdF9jbXBfMShtNF9kcXVvdGUobTRfc2hpZnQzKCRAKSksICQyKV0pClQxMSw1MwpfbTRfam9pbmFsbG00X2lmKFskI10sIFsyXSwgW10sIFtbJDEkM10kMChbJDFdLCBtNF9zaGlmdDIoJEApKV0pClQxNiwxMzcKX0FTX0RJUk5BTUVfRVhQUiRhc19leHByIFhbXSQxIDogJ1hcKC4qW1teL11dXCkvLypbW14vXVteL11dKi8qJCcgXHwgXAoJIFhbXSQxIDogJ1hcKC8vXClbW14vXV0nIFx8IFwKCSBYW10kMSA6ICdYXCgvL1wpJCcgXHwgXAoJIFhbXSQxIDogJ1hcKC9cKScgXHwgLltdClQxNiwxMjkKX0FTX0RJUk5BTUVfRVhQUl9tNF9kZWZ1bl9wcm8oWyQwXSlBU19SRVFVSVJFKFtfQVNfRVhQUl9QUkVQQVJFXSlbXV9tNF9wb3BkZWYoWyQwXSltNF9pbmRpcihbJDBdbTRfaWYoWyQjXSwgWzBdLCBbXSwgWywkQF0pKVtdX200X2RlZnVuX2VwaShbJDBdKQpUOSwxNTgKbTRfcG9wZGVmbTRfaWYoWyQjXSwgWzBdLCBbWyQwXV0sCiAgICAgICBbJCNdLCBbMV0sIFttNF9pZmRlZihbJDFdLCBbX200X3BvcGRlZihbJDFdKV0sCgkJCSAgICBbbTRfZmF0YWwoWyQwOiB1bmRlZmluZWQgbWFjcm86ICQxXSldKV0sCiAgICAgICBbbTRfbWFwX2FyZ3MoWyQwXSwgJEApXSkKVDIxLDI5Cm00X2xvY2F0aW9uKEFTX1VOU0VUKS4uLy4uL2xpYi9tNHN1Z2FyL200c2gubTQ6NjcxClQxMiwxNTIKX200X3NldF9kdW1wbTRfaWZkZWYoW19tNF9zZXQoWyQxXSldLAoJICBbWyQyXV9tNF9kZWZuKFtfbTRfc2V0KFskMV0pXSlfbTRfcG9wZGVmKFtfbTRfc2V0KFskMV0sXV9tNF9kZWZuKAoJCVtfbTRfc2V0KFskMV0pXSlbKV0sIFtfbTRfc2V0KFskMV0pXSkkMChbJDFdLCBbJDIkM10pXSkKVDE3LDE5NgpBU19TSEVMTF9TQU5JVElaRV9BU19TSEVMTF9TQU5JVElaRQptNF9wcm92aWRlX2lmKFtBU19JTklUXSwgW10sClttNF9wcm92aWRlKFtBU19JTklUXSkKX0FTX0RFVEVDVF9SRVFVSVJFRChbX0FTX1NIRUxMX0ZOX1dPUktdKQpfQVNfREVURUNUX1JFUVVJUkVEKFtfQVNfVEVTVF9YX1dPUktTXSkKX0FTX0RFVEVDVF9CRVRURVJfU0hFTEwKX0FTX1VOU0VUX1BSRVBBUkUKXSkKVDEyLDMyCm00X21ha2VfbGlzdG00X2pvaW4oWywKXSwgbTRfZHF1b3RlX2VsdCgkQCkpClQzMSwyOQptNF9sb2NhdGlvbihfQVNfRUNIT19OX1BSRVBBUkUpLi4vLi4vbGliL200c3VnYXIvbTRzaC5tNDo4MDcKVDI3LDI5Cm00X2xvY2F0aW9uKEFTX0xJTkVOT19QVVNIKS4uLy4uL2xpYi9tNHN1Z2FyL200c2gubTQ6ODk0ClQxMSw0OTgKX0FTX01LRElSX1BjYXNlICRhc19kaXIgaW4gIygKICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7CiAgZXNhYwogIHRlc3QgLWQgIiRhc19kaXIiIHx8IGV2YWwgJGFzX21rZGlyX3AgfHwgewogICAgYXNfZGlycz0KICAgIHdoaWxlIDo7IGRvCiAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAogICAgICAqXCcqKSBhc19xZGlyPWBBU19FQ0hPKFsiJGFzX2RpciJdKSB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7ICMnKAogICAgICAqKSBhc19xZGlyPSRhc19kaXI7OwogICAgICBlc2FjCiAgICAgIGFzX2RpcnM9IickYXNfcWRpcicgJGFzX2RpcnMiCiAgICAgIGFzX2Rpcj1gQVNfRElSTkFNRSgiJGFzX2RpciIpYAogICAgICB0ZXN0IC1kICIkYXNfZGlyIiAmJiBicmVhawogICAgZG9uZQogICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgogIH0gfHwgdGVzdCAtZCAiJGFzX2RpciIgfHwgQVNfRVJST1IoW2Nhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXJdKQoKVDM5LDMwCm00X2xvY2F0aW9uKF9BU19QQVRIX1NFUEFSQVRPUl9QUkVQQVJFKS4uLy4uL2xpYi9tNHN1Z2FyL200c2gubTQ6MTMxNQpUNSw3MwptNF9kb200X2lmKFskI10sIDAsIFtdLAogICAgICAgWyQjXSwgMSwgWyQxW11dLAogICAgICAgWyQxW10kMChtNF9zaGlmdCgkQCkpXSkKRjksNgptNF9zdWJzdHJzdWJzdHIKVDMzLDI5Cm00X2xvY2F0aW9uKF9BU19ERVRFQ1RfU1VHR0VTVEVEKS4uLy4uL2xpYi9tNHN1Z2FyL200c2gubTQ6MTY3ClQxOCw4Cm00X1BBQ0tBR0VfVEFSTkFNRWF1dG9jb25mClQxMywyNTIKbTRfc2V0X3JlbW92ZW00X3NldF9jb250YWlucyhbJDFdLCBbJDJdLCBbX200X3NldF9zaXplKFskMV0sCiAgICBbbTRfZGVjcl0pbTRfaWYoX200X2RlZm4oW19tNF9zZXQoWyQxXSldKSwgWyQyXSwKCQkgICAgW19tNF9wb3BkZWYoW19tNF9zZXQoWyQxXSwkMildLCBbX200X3NldChbJDFdKV0pXSwKCQkgICAgW200X2RlZmluZShbX200X3NldF9jbGVhbnVwKCQxKV0pbTRfZGVmaW5lKAoJCSAgICAgIFtfbTRfc2V0KFskMV0sJDIpXSwgWzBdKV0pJDNdLCBbJDRdKQpUMTksMTA5Cl9tNF9kZWZ1bl9lcGlfb3V0ZXJfbTRfcG9wZGVmKFtfbTRfZGl2ZXJ0X2R1bXBdLCBbX200X2RpdmVydGluZyhbJDFdKV0sIFtfbTRfZGl2ZXJ0aW5nXSltNF9kaXZlcnRfcG9wKFtHUk9XXSltNF91bmRpdmVydChbR1JPV10pClQyNywzMAptNF9sb2NhdGlvbihfQVNfVFJfUFJFUEFSRSkuLi8uLi9saWIvbTRzdWdhci9tNHNoLm00OjE4NzgKVDE1LDU4Cm00X2RpdmVydF9zdGFja200X3N0YWNrX2ZvcmVhY2hfc2VwX2xpZm8oW19tNF9kaXZlcnRfc3RhY2tdLCBbXSwgW10sIFsKXSkKVDE3LDMxCm00X2RlZmF1bHRfcXVvdGVkbTRfaWYoWyQxXSwgW10sIFtbJDJdXSwgW1skMV1dKQpUMTQsMjgKQVNfVkFSX1BVU0hERUZfJDAoWyQxXSwgbTRfZXhwYW5kKFskMl0pKVtdClQxNCwxMzAKQVNfVkFSX1BVU0hERUZfbTRfZGVmdW5fcHJvKFskMF0pQVNfUkVRVUlSRShbX0FTX1RSX1NIX1BSRVBBUkVdKVtdX200X3BvcGRlZihbJDBdKW00X2luZGlyKFskMF1tNF9pZihbJCNdLCBbMF0sIFtdLCBbLCRAXSkpW11fbTRfZGVmdW5fZXBpKFskMF0pClQxOCwyOQptNF9sb2NhdGlvbihBU19JRikuLi8uLi9saWIvbTRzdWdhci9tNHNoLm00OjYzOQpUMzEsMzAKbTRfbG9jYXRpb24oQVNfVkVSU0lPTl9DT01QQVJFKS4uLy4uL2xpYi9tNHN1Z2FyL200c2gubTQ6MTc2NwpGOSw2Cm00X3N5c2NtZHN5c2NtZApUMTEsMTM2Cm00X3NldF9kdW1wbTRfaWZkZWYoW19tNF9zZXRfc2l6ZSgkMSldLAoJICBbX200X3BvcGRlZihbX200X3NldF9zaXplKCQxKV0pXSltNF9pZmRlZihbX200X3NldF9jbGVhbnVwKCQxKV0sCiAgICBbXyQwX2NoZWNrXSwgW18kMF0pKFskMV0sIFtdLCBbJDJdKQpUOSw1OAptNF9pZnZhbG5tNF9pZihbJDFdLAogICAgICAgW10sICAgW200X24oWyQzXSldLAoJICAgICBbbTRfbihbJDJdKV0pClQ3LDAKX19nbnVfXwpUMTAsMjcKbTRfam9pbmFsbFskMl1fJDAoWyQxXSwgbTRfc2hpZnQoJEApKQpUMTEsMgpfQVNfRVNDQVBFXyQxClQ5LDIyCm00X3NoaWZ0Mm00X3NoaWZ0KG00X3NoaWZ0KCRAKSkKVDE4LDgwCm00X2V4cGFuc2lvbl9zdGFja200X3N0YWNrX2ZvcmVhY2hfc2VwX2xpZm8oW18kMF0sIFtfJDBfZW50cnkoXSwgWykKXSltNF9sb2NhdGlvbls6IHRoZSB0b3AgbGV2ZWxdClQ5LDMyCm00X3NoaWZ0M200X3NoaWZ0KG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpClQxNywxNTIKbTRfdmVyc2lvbl9wcmVyZXFtNF9pZihtNF92ZXJzaW9uX2NvbXBhcmUoWzIuNjldLCBbJDFdKSwKCVstMV0sCglbbTRfZGVmYXVsdChbJDNdLAoJCSAgICBbbTRfZmF0YWwoW0F1dG9jb25mIHZlcnNpb24gJDEgb3IgaGlnaGVyIGlzIHJlcXVpcmVkXSwKCQkJICAgICAgWzYzXSldKV0sCglbJDJdKQpUMTYsNTAKX200X2xpc3RfY21wX3Jhd200X2lmKFskMV0sIFskMl0sIFswXSwgW19tNF9saXN0X2NtcF8xKFskMV0sICQyKV0pClQ4LDAKX191bml4X18KVDIwLDMwCm00X2xvY2F0aW9uKEFTX0xOX1MpLi4vLi4vbGliL200c3VnYXIvbTRzaC5tNDoxMjU3ClQxNCwxMDkKbTRfZmlsZV9hcHBlbmRtNF9zeXNjbWQoW2NhdCA+PiQxIDw8X200ZW9mCiQyCl9tNGVvZgpdKQptNF9pZihtNF9zeXN2YWwsIFswXSwgW10sCiAgICAgIFttNF9mYXRhbChbJDA6IGNhbm5vdCB3cml0ZTogJDFdKV0pClQxNSwxNDAKX0FTX1ZBUl9QVVNIREVGX0FTX0xJVEVSQUxfSUYoWyQyXSwgWwkgXVsKXSkoW10sIFthc18kMT1fQVNfVFJfU0hfSU5ESVIoWyQyXSkKbTRfcHVzaGRlZihbJDFdLCBbJGFzX1skMV1dKV0sClttNF9wdXNoZGVmKFskMV0sIFtfQVNfVFJfU0hfTElURVJBTChbJDJdKV0pXSkKVDE1LDQ5Cm00X3JlbmFtZV9mb3JjZW00X2lmZGVmKFskMl0sIFtfbTRfdW5kZWZpbmUoWyQyXSldKW00X3JlbmFtZSgkQCkKVDI4LDMwCm00X2xvY2F0aW9uKEFTX0VYRUNVVEFCTEVfUCkuLi8uLi9saWIvbTRzdWdhci9tNHNoLm00OjEwOTgKVDksMjIyCm00X2JtYXRjaG00X2lmKFskI10sIDAsIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkI10pXSwKICAgICAgIFskI10sIDEsIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkIzogJDFdKV0sCiAgICAgICBbJCNdLCAyLCBbJDJdLAogICAgICAgW200X2lmKG00X2JyZWdleHAoWyQxXSwgWyQyXSksIC0xLCBbJDAoWyQxXSwgbTRfc2hpZnQzKCRAKSldLAoJICAgICAgWyQzXSldKQpUMTAsMjYKQVNfTUtESVJfUGFzX2Rpcj0kMTsgYXNfZm5fbWtkaXJfcFtdClQxMCwxMjQKQVNfTUtESVJfUF9tNF9kZWZ1bl9wcm8oWyQwXSlBU19SRVFVSVJFKFtfJDBfUFJFUEFSRV0pW11fbTRfcG9wZGVmKFskMF0pbTRfaW5kaXIoWyQwXW00X2lmKFskI10sIFswXSwgW10sIFssJEBdKSlbXV9tNF9kZWZ1bl9lcGkoWyQwXSkKVDEzLDMzMwptNF9kaXZlcnRfcG9wbTRfaWYoWyQxXSwgW10sIFtdLAogICAgICAgWyQxXSwgX200X2RlZm4oW19tNF9kaXZlcnRfZGl2ZXJzaW9uXSksIFtdLAogICAgICAgW200X2ZhdGFsKFskMCgkMSk6IGRpdmVyc2lvbiBtaXNtYXRjaDoKXW00X2RpdmVydF9zdGFjayldKV9tNF9wb3BkZWYoW19tNF9kaXZlcnRfc3RhY2tdLCBbX200X2RpdmVydF9kaXZlcnNpb25dKW00X2lmZGVmKFtfbTRfZGl2ZXJ0X2RpdmVyc2lvbl0sIFtdLAoJICAgW200X2ZhdGFsKFt0b28gbWFueSBtNF9kaXZlcnRfcG9wXSldKV9tNF9kaXZlcnRfcmF3KF9tNF9kaXZlcnQoX200X2RlZm4oW19tNF9kaXZlcnRfZGl2ZXJzaW9uXSksIFstXSkpClQxNiwxNjkKX0FTX0VYUFJfUFJFUEFSRV9tNF9kZWZ1bl9wcm8oWyQwXSlpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgogICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgogIGFzX2V4cHI9ZXhwcgplbHNlCiAgYXNfZXhwcj1mYWxzZQpmaQpbXV9tNF9kZWZ1bl9lcGkoWyQwXSkKVDE5LDk1Cl9BU19ERVRFQ1RfUkVRVUlSRURfbTRfZGVmdW5fcHJvKFskMF0pbTRfc2V0X2FkZChbX0FTX0RFVEVDVF9SRVFVSVJFRF9CT0RZXSwgWyQxIHx8IEFTX0VYSVRdKVtdX200X2RlZnVuX2VwaShbJDBdKQpUMTAsMTIxCm00X3JlX3dvcmRbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9dW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfMDEyMzQ1Njc4OV0qClQyNiwyOQptNF9sb2NhdGlvbihBU19TRVRfU1RBVFVTKS4uLy4uL2xpYi9tNHN1Z2FyL200c2gubTQ6NjQ5ClQxNCwzNwptNF9QQUNLQUdFX1VSTGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvY29uZi8KVDExLDYyCm00X2NyX2FsbnVtYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0NTY3ODkKVDEyLDcxCkFTX0NPUFlSSUdIVG00X2RpdmVydF90ZXh0KFtIRUFERVItQ09QWVJJR0hUXSwKW200X2JwYXRzdWJzdChbCiQxXSwgW15dLCBbQCU6QCBdKV0pCkYxMSw4Cm00X3RyYW5zbGl0dHJhbnNsaXQKVDE0LDExMAptNF9kaXZlcnRfcHVzaG00X2RpdmVydF9zdGFja19wdXNoKFskMF0sIFskMV0pbTRfcHVzaGRlZihbX200X2RpdmVydF9kaXZlcnNpb25dLCBbJDFdKV9tNF9kaXZlcnRfcmF3KF9tNF9kaXZlcnQoWyQxXSwgWyQyXSkpClQ4LDg3Cm00X2ZhdGFsbTRfZXJycHJpbnRuKG00X2xvY2F0aW9uWzogZXJyb3I6ICQxXQptNF9leHBhbnNpb25fc3RhY2spbTRfZXhpdChtNF9pZihbJDJdLCwgMSwgWyQyXSkpCkY4LDUKbTRfaWZkZWZpZmRlZgpUMTYsMjI1Cl9BU19MSU5FTk9fV09SS1MgIGFzX2xpbmVub18xPSRMSU5FTk8gYXNfbGluZW5vXzFhPSRMSU5FTk8KICBhc19saW5lbm9fMj0kTElORU5PIGFzX2xpbmVub18yYT0kTElORU5PCiAgZXZhbCAndGVzdCAieCRhc19saW5lbm9fMSckYXNfcnVuJyIgIT0gIngkYXNfbGluZW5vXzInJGFzX3J1biciICYmCiAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSckYXNfcnVuJyArIDFgIiA9ICJ4JGFzX2xpbmVub18yJyRhc19ydW4nIicKVDcsMjAKbTRfd3JhcF9tNF93cmFwKFtdLCBbJDFbXV0pClQxNiw5Cl9BU19URVNUX1hfV09SS1N0ZXN0IC14IC8KVDEyLDExMApfbTRfc2V0X3NpemVtNF9kZWZpbmUoW19tNF9zZXRfc2l6ZSgkMSldLAoJICAgbTRfaWZkZWYoW19tNF9zZXRfc2l6ZSgkMSldLCBbJDIobTRfaW5kaXIoW19tNF9zZXRfc2l6ZSgkMSldKSldLAoJCSAgICBbMV0pKQpUNiw0MwptNF9tYXBfbTRfZm9yZWFjaChbX200X2FwcGx5KFskMV0sXSwgWyldLCBbXSwgJDIpClQxMCw1NAptNF9pbmNsdWRlbTRfaW5jbHVkZV91bmlxdWUoWyQxXSlkbmwKbTRfYnVpbHRpbihbaW5jbHVkZV0sIFskMV0pClQxNywxMzYKX0FTX0JBU0VOQU1FX0VYUFJfbTRfZGVmdW5fcHJvKFskMF0pJGFzX2V4cHIgWC9bXSQxIDogJy4qL1woW1teL11bXi9dKl1cKS8qJCcgXHwgXAoJIFhbXSQxIDogJ1hcKC8vXCkkJyBcfCBcCgkgWFtdJDEgOiAnWFwoL1wpJyBcfCAuW11fbTRfZGVmdW5fZXBpKFskMF0pClQ4LDExNQpBU19FUlJPUmFzX2ZuX2Vycm9yIG00X2RlZmF1bHQoWyQyXSwgWyQ/XSkgIl9BU19RVU9URShbJDFdKSJtNF9pZnZhbChBU19NRVNTQUdFX0xPR19GRCwKICBbICIkTElORU5PIiBBU19NRVNTQUdFX0xPR19GRF0pW10KVDgsMTg3CkFTX0VSUk9SX200X2RlZnVuX3BybyhbJDBdKW00X2FwcGVuZF91bmlxKFtfQVNfQ0xFQU5VUF0sCiAgW200X2RpdmVydF90ZXh0KFtNNFNILUlOSVQtRk5dLCBbX0FTX0VSUk9SX1BSRVBBUkVbXV0pXSlbXV9tNF9wb3BkZWYoWyQwXSltNF9pbmRpcihbJDBdbTRfaWYoWyQjXSwgWzBdLCBbXSwgWywkQF0pKVtdX200X2RlZnVuX2VwaShbJDBdKQpUOCwxODkKbTRfc3BsaXRtNF9pZihbJDFdLCBbXSwgW10sCiAgICAgICBbJDJdLCBbIF0sIFttNF9pZihtNF9pbmRleChbJDFdLCBbIF0pLCBbLTFdLCBbW1skMV1dXSwKCQkJIFtfJDAoWyQxXSwgWyQyXSwgWywgXSldKV0sCiAgICAgICBbJDJdLCBbXSwgW18kMChbJDFdLCBbWwkgXStdLCBbLCBdKV0sCiAgICAgICBbXyQwKFskMV0sIFskMl0sIFssIF0pXSkKVDYsMTkwCm00X21pbm00X2lmKFskI10sIFswXSwgW200X2ZhdGFsKFt0b28gZmV3IGFyZ3VtZW50cyB0byAkMF0pXSwKICAgICAgIFskI10sIFsxXSwgW200X2V2YWwoWyQxXSldLAogICAgICAgWyQjJDFdLCBbMiQyXSwgW200X2V2YWwoWyQxXSldLAogICAgICAgWyQjXSwgWzJdLCBbXyQwKCRAKV0sCiAgICAgICBbX200X21pbm1heChbXyQwXSwgJEApXSkKRjE0LDExCm00X2NoYW5nZXF1b3RlY2hhbmdlcXVvdGUKVDE3LDIKX0FTX0xJVEVSQUxfSUZfTk8kMgpUMjYsMQpfbTRfZGl2ZXJ0KEhFQURFUi1DT01NRU5UKTIKVDEwLDU0Cm00X2lmYmxhbmttNF9pZihtNF90cmFuc2xpdChbWyQxXV0sICBbIF1bCV1bCl0pLCBbXSwgWyQyXSwgWyQzXSkKVDE0LDE2NgptNF9jbGVhcmRpdmVydG00X2lmKFskI10sIFswXSwgW200X2ZhdGFsKFskMDogbWlzc2luZyBhcmd1bWVudF0pXSwKICAgICAgIFtfbTRfZGl2ZXJ0X3JhdyhbLTFdKW00X3VuZGl2ZXJ0KCRAKV9tNF9kaXZlcnRfcmF3KAoJIF9tNF9kaXZlcnQoX200X2RlZm4oW19tNF9kaXZlcnRfZGl2ZXJzaW9uXSksIFstXSkpXSkKVDE4LDIwNgpfbTRfdGV4dF93cmFwX3dvcmRtNF9kZWZpbmUoW200X0N1cnNvcl0sIG00X2V2YWwobTRfQ3Vyc29yICsgbTRfcWxlbihbJDFdKSArIDEpKW00X2lmKG00X2V2YWwobTRfQ3Vyc29yID4gKFskM10pKSwKICAgICAgWzFdLCBbbTRfZGVmaW5lKFttNF9DdXJzb3JdLCBtNF9ldmFsKG00X0luZGVudCArIG00X3FsZW4oWyQxXSkgKyAxKSkKWyQyXV0sCiAgICAgIFttNF9TZXBhcmF0b3JbXV0pWyQxXQpUMTgsMTYwMQpfQVNfU0hFTExfU0FOSVRJWkVfbTRfZGVmdW5fcHJvKFskMF0pbTRfcHVzaGRlZihbQVNfRVhJVF0sIFtleGl0IG00X2RlZmF1bHQoXW00X2RxdW90ZShbJF1bMV0pWywgMSldKW00X3RleHRfYm94KFtNNHNoIEluaXRpYWxpemF0aW9uLl0pCgpBU19CT1VSTkVfQ09NUEFUSUJMRQpfQVNfRUNIT19QUkVQQVJFCl9BU19QQVRIX1NFUEFSQVRPUl9QUkVQQVJFCgojIElGUwojIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcwojIHRoZXJlIHRvIHByZXZlbnQgZWRpdG9ycyBmcm9tIGNvbXBsYWluaW5nIGFib3V0IHNwYWNlLXRhYi4KIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkCiMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKSUZTPSIgIiIJJGFzX25sIgoKIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KYXNfbXlzZWxmPQpjYXNlICRbMF0gaW4gQCU6QCgoCiAgKltbXFwvXV0qICkgYXNfbXlzZWxmPSRbMF0gOzsKICAqKSBfQVNfUEFUSF9XQUxLKFtdLAoJCSAgIFt0ZXN0IC1yICIkYXNfZGlyLyRbMF0iICYmIGFzX215c2VsZj0kYXNfZGlyLyRbMF0gJiYgYnJlYWtdKQogICAgIDs7CmVzYWMKIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJwojIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KaWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgogIGFzX215c2VsZj0kWzBdCmZpCmlmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KICBBU19FQ0hPKFsiJGFzX215c2VsZjogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUiXSkgPiYyCiAgQVNfRVhJVApmaQoKIyBVbnNldCB2YXJpYWJsZXMgdGhhdCB3ZSBkbyBub3QgbmVlZCBhbmQgd2hpY2ggY2F1c2UgYnVncyAoZS5nLiBpbgojIHByZS0zLjAgVVdJTiBrc2gpLiAgQnV0IGRvIG5vdCBjYXVzZSBidWdzIGluIGJhc2ggMi4wMTsgdGhlICJ8fCBleGl0IDEiCiMgc3VwcHJlc3NlcyBhbnkgIlNlZ21lbnRhdGlvbiBmYXVsdCIgbWVzc2FnZSB0aGVyZS4gICcoKCcgY291bGQKIyB0cmlnZ2VyIGEgYnVnIGluIHBka3NoIDUuMi4xNC4KZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYgTUFJTCBNQUlMUEFUSApkbyBldmFsIHRlc3QgeFwkeyRhc192YXIrc2V0fSA9IHhzZXQgXAogICYmICggKHVuc2V0ICRhc192YXIpIHx8IGV4aXQgMSkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0ICRhc192YXIgfHwgOgpkb25lClBTMT0nJCAnClBTMj0nPiAnClBTND0nKyAnCgojIE5MUyBudWlzYW5jZXMuCkxDX0FMTD1DCmV4cG9ydCBMQ19BTEwKTEFOR1VBR0U9QwpleHBvcnQgTEFOR1VBR0UKCiMgQ0RQQVRILgoodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICl9tNF9wb3BkZWYoW0FTX0VYSVRdKVtdX200X2RlZnVuX2VwaShbJDBdKQpUNyw0OAptNF9xbGVubTRfaWZkZWYoWyQwLSQxXSwgW19tNF9kZWZuKFskMC1dXSwgW18kMChdKVskMV0pClQ2LDE5MAptNF9tYXhtNF9pZihbJCNdLCBbMF0sIFttNF9mYXRhbChbdG9vIGZldyBhcmd1bWVudHMgdG8gJDBdKV0sCiAgICAgICBbJCNdLCBbMV0sIFttNF9ldmFsKFskMV0pXSwKICAgICAgIFskIyQxXSwgWzIkMl0sIFttNF9ldmFsKFskMV0pXSwKICAgICAgIFskI10sIFsyXSwgW18kMCgkQCldLAogICAgICAgW19tNF9taW5tYXgoW18kMF0sICRAKV0pCkYxMSw4Cm00X2VycnByaW50ZXJycHJpbnQKVDEwLDEzNwpfbTRfZGl2ZXJ0bTRfaWZkZWYoW19tNF9kaXZlcnQoJDEpXSwKCSAgW200X2luZGlyKFtfbTRfZGl2ZXJ0KCQxKV0pXSwKCSAgW200X2lmKFskMl0sIFtdLCBbbTRfd2Fybihbc3ludGF4XSwKCSAgICAgW3ByZWZlciBuYW1lZCBkaXZlcnNpb25zXSldKSQxXSkKVDEzLDI2Cm00X2NyX0xFVFRFUlNBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpUMTUsMjcyCl9BU19ESVJOQU1FX1NFRF9tNF9kZWZ1bl9wcm8oWyQwXSlBU19FQ0hPKFtYW10kMV0pIHwKICAgIHNlZCBbJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQvewoJICAgIHMvL1wxLwoJICAgIHEKCSAgfQoJICAvXlhcKFwvXC9cKVteL10uKi97CgkgICAgcy8vXDEvCgkgICAgcQoJICB9CgkgIC9eWFwoXC9cL1wpJC97CgkgICAgcy8vXDEvCgkgICAgcQoJICB9CgkgIC9eWFwoXC9cKS4qL3sKCSAgICBzLy9cMS8KCSAgICBxCgkgIH0KCSAgcy8uKi8uLzsgcSddW11fbTRfZGVmdW5fZXBpKFskMF0pClQxNyw5NApfbTRfc3RhY2tfcmV2ZXJzZW00X2lmZGVmKFskMV0sIFttNF9wdXNoZGVmKFskMl0sCiAgX200X2RlZm4oWyQxXSkpJDNbXV9tNF9wb3BkZWYoWyQxXSkkMChbJDFdLCBbJDJdLCBbJDQkM10pXSkKVDE2LDEwMwpBU19JREVOVElGSUVSX0lGbTRfaWYoXyQwKG00X2lmKG00X2luZGV4KFskMV0sIFtAXSksIFstMV0sCiAgW1skMV1dLCBbbTRfYnBhdHN1YnN0KFtbJDFdXSwgW0AmdEBdKV0pKSwgWy1dLCBbJDJdLCBbJDNdKQpGMTEsNwptNF9tYWtldGVtcG1rc3RlbXAKVDE3LDEyOQpfQVNfREVURUNUX0VYUEFORCQxPSJtNF9icGF0c3Vic3QobTRfZHF1b3RlKEFTX0VTQ0FQRShfbTRfZXhwYW5kKG00X3NldF9jb250ZW50cyhbJDJdLCBbCl0pKSkpLCBbXFxcJExJTkVOT1woLipcKSRdLCBbIjskMT0kJDEkTElORU5POyQxPSQkMSJcMV0pIgpUNCwzNwptNF9ubTRfaWYoWyQxXSwKICAgICAgIFtdLCBbXSwKCSAgIFskMQpdKQpUMjYsMjkKbTRfbG9jYXRpb24oQVNfTElORU5PX1BPUCkuLi8uLi9saWIvbTRzdWdhci9tNHNoLm00OjkwNApUOCwyMgpBU19UUl9TSF8kMChtNF9leHBhbmQoWyQxXSkpW10KVDgsMTI0CkFTX1RSX1NIX200X2RlZnVuX3BybyhbJDBdKUFTX1JFUVVJUkUoW18kMF9QUkVQQVJFXSlbXV9tNF9wb3BkZWYoWyQwXSltNF9pbmRpcihbJDBdbTRfaWYoWyQjXSwgWzBdLCBbXSwgWywkQF0pKVtdX200X2RlZnVuX2VwaShbJDBdKQpUMTAsMTU0Cm00X3Byb3ZpZGVtNF9pZmRlZihbbTRfcHJvdmlkZSgkMSldLCBbXSwKW200X3NldF9hZGQoW19tNF9wcm92aWRlXSwgWyQxXSwgW200X2RlZmluZShbbTRfcHJvdmlkZSgkMSldLAogIG00X2lmZGVmKFtfbTRfZGl2ZXJ0aW5nXSwgW19tNF9kZWZuKFtfbTRfZGl2ZXJ0aW5nXSldKSldKV0pClQxMywxMDAKQVNfTElORU5PX1BPUF9tNF9kZWZ1bl9wcm8oWyQwXSlldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm9bXV9tNF9kZWZ1bl9lcGkoWyQwXSkKVDExLDY1Cm00X3NldF9zaXplbTRfaWZkZWYoW19tNF9zZXRfc2l6ZSgkMSldLCBbbTRfaW5kaXIoW19tNF9zZXRfc2l6ZSgkMSldKV0sIFswXSkKVDksMAptNF9pZ25vcmUKVDksMjgKX200X3F1b3RlbTRfaWYoWyQjXSwgWzBdLCBbXSwgW1skKl1dKQpUMjEsMzAKbTRfbG9jYXRpb24oQVNfVFJfU0gpLi4vLi4vbGliL200c3VnYXIvbTRzaC5tNDoxODI2ClQ5LDM1Cm00X3NoaWZ0bm00X2Fzc2VydCgwIDwgJDEgJiYgJDEgPCAkIylfJDAoJEApClQ3LDc1Cm00X3dhcm5fbTRfd2FybihbJDFdLCBbJDJdLAptNF9pZmRlZihbX200X2V4cGFuc2lvbl9zdGFja10sIFttNF9leHBhbnNpb25fc3RhY2tdKSkKVDE2LDI0NQptNF9jcl9ub3RfZGlnaXRzAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMqJSYnKCkkKywuLzo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/y0KVDEyLDI1Cm00X3NldF9saXN0Y200X3NldF9tYXBfc2VwKFskMV0sIFssXSkKRjksNgptNF9kaXZudW1kaXZudW0KVDMwLDMwCm00X2xvY2F0aW9uKEFTX0lOSVRfR0VORVJBVEVEKS4uLy4uL2xpYi9tNHN1Z2FyL200c2gubTQ6MjEyMQpUMjEsNzYKX200X3NldF9hZGRfYWxsX2NoZWNrbTRfaWYoWyQjXSwgWzJdLCBbXSwKICAgICAgIFttNF9zZXRfYWRkKFskMV0sIFskM10pJDAoWyQxXSwgbTRfc2hpZnQyKCRAKSldKQpUMjQsMQpfbTRfZGl2ZXJ0KE00U0gtSU5JVC1GTik1ClQxMCw5MQpBU19WQVJfU0VUQVNfTElURVJBTF9XT1JEX0lGKFskMV0sCgkgICAgICAgWyQxPSQyXSwKCSAgICAgICBbZXZhbCAiJDE9X0FTX0VTQ0FQRShbJDJdLCBbYF0sIFtcIiRdKSJdKQpUMTAsMwptNF9uZXdsaW5lCiQxClQxMywyOTMKbTRfZGVmdW5fb25jZW00X2RlZmluZShbbTRfbG9jYXRpb24oJDEpXSwgbTRfbG9jYXRpb24pbTRfZGVmaW5lKFskMV0sIFtfbTRfZGVmdW5fb25jZShbJDFdLCBbJDJdLCBtNF9pZihfbTRfZGl2ZXJ0X2R1bXAsIFtdLAogIFtbX200X2RlZnVuX3BybyhbJDFdKW00X3VucXVvdGUoXSwgWylfbTRfZGVmdW5fZXBpKFskMV0pXV0sCm00X2lmZGVmKFtfbTRfZGl2ZXJ0aW5nKFskMV0pXSwgWy1dKSwgWy1dLCBbW200X3VucXVvdGUoXSwgWyldXSwKICBbW19tNF9yZXF1aXJlX2NhbGwoWyQxXSxdLCBbLCBfbTRfZGl2ZXJ0X2R1bXApXV0pKV0pClQxMyw0NzQKX200X3RleHRfd3JhcG00X3B1c2hkZWYoW200X0luZGVudF0sIG00X3FsZW4oWyQyXSkpbTRfcHVzaGRlZihbbTRfQ3Vyc29yXSwgbTRfcWxlbihbJDNdKSltNF9wdXNoZGVmKFttNF9TZXBhcmF0b3JdLCBbbTRfZGVmaW5lKFttNF9TZXBhcmF0b3JdLCBbIF0pXSlbJDNdbTRfY29uZChbbTRfQ3Vyc29yXSwgbTRfSW5kZW50LCBbXSwKCSAgICAgIFttNF9ldmFsKG00X0N1cnNvciA+IG00X0luZGVudCldLCBbMV0sIFsKWyQyXW00X2RlZmluZShbbTRfQ3Vyc29yXSwgbTRfSW5kZW50KV0sCgkgICAgICBbbTRfZm9ybWF0KFslKnNdLCBtNF9tYXgoWzBdLAogIG00X2V2YWwobTRfSW5kZW50IC0gbTRfQ3Vyc29yKSksIFtdKW00X2RlZmluZShbbTRfQ3Vyc29yXSwgbTRfSW5kZW50KV0pbTRfbWFwX2FyZ3NfdyhbJDFdLCBbJDBfd29yZChdLCBbLCBbJDJdLCBbJDRdKV0pX200X3BvcGRlZihbbTRfU2VwYXJhdG9yXSwgW200X0N1cnNvcl0sIFttNF9JbmRlbnRdKQpUMjEsMzQyCl9BU19CT1VSTkVfQ09NUEFUSUJMRUFTX0lGKFt0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjFdLAogW2VtdWxhdGUgc2gKICBOVUxMQ01EPToKICBbI10gUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkW0BdIn0sIHdoaWNoCiAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KICBhbGlhcyAtZyAnJHsxKyIkW0BdIn0nPSciJFtAXSInCiAgc2V0b3B0IE5PX0dMT0JfU1VCU1RdLAogW0FTX0NBU0UoW2Aoc2V0IC1vKSAyPi9kZXYvbnVsbGBdLCBbKnBvc2l4Kl0sIFtzZXQgLW8gcG9zaXhdKV0pCgpUMTUsOTkKX0FTX0xJVEVSQUxfSUZfbTRfaWYobTRfdHJhbnNsaXQoWyQxXSwgWytdKSwgW10sIFskMFlFU10sCiAgICAgICBtNF90cmFuc2xpdChbJDFdLCBbJF0pLCBbXSwgW200X2RlZmF1bHRdLCBbJDBOT10pCkY5LDYKbTRfZm9ybWF0Zm9ybWF0CkYxMCw3Cm00X21rc3RlbXBta3N0ZW1wCkYxMSwxMQpfX3Byb2dyYW1fX19fcHJvZ3JhbV9fClQ2LDI2CkFTX0JPWF8kMChtNF9leHBhbmQoWyQxXSksIFskMl0pClQ3LDE1NgptNF9kZWZubTRfaWYoWyQjXSwgWzBdLCBbWyQwXV0sCiAgICAgICBbJCNdLCBbMV0sIFttNF9pZmRlZihbJDFdLCBbX200X2RlZm4oWyQxXSldLAoJCQkgICAgW200X2ZhdGFsKFskMDogdW5kZWZpbmVkIG1hY3JvOiAkMV0pXSldLAogICAgICAgW200X21hcF9hcmdzKFskMF0sICRAKV0pClQxMSw1NDQKX0FTX1BSRVBBUkVfbTRfZGVmdW5fcHJvKFskMF0pbTRfcHVzaGRlZihbQVNfUkVRVUlSRV0pbTRfcHVzaGRlZihbQVNfUkVRVUlSRV9TSEVMTF9GTl0sIF9tNF9kZWZuKFtfQVNfUkVRVUlSRV9TSEVMTF9GTl0pCiltNF9wdXNoZGVmKFtBU19NRVNTQUdFX0xPR19GRF0sIFstMV0pX0FTX0VSUk9SX1BSRVBBUkUKX200X3BvcGRlZihbQVNfTUVTU0FHRV9MT0dfRkRdKV9BU19FWElUX1BSRVBBUkUKX0FTX1VOU0VUX1BSRVBBUkUKX0FTX1ZBUl9BUFBFTkRfUFJFUEFSRQpfQVNfVkFSX0FSSVRIX1BSRVBBUkUKCl9BU19FWFBSX1BSRVBBUkUKX0FTX0JBU0VOQU1FX1BSRVBBUkUKX0FTX0RJUk5BTUVfUFJFUEFSRQpfQVNfTUVfUFJFUEFSRQpfQVNfQ1JfUFJFUEFSRQpfQVNfRUNIT19OX1BSRVBBUkUKX0FTX0xOX1NfUFJFUEFSRQpfQVNfTUtESVJfUF9QUkVQQVJFCl9BU19URVNUX1BSRVBBUkUKX0FTX1RSX0NQUF9QUkVQQVJFCl9BU19UUl9TSF9QUkVQQVJFCl9tNF9wb3BkZWYoW0FTX1JFUVVJUkVdLCBbQVNfUkVRVUlSRV9TSEVMTF9GTl0pW11fbTRfZGVmdW5fZXBpKFskMF0pClQxNiw1NAptNF9hcHBlbmRfdW5pcV93bTRfbWFwX2FyZ3NfdyhbJDJdLCBbX200X2FwcGVuZF91bmlxKFskMV0sXSwgWywgWyBdKV0pClQxMywyMDcKbTRfbWFwX2FyZ3Nfd18kMChfbTRfc3BsaXQoWyBdbTRfZmxhdHRlbihbJDFdKVsgXSwgW1sJIF0rXSwKCSAgICAgICBtNF9pZihtNF9pbmRleChbJDIkMyQ0XSwgW1xdKSwgWy0xXSwgW1skM1tdJDRbXSQyXV0sCgkJICAgICBbbTRfYnBhdHN1YnN0KFtbJDNbXSQ0W10kMl1dLCBbXFxdLCBbXFxcXF0pXSkpLAogICAgIG00X2xlbihbW10kM1tdJDRdKSwgbTRfbGVuKFskNFtdJDJbXV0pKQpUNiw0Cm00X2NhclskMV0KVDgsMgptNF9jb3VudCQjClQxNCw0MgpfbTRfZGVmdW5fb25jZW00X3B1c2hkZWYoWyQxXSkkM1skMltdbTRfcHJvdmlkZShbJDFdKV0kNApUMTYsMTM0NgpfQVNfRUNIT19QUkVQQVJFX200X2RlZnVuX3BybyhbJDBdKVthc19ubD0nCicKZXhwb3J0IGFzX25sCiMgUHJpbnRpbmcgYSBsb25nIHN0cmluZyBjcmFzaGVzIFNvbGFyaXMgNyAvdXNyL2Jpbi9wcmludGYuCmFzX2VjaG89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCmFzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobwphc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobwojIFByZWZlciBhIGtzaCBzaGVsbCBidWlsdGluIG92ZXIgYW4gZXh0ZXJuYWwgcHJpbnRmIHByb2dyYW0gb24gU29sYXJpcywKIyBidXQgd2l0aG91dCB3YXN0aW5nIGZvcmtzIGZvciBiYXNoIG9yIHpzaC4KaWYgdGVzdCAteiAiJEJBU0hfVkVSU0lPTiRaU0hfVkVSU0lPTiIgXAogICAgJiYgKHRlc3QgIlhgcHJpbnQgLXIgLS0gJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgogIGFzX2VjaG89J3ByaW50IC1yIC0tJwogIGFzX2VjaG9fbj0ncHJpbnQgLXJuIC0tJwplbGlmICh0ZXN0ICJYYHByaW50ZiAlcyAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCiAgYXNfZWNobz0ncHJpbnRmICVzXG4nCiAgYXNfZWNob19uPSdwcmludGYgJXMnCmVsc2UKICBpZiB0ZXN0ICJYYCgvdXNyL3VjYi9lY2hvIC1uIC1uICRhc19lY2hvKSAyPi9kZXYvbnVsbGAiID0gIlgtbiAkYXNfZWNobyI7IHRoZW4KICAgIGFzX2VjaG9fYm9keT0nZXZhbCAvdXNyL3VjYi9lY2hvIC1uICIkXVsxJGFzX25sIicKICAgIGFzX2VjaG9fbj0nL3Vzci91Y2IvZWNobyAtbicKICBlbHNlCiAgICBhc19lY2hvX2JvZHk9J2V2YWwgZXhwciAiWCRdWzEiIDogIlhcXCguKlxcKSInCiAgICBhc19lY2hvX25fYm9keT0nZXZhbAogICAgICBhcmc9JF1bMTsKICAgICAgY2FzZSAkYXJnIGluIEAlOkAoCiAgICAgICoiJGFzX25sIiopCglleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpJGFzX25sIjsKCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7CiAgICAgIGVzYWM7CiAgICAgIGV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkiIHwgdHIgLWQgIiRhc19ubCIKICAgICcKICAgIGV4cG9ydCBhc19lY2hvX25fYm9keQogICAgYXNfZWNob19uPSdzaCAtYyAkYXNfZWNob19uX2JvZHkgYXNfZWNobycKICBmaQogIGV4cG9ydCBhc19lY2hvX2JvZHkKICBhc19lY2hvPSdzaCAtYyAkYXNfZWNob19ib2R5IGFzX2VjaG8nCmZpCl1bXV9tNF9kZWZ1bl9lcGkoWyQwXSkKVDE3LDE2NApfQVNfVU5TRVRfUFJFUEFSRV9tNF9kZWZ1bl9wcm8oWyQwXSlBU19GVU5DVElPTl9ERVNDUklCRShbYXNfZm5fdW5zZXRdLCBbVkFSXSwgW1BvcnRhYmx5IHVuc2V0IFZBUi5dKQphc19mbl91bnNldCAoKQp7CiAgQVNfVU5TRVQoWyRbMV1dKQp9CmFzX3Vuc2V0PWFzX2ZuX3Vuc2V0W11fbTRfZGVmdW5fZXBpKFskMF0pClQxNCw2MgptNF9zZXRfZm9yZWFjaG00X3B1c2hkZWYoWyQyXSltNF9zZXRfbWFwX3NlcChbJDFdLCBbbTRfZGVmaW5lKFskMl0sXSwgWykkM10pClQxNiwxMDEKbTRfc3RhY2tfZm9yZWFjaF9tNF9zdGFja19yZXZlcnNlKFskMV0sIFttNF90bXAtJDFdKV9tNF9zdGFja19yZXZlcnNlKFttNF90bXAtJDFdLCBbJDFdLCBbJDIoX200X2RlZm4oW200X3RtcC0kMV0pKV0pClQxMiw3NwptNF9jaG9tcF9hbGxtNF9mb3JtYXQoW1slLipzXV0sIG00X2JyZWdleHAobTRfdHJhbnNsaXQoW1skMV1dLCBbCi9dLCBbLyBdKSwgWy8qJF0pLCBbJDFdKQpUNiw0NgptNF9jbXBtNF9ldmFsKCgoWyQxXSkgPiAoWyQyXSkpIC0gKChbJDFdKSA8IChbJDJdKSkpClQ5LDM3MwpBU19UTVBESVIjIENyZWF0ZSBhIChzZWN1cmUpIHRtcCBkaXJlY3RvcnkgZm9yIHRtcCBmaWxlcy4KbTRfaWYoWyQyXSwgW10sIFs6ICIke1RNUERJUjo9L3RtcH0iXSkKewogIHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIm00X2RlZmF1bHQoWyQyXSwKICAgIFskVE1QRElSXSkvJDFYWFhYWFgiKSAyPi9kZXYvbnVsbGAgJiYKICB0ZXN0IC1kICIkdG1wIgp9ICB8fAp7CiAgdG1wPW00X2RlZmF1bHQoWyQyXSwgWyRUTVBESVJdKS8kMSQkLSRSQU5ET00KICAodW1hc2sgMDc3ICYmIG1rZGlyICIkdG1wIikKfSB8fCBBU19FUlJPUihbY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gbTRfZGVmYXVsdChbJDJdLAoJICAgICAgWyRUTVBESVJdKV0pClQxNyw1MQpfQVNfRUNIT19VTlFVT1RFREFTX0VDSE8oWyIkMSJdKSA+Jm00X2RlZmF1bHQoWyQyXSwgW0FTX01FU1NBR0VfRkRdKQpUMjAsOTYKX0FTX0RFVEVDVF9TVUdHRVNURURfbTRfZGVmdW5fcHJvKFskMF0pbTRfc2V0X2FkZChbX0FTX0RFVEVDVF9TVUdHRVNURURfQk9EWV0sIFskMSB8fCBBU19FWElUXSlbXV9tNF9kZWZ1bl9lcGkoWyQwXSkKVDE3LDU3CkFTX0xJTkVOT19QUkVQQVJFX200X2RlZnVuX3BybyhbJDBdKUFTX1JFUVVJUkUoW18kMF0pW11fbTRfZGVmdW5fZXBpKFskMF0pCkY1LDYKbTRfaWZpZmVsc2UKVDksMzYKbTRfcmVuYW1lbTRfY29weShbJDFdLCBbJDJdKW00X3VuZGVmaW5lKFskMV0pCkY4LDUKbTRfaW5kaXJpbmRpcgpUMTIsMQpfbTRfZGl2ZXJ0KCkwClQzMSwzMAptNF9sb2NhdGlvbihfQVNfVFJfQ1BQX1BSRVBBUkUpLi4vLi4vbGliL200c3VnYXIvbTRzaC5tNDoxODQ1CkYxMiw5Cm00X2NoYW5nZWNvbWNoYW5nZWNvbQpUMjAsNDAKX0FTX1ZBUl9BUFBFTkRfV09SS1Nhc192YXI9MTsgYXNfdmFyKz0yOyB0ZXN0IHgkYXNfdmFyID0geDEyClQxMCw2MgptNF9ub3F1b3RlbTRfY2hhbmdlcXVvdGUoWy09PHsoXSxbKX0+PS1dKSQxLT08eygpfT49LW00X2NoYW5nZXF1b3RlKFssXSkKVDEzLDQyCkFTX1ZBUl9TRVRfSUZBU19JRihbQVNfVkFSX1RFU1RfU0VUKFskMV0pXSwgWyQyXSwgWyQzXSkKRjgsNQptNF9pbmRleGluZGV4ClQxNCw1OApfbTRfbWFwX2FyZ3Nfd200X3N1YnN0cihbJDFdLCBbJDJdLCBtNF9ldmFsKG00X2xlbihbJDFdKSAtIFskMl0gLSBbJDNdKSkKVDcsOTgKX0FTX1JVTm00X2lmdmFsKFskMl0sIFt7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiJDEgfCBhc19ydW49YSAkMjsgfV0sCgkJWyhldmFsICQxKV0pIDI+L2Rldi9udWxsClQxNCwxMDcKbTRfc2V0X21hcF9zZXBtNF9pZmRlZihbX200X3NldF9jbGVhbnVwKCQxKV0sIFtfbTRfc2V0X2NvbnRlbnRzXzFjXSwKCSAgW19tNF9zZXRfY29udGVudHNfMV0pKFskMV0pX200X3NldF9jb250ZW50c18yKCRAKQpUOSwxNzQKbTRfZXhwYW5kbTRfcHVzaGRlZihbbTRfZGl2ZXJ0XSwgX200X2RlZm4oW19tNF9kaXZlcnRfdW5zYWZlXSkpbTRfcHVzaGRlZihbbTRfZGl2ZXJ0X3B1c2hdLCBfbTRfZGVmbihbX200X2RpdmVydF91bnNhZmVdKSltNF9jaG9tcChfJDAoWyQxCl0pKV9tNF9wb3BkZWYoW200X2RpdmVydF0sIFttNF9kaXZlcnRfcHVzaF0pClQxOSwzMzYKX0FTX01LRElSX1BfUFJFUEFSRV9tNF9kZWZ1bl9wcm8oWyQwXSlBU19SRVFVSVJFX1NIRUxMX0ZOKFthc19mbl9ta2Rpcl9wXSwKICBbQVNfRlVOQ1RJT05fREVTQ1JJQkUoW2FzX2ZuX21rZGlyX3BdLCBbXSwKICAgIFtDcmVhdGUgIiRhc19kaXIiIGFzIGEgZGlyZWN0b3J5LCBpbmNsdWRpbmcgcGFyZW50cyBpZiBuZWNlc3NhcnkuXSldLApbCiAgX0FTX01LRElSX1AKXSlpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCiAgYXNfbWtkaXJfcD0nbWtkaXIgLXAgIiRhc19kaXIiJwplbHNlCiAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKICBhc19ta2Rpcl9wPWZhbHNlCmZpCltdX200X2RlZnVuX2VwaShbJDBdKQpUMTcsMjI5Cm00X2NyX25vdF9MRVRURVJTAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMqJSYnKCkkKywuLzAxMjM0NTY3ODk6Ozw9Pj9AW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3N3e3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX29/j5+vv8/f7/LQpUMTgsMjU2Cl9tNF9zZXRfZHVtcF9jaGVja200X2lmZGVmKFtfbTRfc2V0KFskMV0pXSwKCSAgW200X3NldF9jb250YWlucyhbJDFdLCBfbTRfZGVmbihbX200X3NldChbJDFdKV0pLAoJCQkgICBbWyQyXV9tNF9kZWZuKFtfbTRfc2V0KFskMV0pXSldKV9tNF9wb3BkZWYoCiAgICBbX200X3NldChbJDFdLF1fbTRfZGVmbihbX200X3NldChbJDFdKV0pWyldLAogICAgW19tNF9zZXQoWyQxXSldKSQwKFskMV0sIFskMiQzXSldLAoJICBbX200X3BvcGRlZihbX200X3NldF9jbGVhbnVwKCQxKV0pXSkKVDEwLDcyOApBU19QUkVQQVJFX200X2RlZnVuX3BybyhbJDBdKW00X2RpdmVydF9wdXNoKFtLSUxMXSkKbTRfYXBwZW5kX3VuaXEoW19BU19DTEVBTlVQXSwKICBbbTRfZGl2ZXJ0X3RleHQoW000U0gtSU5JVC1GTl0sIFtfQVNfRVJST1JfUFJFUEFSRVtdXSldKQpBU19SRVFVSVJFKFtfQVNfRVhQUl9QUkVQQVJFXSkKQVNfUkVRVUlSRShbX0FTX0JBU0VOQU1FX1BSRVBBUkVdKQpBU19SRVFVSVJFKFtfQVNfRElSTkFNRV9QUkVQQVJFXSkKQVNfUkVRVUlSRShbX0FTX01FX1BSRVBBUkVdKQpBU19SRVFVSVJFKFtfQVNfQ1JfUFJFUEFSRV0pCkFTX1JFUVVJUkUoW19BU19MSU5FTk9fUFJFUEFSRV0pCkFTX1JFUVVJUkUoW19BU19FQ0hPX05fUFJFUEFSRV0pCkFTX1JFUVVJUkUoW19BU19FWElUX1BSRVBBUkVdKQpBU19SRVFVSVJFKFtfQVNfTE5fU19QUkVQQVJFXSkKQVNfUkVRVUlSRShbX0FTX01LRElSX1BfUFJFUEFSRV0pCkFTX1JFUVVJUkUoW19BU19URVNUX1BSRVBBUkVdKQpBU19SRVFVSVJFKFtfQVNfVFJfQ1BQX1BSRVBBUkVdKQpBU19SRVFVSVJFKFtfQVNfVFJfU0hfUFJFUEFSRV0pCkFTX1JFUVVJUkUoW19BU19VTlNFVF9QUkVQQVJFXSkKQVNfUkVRVUlSRShbX0FTX1ZBUl9BUFBFTkRfUFJFUEFSRV0sIFtdLCBbTTRTSC1JTklULUZOXSkKQVNfUkVRVUlSRShbX0FTX1ZBUl9BUklUSF9QUkVQQVJFXSwgW10sIFtNNFNILUlOSVQtRk5dKQptNF9kaXZlcnRfcG9wW11bXV9tNF9kZWZ1bl9lcGkoWyQwXSkKVDExLDE3Cm00X2xvY2F0aW9uX19maWxlX186X19saW5lX18KVDI0LDI5Cm00X2xvY2F0aW9uKEFTX0JBU0VOQU1FKS4uLy4uL2xpYi9tNHN1Z2FyL200c2gubTQ6OTQyClQzNiwyOQptNF9sb2NhdGlvbihfQVNfREVURUNUX0JFVFRFUl9TSEVMTCkuLi8uLi9saWIvbTRzdWdhci9tNHNoLm00OjE5NApUMTEsNTQKbTRfaWZuYmxhbmttNF9pZihtNF90cmFuc2xpdChbWyQxXV0sICBbIF1bCV1bCl0pLCBbXSwgWyQzXSwgWyQyXSkKVDEzLDEzNApfbTRfZGVmdW5fZXBpX200X3BvcGRlZihbX200X2V4cGFuZGluZygkMSldLCBbX200X2V4cGFuc2lvbl9zdGFja10pbTRfaWZkZWYoW19tNF9leHBhbnNpb25fc3RhY2tdLCBbXSwgW19tNF9kZWZ1bl9lcGlfb3V0ZXIoWyQxXSldKW00X3Byb3ZpZGUoWyQxXSkKVDEwLDQwCm00X3dhcm5pbmdtNF9lcnJwcmludG4obTRfbG9jYXRpb25bOiB3YXJuaW5nOiAkMV0pCkY3LDQKbTRfZXZhbGV2YWwKVDE1LDUKX200X2RpdmVydF9ncm93MTAwMDAKVDE1LDIzCkFTX0VYRUNVVEFCTEVfUGFzX2ZuX2V4ZWN1dGFibGVfcCAkMVtdClQxNSwxMjkKQVNfRVhFQ1VUQUJMRV9QX200X2RlZnVuX3BybyhbJDBdKUFTX1JFUVVJUkUoW19BU19URVNUX1BSRVBBUkVdKVtdX200X3BvcGRlZihbJDBdKW00X2luZGlyKFskMF1tNF9pZihbJCNdLCBbMF0sIFtdLCBbLCRAXSkpW11fbTRfZGVmdW5fZXBpKFskMF0pClQ2LDU5OAptNF9mb3JtNF9wdXNoZGVmKFskMV0sIG00X2V2YWwoWyQyXSkpbTRfY29uZChbbTRfZXZhbCgoWyQzXSkgPiAoWyQyXSkpXSwgMSwKCSAgIFttNF9wdXNoZGVmKFtfbTRfc3RlcF0sIG00X2V2YWwobTRfZGVmYXVsdF9xdW90ZWQoWyQ0XSwKCSAgICAgIDEpKSltNF9hc3NlcnQoX200X3N0ZXAgPiAwKV8kMChfbTRfZGVmbihbJDFdKSwKICBtNF9ldmFsKCgoWyQzXSkgLSAoWyQyXSkpIC8gX200X3N0ZXAgKiBfbTRfc3RlcCArIChbJDJdKSksIF9tNF9zdGVwLF0sCgkgW200X2V2YWwoKFskM10pIDwgKFskMl0pKV0sIDEsCgkgICBbbTRfcHVzaGRlZihbX200X3N0ZXBdLCBtNF9ldmFsKG00X2RlZmF1bHRfcXVvdGVkKFskNF0sCgkgICAgICAtMSkpKW00X2Fzc2VydChfbTRfc3RlcCA8IDApXyQwKF9tNF9kZWZuKFskMV0pLAogIG00X2V2YWwoKChbJDJdKSAtIChbJDNdKSkgLyAtKF9tNF9zdGVwKSAqIF9tNF9zdGVwICsgKFskMl0pKSwgX200X3N0ZXAsXSwKCSBbbTRfcHVzaGRlZihbX200X3N0ZXBdKV8kMChfbTRfZGVmbihbJDFdKSwgX200X2RlZm4oWyQxXSksIDAsXSlbbTRfZGVmaW5lKFskMV0sXSwgWykkNV0pbTRfcG9wZGVmKFtfbTRfc3RlcF0sIFskMV0pClQ4LDQyCl9BU19FQ0hPX0FTX0VDSE9fVU5RVU9URUQoW19BU19RVU9URShbJDFdKV0sIFskMl0pClQyNSwyOQptNF9sb2NhdGlvbihfQVNfRUNIT19MT0cpLi4vLi4vbGliL200c3VnYXIvbTRzaC5tNDo3OTAKVDE3LDE4NQpfQVNfVFJfU0hfUFJFUEFSRV9tNF9kZWZ1bl9wcm8oWyQwXSlBU19SRVFVSVJFKFtfQVNfQ1JfUFJFUEFSRV0pIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIHZhcmlhYmxlIG5hbWUuCmFzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbW15fJGFzX2NyX2FsbnVtXV0lXyVnJyIKW11fbTRfZGVmdW5fZXBpKFskMF0pClQxMywxMTAKX0FTX0NMRUFOX0RJUmlmIHRlc3QgLWQgJDE7IHRoZW4KICBmaW5kICQxIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7CiAgcm0gLWZyICQxLyogJDEvLltbIS5dXSAkMS8uPz8qCmZpClQyMCwxODEKQVNfRlVOQ1RJT05fREVTQ1JJQkVAJTpAICQxW11tNF9pZnZhbChbJDJdLCBbICQyXSkKQCU6QCBtNF90cmFuc2xpdChtNF9mb3JtYXQoWyUqc10sCgkgICBtNF9kZWNyKG00X3FsZW4oX200X2V4cGFuZChbJDFbXW00X2lmdmFsKFskMl0sIFsgJDJdKQpdKSkpLCBbXSksIFsgXSwgWy1dKQptNF90ZXh0X3dyYXAoWyQzXSwgW0AlOkAgXSwgW10sIFskNF0pClQxNiwyOTgKbTRfbWFwX2FyZ3NfcGFpcm00X2lmKFskI10sIFswXSwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjXSldLAogICAgICAgWyQjXSwgWzFdLCBbbTRfZmF0YWwoWyQwOiB0b28gZmV3IGFyZ3VtZW50czogJCM6ICQxXSldLAogICAgICAgWyQjXSwgWzJdLCBbXSwKICAgICAgIFskI10sIFszXSwgW200X2RlZmF1bHQoWyQyXSwgWyQxXSkoWyQzXSlbXV0sCiAgICAgICBbJCNdLCBbNF0sIFskMShbJDNdLCBbJDRdKVtdXSwKICAgICAgIFskMShbJDNdLCBbJDRdKVtdJDAoWyQxXSwgWyQyXSwgbTRfc2hpZnQobTRfc2hpZnQzKCRAKSkpXSkKVDE4LDEKX200X2RpdmVydChOT1RJQ0UpNgpUMjcsMQpfbTRfZGl2ZXJ0KEhFQURFUi1SRVZJU0lPTikxClQxMCwxMjQKQVNfTUVTU0FHRW00X2lmdmFsKEFTX01FU1NBR0VfTE9HX0ZELAoJICBbeyBfQVNfRUNIT19MT0coWyQxXSkKX0FTX0VDSE8oWyRhc19tZTogJDFdLCBbJDJdKTt9XSwKCSAgW19BU19FQ0hPKFskYXNfbWU6ICQxXSwgWyQyXSldKVtdW10KVDEwLDEyNwpBU19NRVNTQUdFX200X2RlZnVuX3BybyhbJDBdKUFTX1JFUVVJUkUoW19BU19NRV9QUkVQQVJFXSlbXV9tNF9wb3BkZWYoWyQwXSltNF9pbmRpcihbJDBdbTRfaWYoWyQjXSwgWzBdLCBbXSwgWywkQF0pKVtdX200X2RlZnVuX2VwaShbJDBdKQpUMTYsMjcKX0FTX0NBU0VfREVGQVVMVCBbQCU6QChdCiAgKlspXSA6CiAgICAkMSA7OwpUNywzMApBU19XQVJOQVNfTUVTU0FHRShbV0FSTklORzogJDFdLCBbMl0pClQzMCwyOQptNF9sb2NhdGlvbihfQVNfQkFTRU5BTUVfRVhQUikuLi8uLi9saWIvbTRzdWdhci9tNHNoLm00OjkyMQpUMTcsNDkwCl9BU19UUl9TSF9MSVRFUkFMbTRfdHJhbnNsaXQoW1skMV1dLAogIFsqK1tdXVsBAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyolJicoKSQrLC4vOjs8PT4/QFtcXV5ge3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/y1dLAogIFtwcFtdXVtfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19dKQpUMTAsNjYKX0FTX0VDSE9fTkFTX0VDSE9fTihbIl9BU19RVU9URShbJDFdKSJdKSA+Jm00X2RlZmF1bHQoWyQyXSwgW0FTX01FU1NBR0VfRkRdKQpUNywzNgptNF9zaWdubTRfZXZhbCgoKFskMV0pID4gMCkgLSAoKFskMV0pIDwgMCkpClQyNSw1MwpfbTRfZXhwYW5zaW9uX3N0YWNrX2VudHJ5X200X2RlZm4oW200X2xvY2F0aW9uKCQxKV0pWzogJDEgaXMgZXhwYW5kZWQgZnJvbS4uLl0KVDE5LDE5MQpfQVNfRElSTkFNRV9QUkVQQVJFX200X2RlZnVuX3BybyhbJDBdKUFTX1JFUVVJUkUoW19BU19FWFBSX1BSRVBBUkVdKWlmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgogIGFzX2Rpcm5hbWU9ZGlybmFtZQplbHNlCiAgYXNfZGlybmFtZT1mYWxzZQpmaQpbXV9tNF9kZWZ1bl9lcGkoWyQwXSkKVDI2LDIKX0FTX0xJVEVSQUxfSEVSRURPQ19JRl9ZRVMkMQpUOSwxMjcKX200X3NwbGl0bTRfY2hhbmdlcXVvdGUoWy09PHsoXSxbKX0+PS1dKVttNF9icGF0c3Vic3QoLT08eygtPTx7KCQxKX0+PS0pfT49LSwgLT08eygkMil9Pj0tLAoJICAgICAgIC09PHsoXSQzWyl9Pj0tKV1tNF9jaGFuZ2VxdW90ZShbLCBdKQpUOCw4NQpfbTRfam9pbm00X2lmKFskIyQyXSwgWzJdLCBbXSwKICAgICAgIFttNF9pZihbJDJdLCBbXSwgW10sIFtbJDEkMl1dKSQwKFskMV0sIG00X3NoaWZ0MigkQCkpXSkKVDE2LDQKX200X2RpdmVydChCT0RZKTEwMDAKVDE4LDEyNjgKX0FTX0xJTkVOT19QUkVQQVJFX200X2RlZnVuX3BybyhbJDBdKUFTX1JFUVVJUkUoW19BU19DUl9QUkVQQVJFXSlBU19SRVFVSVJFKFtfQVNfTUVfUFJFUEFSRV0pX0FTX0RFVEVDVF9TVUdHRVNURUQoW19BU19MSU5FTk9fV09SS1NdKW00X3B1c2hkZWYoW0FTX01FU1NBR0VfTE9HX0ZEXSltNF9wdXNoZGVmKFtBU19FUlJPUl0sCiAgW3sgQVNfTUVTU0FHRShdbTRfZHF1b3RlKFtlcnJvcjogJF1bMV0pWywgWzJdKTsgQVNfRVhJVChbMV0pOyB9XSlfQVNfTElORU5PX1dPUktTIHx8IHsKWyAgIyBCbGFtZSBMZWUgRS4gTWNNYWhvbiAoMTkzMS0xOTg5KSBmb3Igc2VkJ3Mgc3ludGF4LiAgOi0pCiAgc2VkIC1uICcKICAgIHAKICAgIC9bJF1MSU5FTk8vPQogICcgPCRhc19teXNlbGYgfAogICAgc2VkICcKICAgICAgcy9bJF1MSU5FTk8uKi8mLS8KICAgICAgdCBsaW5lbm8KICAgICAgYgogICAgICA6bGluZW5vCiAgICAgIE4KICAgICAgOmxvb3AKICAgICAgcy9bJF1MSU5FTk9cKFteJyRhc19jcl9hbG51bSdfXS4qXG5cKVwoLipcKS9cMlwxXDIvCiAgICAgIHQgbG9vcAogICAgICBzLy1cbi4qLy8KICAgICcgPiRhc19tZS5saW5lbm8gJiYKICBjaG1vZCAreCAiJGFzX21lLmxpbmVubyJdIHx8CiAgICBBU19FUlJPUihbY2Fubm90IGNyZWF0ZSAkYXNfbWUubGluZW5vOyByZXJ1biB3aXRoIGEgUE9TSVggc2hlbGxdKQoKICAjIElmIHdlIGhhZCB0byByZS1leGVjdXRlIHdpdGggJENPTkZJR19TSEVMTCwgd2UncmUgZW5zdXJlZCB0byBoYXZlCiAgIyBhbHJlYWR5IGRvbmUgdGhhdCwgc28gZW5zdXJlIHdlIGRvbid0IHRyeSB0byBkbyBzbyBhZ2FpbiBhbmQgZmFsbAogICMgaW4gYW4gaW5maW5pdGUgbG9vcC4gIFRoaXMgaGFzIGFscmVhZHkgaGFwcGVuZWQgaW4gcHJhY3RpY2UuCiAgX2FzX2Nhbl9yZWV4ZWM9bm87IGV4cG9ydCBfYXNfY2FuX3JlZXhlYwogICMgRG9uJ3QgdHJ5IHRvIGV4ZWMgYXMgaXQgY2hhbmdlcyAkWzBdLCBjYXVzaW5nIGFsbCBzb3J0IG9mIHByb2JsZW1zCiAgIyAodGhlIGRpcm5hbWUgb2YgJFswXSBpcyBub3QgdGhlIHBsYWNlIHdoZXJlIHdlIG1pZ2h0IGZpbmQgdGhlCiAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpdGl2ZSB0byB0aGlzKS4KICAuICIuLyRhc19tZS5saW5lbm8iCiAgIyBFeGl0IHN0YXR1cyBpcyB0aGF0IG9mIHRoZSBsYXN0IGNvbW1hbmQuCiAgZXhpdAp9Cl9tNF9wb3BkZWYoW0FTX01FU1NBR0VfTE9HX0ZEXSwgW0FTX0VSUk9SXSlbXV9tNF9kZWZ1bl9lcGkoWyQwXSkKVDEzLDI3NgptNF9zZXRfZGVsZXRlbTRfaWZkZWYoW19tNF9zZXQoWyQxXSldLAoJICBbX200X3BvcGRlZihbX200X3NldChbJDFdLF1fbTRfZGVmbihbX200X3NldChbJDFdKV0pWyldLAoJCSAgICAgIFtfbTRfc2V0KFskMV0pXSkkMChbJDFdKV0sCgkgIFttNF9pZmRlZihbX200X3NldF9jbGVhbnVwKCQxKV0sCgkJICAgIFtfbTRfcG9wZGVmKFtfbTRfc2V0X2NsZWFudXAoJDEpXSldKW00X2lmZGVmKAoJCSAgICBbX200X3NldF9zaXplKCQxKV0sCgkJICAgIFtfbTRfcG9wZGVmKFtfbTRfc2V0X3NpemUoJDEpXSldKV0pClQzNCwyOQptNF9sb2NhdGlvbihfQVNfUkVFWEVDX1dJVEhfU0hFTEwpLi4vLi4vbGliL200c3VnYXIvbTRzaC5tNDoyNzkKVDEyLDEwCm00X2NyX2RpZ2l0czAxMjM0NTY3ODkKVDE3LDE3Cm00X1BBQ0tBR0VfU1RSSU5HR05VIEF1dG9jb25mIDIuNjkKVDksMTQKQVNfVEVTVF9YdGVzdCAteCAkMVtdW10KVDksMTI5CkFTX1RFU1RfWF9tNF9kZWZ1bl9wcm8oWyQwXSlBU19SRVFVSVJFKFtfQVNfVEVTVF9QUkVQQVJFXSlbXV9tNF9wb3BkZWYoWyQwXSltNF9pbmRpcihbJDBdbTRfaWYoWyQjXSwgWzBdLCBbXSwgWywkQF0pKVtdX200X2RlZnVuX2VwaShbJDBdKQpGMTAsNgpfbTRfcG9wZGVmcG9wZGVmClQ5LDY4Cl9BU19UUl9TSF9BU19MSVRFUkFMX0lGKFskMV0sIFsqXVsJIF1bCl0pKFtdLCBbJDBfSU5ESVJdLCBbJDBfTElURVJBTF0pKFskMV0pClQ3LDE2ODgKbTRfaW5pdCMgQWxsIHRoZSBNNHN1Z2FyIG1hY3JvcyBzdGFydCB3aXRoIGBtNF8nLCBleGNlcHQgYGRubCcga2VwdCBhcyBpcwojIGZvciBzYWtlIG9mIHNpbXBsaWNpdHkuCm00X3BhdHRlcm5fZm9yYmlkKFteXz9tNF9dKQptNF9wYXR0ZXJuX2ZvcmJpZChbXmRubCRdKQoKIyBJZiBfX200X3ZlcnNpb25fXyBpcyBkZWZpbmVkLCB3ZSBhc3N1bWUgdGhhdCB3ZSBhcmUgYmVpbmcgcnVuIGJ5IE00CiMgMS42IG9yIG5ld2VyLCB0aHVzICRAIHJlY3Vyc2lvbiBpcyBsaW5lYXIsIGFuZCBkZWJ1Z21vZGUoK2RvKQojIGlzIGF2YWlsYWJsZSBmb3IgZmFzdGVyIGNoZWNrcyBvZiBkZXJlZmVyZW5jaW5nIHVuZGVmaW5lZCBtYWNyb3MKIyBhbmQgZm9yY2luZyBkdW1wZGVmIHRvIHByaW50IHRvIHN0ZGVyciByZWdhcmRsZXNzIG9mIGRlYnVnZmlsZS4KIyBCdXQgaWYgaXQgaXMgbWlzc2luZywgd2UgYXNzdW1lIHdlIGFyZSBiZWluZyBydW4gYnkgTTQgMS40LngsIHRoYXQKIyAkQCByZWN1cnNpb24gaXMgcXVhZHJhdGljLCBhbmQgdGhhdCB3ZSBuZWVkIGZvcmVhY2gtYmFzZWQKIyByZXBsYWNlbWVudCBtYWNyb3MuICBBbHNvLCBtNCBwcmlvciB0byAxLjQuOCBsb3NlcyB0cmFjayBvZiBsb2NhdGlvbgojIGR1cmluZyBtNHdyYXAgdGV4dDsgX19saW5lX18gc2hvdWxkIG5ldmVyIGJlIDAuCiMKIyBVc2UgdGhlIHJhdyBidWlsdGluIHRvIGF2b2lkIHRyaXBwaW5nIHVwIGluY2x1ZGUgdHJhY2luZy4KIyBNZWFud2hpbGUsIGF2b2lkIG00X2NvcHksIHNpbmNlIGl0IHRlbXBvcmFyaWx5IHVuZGVmaW5lcyBtNF9kZWZuLgptNF9pZmRlZihbX19tNF92ZXJzaW9uX19dLApbbTRfZGVidWdtb2RlKFsrZG9dKQptNF9kZWZpbmUoW200X2RlZm5dLCBfbTRfZGVmbihbX200X2RlZm5dKSkKbTRfZGVmaW5lKFttNF9kdW1wZGVmXSwgX200X2RlZm4oW19tNF9kdW1wZGVmXSkpCm00X2RlZmluZShbbTRfcG9wZGVmXSwgX200X2RlZm4oW19tNF9wb3BkZWZdKSkKbTRfZGVmaW5lKFttNF91bmRlZmluZV0sIF9tNF9kZWZuKFtfbTRfdW5kZWZpbmVdKSldLApbbTRfYnVpbHRpbihbaW5jbHVkZV0sIFttNHN1Z2FyL2ZvcmVhY2gubTRdKQptNF93cmFwX2xpZm8oW200X2lmKF9fbGluZV9fLCBbMF0sIFttNF9wdXNoZGVmKFttNF9sb2NhdGlvbl0sCl1dbTRfZHF1b3RlKG00X2RxdW90ZShtNF9kcXVvdGUoX19maWxlX186X19saW5lX18pKSlbWyldKV0pXSkKCiMgUmV3cml0ZSB0aGUgZmlyc3QgZW50cnkgb2YgdGhlIGRpdmVyc2lvbiBzdGFjay4KbTRfZGl2ZXJ0KFtLSUxMXSkKCiMgQ2hlY2sgdGhlIGRpdmVydCBwdXNoL3BvcCBwZXJmZWN0IGJhbGFuY2UuCiMgU29tZSB1c2VycyBhcmUgcHJvbmUgdG8gYWxzbyB1c2UgbTRfd3JhcCB0byByZWdpc3RlciBsYXN0LW1pbnV0ZQojIG00X2RpdmVydF90ZXh0OyBzbyBhZnRlciBvdXIgZGl2ZXJzaW9uIGNsZWFudXBzLCB3ZSByZXN0b3JlCiMgS0lMTCBhcyB0aGUgYm90dG9tIG9mIHRoZSBkaXZlcnNpb24gc3RhY2suCm00X3dyYXAoW200X3BvcGRlZihbX200X2RpdmVydF9kaXZlcnNpb25dKW00X2lmZGVmKAogIFtfbTRfZGl2ZXJ0X2RpdmVyc2lvbl0sIFttNF9mYXRhbChbJDA6IHVuYmFsYW5jZWQgbTRfZGl2ZXJ0X3B1c2g6Cl1tNF9kaXZlcnRfc3RhY2spXSlfbTRfcG9wZGVmKFtfbTRfZGl2ZXJ0X3N0YWNrXSltNF9kaXZlcnRfcHVzaChbS0lMTF0pXSkKClQyMSwyOQptNF9sb2NhdGlvbihBU19FUlJPUikuLi8uLi9saWIvbTRzdWdhci9tNHNoLm00Ojg4MwpUMTEsMTYyCm00X2R1bXBkZWZzbTRfaWYoWyQjXSwgWzBdLCBbbTRfZmF0YWwoWyQwOiBtaXNzaW5nIGFyZ3VtZW50XSldLAogICAgICAgWyQjXSwgWzFdLCBbbTRfc3RhY2tfZm9yZWFjaF9saWZvKFskMV0sIFttNF9kdW1wZGVmKFskMV0pbTRfaWdub3JlXSldLAogICAgICAgW200X21hcF9hcmdzKFskMF0sICRAKV0pClQxMiwxNgptNF93cmFwX2xpZm9fbTRfd3JhcChbJDFbXV0pClQxMCwxMDMKbTRfZmxhdHRlbm00X2lmKG00X2luZGV4KFskMV0sIFsKXSksIFstMV0sIFtbJDFdXSwKICAgICAgIFttNF90cmFuc2xpdChtNF9icGF0c3Vic3QoW1tbJDFdXV0sIFtcXApdKSwgWwpdLCBbIF0pXSkKVDIwLDM2Cl9tNF9zZXRfaW50ZXJzZWN0aW9ubTRfc2V0X2NvbnRhaW5zKFskMV0sIFskMl0sIFssWyQyXV0pClQyMCwzMwpfQVNfUkVRVUlSRV9TSEVMTF9GTgptNF9uKFskMl0pJDEgKCkKewokMwp9IEAlOkAgJDFbXQpUMjIsMzAKbTRfbG9jYXRpb24oQVNfVFJfQ1BQKS4uLy4uL2xpYi9tNHN1Z2FyL200c2gubTQ6MTg1OQpUOCwyOApfQVNfQ0FTRSBbQCU6QChdCiAgJDFbKV0gOgogICAgJDIgOzsKVDE5LDI5Cm00X2xvY2F0aW9uKEFTX0ZPUikuLi8uLi9saWIvbTRzdWdhci9tNHNoLm00OjYwNwpUOSwxNTYKbTRfZXNjYXBlbTRfaWYobTRfaW5kZXgobTRfdHJhbnNsaXQoWyQxXSwKICAgW1tdIywoKV1bYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl8wMTIzNDU2Nzg5XSwgWyQkJF0pLCBbJF0pLAogIFstMV0sIFttNF9lY2hvXSwgW18kMF0pKFskMV0pClQxNyw0NzgKQVNfSU5JVF9HRU5FUkFURURfbTRfZGVmdW5fcHJvKFskMF0pbTRfcmVxdWlyZShbQVNfUFJFUEFSRV0pbTRfcHVzaGRlZihbQVNfTUVTU0FHRV9MT0dfRkRdKWFzX3dyaXRlX2ZhaWw9MApjYXQgPiQxIDw8X0FTRU9GIHx8IGFzX3dyaXRlX2ZhaWw9MQojISAkU0hFTEwKIyBHZW5lcmF0ZWQgYnkgJGFzX21lLgokMgpTSEVMTD1cJHtDT05GSUdfU0hFTEwtJFNIRUxMfQpleHBvcnQgU0hFTEwKX0FTRU9GCmNhdCA+PiQxIDw8XF9BU0VPRiB8fCBhc193cml0ZV9mYWlsPTEKX0FTX1NIRUxMX1NBTklUSVpFCl9BU19QUkVQQVJFCm00X2lmKEFTX01FU1NBR0VfRkQsIFsxXSwgW10sIFtleGVjIEFTX01FU1NBR0VfRkQ+JjEKXSltNF90ZXh0X2JveChbTWFpbiBib2R5IG9mICQxIHNjcmlwdC5dKQpfQVNFT0YKdGVzdCAkYXNfd3JpdGVfZmFpbCA9IDAgJiYgY2htb2QgK3ggJDFbXWRubApfbTRfcG9wZGVmKFtBU19NRVNTQUdFX0xPR19GRF0pW11fbTRfZGVmdW5fZXBpKFskMF0pClQyOSwyOQptNF9sb2NhdGlvbihfQVNfRElSTkFNRV9FWFBSKS4uLy4uL2xpYi9tNHN1Z2FyL200c2gubTQ6OTc1ClQxMiwyNAptNF9yZW5hbWVfbTRtNF9yZW5hbWUoWyQxXSwgW200XyQxXSkKVDMwLDI5Cm00X2xvY2F0aW9uKF9BU19VTlNFVF9QUkVQQVJFKS4uLy4uL2xpYi9tNHN1Z2FyL200c2gubTQ6NjU3ClQyMCwxMTEKbTRfc3RhY2tfZm9yZWFjaF9zZXBfbTRfc3RhY2tfcmV2ZXJzZShbJDFdLCBbbTRfdG1wLSQxXSlfbTRfc3RhY2tfcmV2ZXJzZShbbTRfdG1wLSQxXSwgWyQxXSwgWyQyW11fbTRfZGVmbihbbTRfdG1wLSQxXSkkM10sIFskNFtdXSkKVDIwLDMwCm00X2xvY2F0aW9uKEFTX0VDSE8pLi4vLi4vbGliL200c3VnYXIvbTRzaC5tNDoxMDI2ClQzNSwzMAptNF9sb2NhdGlvbihfQVNfVkFSX0FQUEVORF9QUkVQQVJFKS4uLy4uL2xpYi9tNHN1Z2FyL200c2gubTQ6MTkwNgpUMTksMTU2Cl9tNF9kZWZ1bl9wcm9fb3V0ZXJtNF9zZXRfZGVsZXRlKFtfbTRfcHJvdmlkZV0pbTRfcHVzaGRlZihbX200X2RpdmVydGluZyhbJDFdKV0pbTRfcHVzaGRlZihbX200X2RpdmVydGluZ10sIFskMV0pbTRfcHVzaGRlZihbX200X2RpdmVydF9kdW1wXSwgbTRfZGl2bnVtKW00X2RpdmVydF9wdXNoKFtHUk9XXSkKVDE4LDQ5CkFTX0xJVEVSQUxfV09SRF9JRl9BU19MSVRFUkFMX0lGKG00X2V4cGFuZChbJDFdKSkoWyQ0XSwgWyQzXSwgWyQyXSkKVDE3LDYzCm00X3NldF9kaWZmZXJlbmNlbTRfaWYoWyQxXSwgWyQyXSwgW10sIFttNF9zZXRfbWFwX3NlcChbJDFdLCBbXyQwKFskMl0sXSwgWyldKV0pClQxNywyOTIKX200X3JlcXVpcmVfY2hlY2ttNF9pZihfbTRfZGVmbihbX200X2RpdmVydGluZ10pLCBbJDJdLCBbbTRfaWdub3JlXSwKICAgICAgIG00X2lmZGVmKFtfbTRfZGl2ZXJ0aW5nKFskMl0pXSwgWy1dKSwgWy1dLCBbbTRfd2Fybihbc3ludGF4XSwKICAgWyQzOiBgJDEnIHdhcyBleHBhbmRlZCBiZWZvcmUgaXQgd2FzIHJlcXVpcmVkCmh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvY29uZi9tYW51YWwvYXV0b2NvbmYuaHRtbCNFeHBhbmRlZC1CZWZvcmUtUmVxdWlyZWRdKV9tNF9yZXF1aXJlX2NhbGxdLAogICAgICAgW200X2lnbm9yZV0pClQxOSwxNjYKbTRfc2V0X2ludGVyc2VjdGlvbm00X2lmKFskMV0sIFskMl0sIFttNF9zZXRfbGlzdGMoWyQxXSldLAogICAgICAgbTRfZXZhbChtNF9zZXRfc2l6ZShbJDJdKSA8IG00X3NldF9zaXplKFskMV0pKSwgWzFdLCBbJDAoWyQyXSwgWyQxXSldLAogICAgICAgW200X3NldF9tYXBfc2VwKFskMV0sIFtfJDAoWyQyXSxdLCBbKV0pXSkKVDE5LDE0NwpBU19SRVFVSVJFX1NIRUxMX0ZObTRfcHJvdmlkZV9pZihbQVNfU0hFTExfRk5fJDFdLCBbXSwKW0FTX1JFUVVJUkUoW0FTX1NIRUxMX0ZOXyQxXSwKW200X3Byb3ZpZGUoW0FTX1NIRUxMX0ZOXyQxXSlfJDAoJEApXSwKbTRfZGVmYXVsdF9xdW90ZWQoWyQ0XSwgW000U0gtSU5JVC1GTl0pKV0pClQxMyw0NwpBU19MSVRFUkFMX0lGXyQwKG00X2V4cGFuZChbJDFdKSwgWwkgXVsKXSkoWyQ0XSwgWyQzXSwgWyQyXSkKVDIxLDEwMQptNF9zdGFja19mb3JlYWNoX2xpZm9fbTRfc3RhY2tfcmV2ZXJzZShbJDFdLCBbbTRfdG1wLSQxXSwgWyQyKF9tNF9kZWZuKFttNF90bXAtJDFdKSldKV9tNF9zdGFja19yZXZlcnNlKFttNF90bXAtJDFdLCBbJDFdKQpUMTEsMzMKbTRfc2V0X2xpc3RtNF9zZXRfbWFwX3NlcChbJDFdLCBbXSwgW10sIFssXSkKVDMyLDI5Cm00X2xvY2F0aW9uKF9BU19ERVRFQ1RfUkVRVUlSRUQpLi4vLi4vbGliL200c3VnYXIvbTRzaC5tNDoxNTYKVDIzLDI5Cm00X2xvY2F0aW9uKEFTX1BSRVBBUkUpLi4vLi4vbGliL200c3VnYXIvbTRzaC5tNDozNTMKVDI5LDMwCm00X2xvY2F0aW9uKF9BU19URVNUX1BSRVBBUkUpLi4vLi4vbGliL200c3VnYXIvbTRzaC5tNDoxMzg0CkY4LDgKX19saW5lX19fX2xpbmVfXwpUMTMsNDEKX200X3NldF91bmlvbm00X2lmZGVmKFtfbTRfc2V0KFskMV0sJDIpXSwgW10sIFssWyQyXV0pClQxNywxCl9tNF9kaXZlcnQoQklOU0gpMApUMTAsNTUKX200X3NoaWZ0Mm00X2lmKFskI10sIFsyXSwgW10sCiAgICAgICBbLCBtNF9zaGlmdChtNF9zaGlmdCgkQCkpXSkKVDE4LDQKbTRfUEFDS0FHRV9WRVJTSU9OMi42OQpUMTAsNjUKX200X3NoaWZ0M200X2lmKFskI10sIFszXSwgW10sCiAgICAgICBbLCBtNF9zaGlmdChtNF9zaGlmdChtNF9zaGlmdCgkQCkpKV0pClQxNiwyMjIKX0FTX0JBU0VOQU1FX1NFRF9tNF9kZWZ1bl9wcm8oWyQwXSlBU19FQ0hPKFtYL1tdJDFdKSB8CiAgICBzZWQgWycvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97CgkgICAgcy8vXDEvCgkgICAgcQoJICB9CgkgIC9eWFwvXChcL1wvXCkkL3sKCSAgICBzLy9cMS8KCSAgICBxCgkgIH0KCSAgL15YXC9cKFwvXCkuKi97CgkgICAgcy8vXDEvCgkgICAgcQoJICB9CgkgIHMvLiovLi87IHEnXVtdX200X2RlZnVuX2VwaShbJDBdKQpUMTMsMzgzCl9BU19QQVRIX1dBTEthc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCm00X2lmdmFsbihbJDNdLCBbYXNfZm91bmQ9ZmFsc2VdKWRubAptNF9ibWF0Y2goWyQxXSwgW1s6O11dLApbYXNfZHVtbXk9IiQxIgpmb3IgYXNfZGlyIGluICRhc19kdW1teV0sCltmb3IgYXNfZGlyIGluIG00X2RlZmF1bHQoWyQxXSwgWyRQQVRIXSldKQpkbwogIElGUz0kYXNfc2F2ZV9JRlMKICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgogIG00X2lmdmFsbihbJDNdLCBbYXNfZm91bmQ9Ol0pZG5sCiAgJDIKICBtNF9pZnZhbG4oWyQzXSwgW2FzX2ZvdW5kPWZhbHNlXSlkbmwKZG9uZQptNF9pZnZhbG4oWyQzXSwgWyRhc19mb3VuZCB8fCB7ICQzOyB9XSlkbmwKSUZTPSRhc19zYXZlX0lGUwpbXQpUMTMsMTM5Cl9BU19QQVRIX1dBTEtfbTRfZGVmdW5fcHJvKFskMF0pQVNfUkVRVUlSRShbX0FTX1BBVEhfU0VQQVJBVE9SX1BSRVBBUkVdKVtdX200X3BvcGRlZihbJDBdKW00X2luZGlyKFskMF1tNF9pZihbJCNdLCBbMF0sIFtdLCBbLCRAXSkpW11fbTRfZGVmdW5fZXBpKFskMF0pClQyOCwxCl9tNF9kaXZlcnQoSEVBREVSLUNPUFlSSUdIVCkzClQxMSw1OApfQVNfQ0xFQU5VUG00X2RpdmVydF90ZXh0KFtNNFNILVNBTklUSVpFXSwgW19BU19ERVRFQ1RfQkVUVEVSX1NIRUxMXSkKVDIxLDMyCkFTX0xJVEVSQUxfSEVSRURPQ19JRl8kMChtNF9leHBhbmQoWyQxXSkpKFskMl0sIFskM10pClQxMCw4NApfbTRfbWlubWF4bTRfaWYoWyQjXSwgWzNdLCBbJDEoWyQyXSwgWyQzXSldLAogICAgICAgWyQwKFskMV0sICQxKFskMl0sIFskM10pLCBtNF9zaGlmdDMoJEApKV0pClQxMyw1NwpBU19NRV9QUkVQQVJFX200X2RlZnVuX3BybyhbJDBdKUFTX1JFUVVJUkUoW18kMF0pW11fbTRfZGVmdW5fZXBpKFskMF0pClQxMSwyMzgKbTRfdGV4dF9ib3htNF9wdXNoZGVmKFttNF9Cb3JkZXJdLAoJICAgIG00X3RyYW5zbGl0KG00X2Zvcm1hdChbW1slKnNdXV0sIG00X2RlY3IobTRfcWxlbihfbTRfZXhwYW5kKFskMQpdKSkpLCBbXSksIFsgXSwgbTRfZGVmYXVsdF9xdW90ZWQoWyQyXSwgWy1dKSkpWyMjXSBfbTRfZGVmbihbbTRfQm9yZGVyXSkgWyMjXQpbIyNdICQxIFsjI10KWyMjXSBfbTRfZGVmbihbbTRfQm9yZGVyXSkgWyMjXV9tNF9wb3BkZWYoW200X0JvcmRlcl0pClQxNSwxODAKbTRfc2V0X2NvbnRhaW5zbTRfaWZkZWYoW19tNF9zZXRfY2xlYW51cCgkMSldLAoJICBbbTRfaWYobTRfaWZkZWYoW19tNF9zZXQoWyQxXSwkMildLAoJCSAgICBbbTRfaW5kaXIoW19tNF9zZXQoWyQxXSwkMildKV0sIFswXSksIFsxXSwgWyQzXSwgWyQ0XSldLAoJICBbbTRfaWZkZWYoW19tNF9zZXQoWyQxXSwkMildLCBbJDNdLCBbJDRdKV0pCkYxMCw3Cm00X2VzeXNjbWRlc3lzY21kClQ5LDIyCkFTX1RSX0NQUF8kMChtNF9leHBhbmQoWyQxXSkpW10KVDksMTI0CkFTX1RSX0NQUF9tNF9kZWZ1bl9wcm8oWyQwXSlBU19SRVFVSVJFKFtfJDBfUFJFUEFSRV0pW11fbTRfcG9wZGVmKFskMF0pbTRfaW5kaXIoWyQwXW00X2lmKFskI10sIFswXSwgW10sIFssJEBdKSlbXV9tNF9kZWZ1bl9lcGkoWyQwXSkKVDEwLDMyCm00X3NldF9tYXBtNF9zZXRfbWFwX3NlcChbJDFdLCBbJDIoXSwgWyldKQpUMTQsNTMKbTRfY3Jfc3ltYm9sczFhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXwpUMTQsMTgxCl9BU19MSVRFUkFMX0lGbTRfaWYobTRfaW5kZXgoWyQxXSwgW0BTfEBdKSwgWy0xXSwgWyQwXyhtNF90cmFuc2xpdChbJDFdLAogIFstOj0lL0B7fVtdIygpLC4kMl1dW1thYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXzAxMjM0NTY3ODldXVssCiAgWysrKysrKyQkYGBgYGBdKSldLCBbJDBfTk9dKQpUMTQsNjMKbTRfY3Jfc3ltYm9sczJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXzAxMjM0NTY3ODkKVDEzLDExNgpfQVNfQk9YX0lORElSc2VkICdoO3MvLi9tNF9kZWZhdWx0KFskMl0sIFstXSkvZztzL14uLi4vQCU6QEAlOkAgLztzLy4uLiQvIEAlOkBAJTpALztwO3g7cDt4JyA8PF9BU0JPWApAJTpAQCU6QCAkMSBAJTpAQCU6QApfQVNCT1gKVDEyLDE4Cm00X2VycnByaW50bm00X2VycnByaW50KFskMQpdKQpUMTMsMzA2Cm00X2JwYXRzdWJzdHNtNF9pZihbJCNdLCAwLCBbbTRfZmF0YWwoWyQwOiB0b28gZmV3IGFyZ3VtZW50czogJCNdKV0sCiAgICAgICBbJCNdLCAxLCBbbTRfZmF0YWwoWyQwOiB0b28gZmV3IGFyZ3VtZW50czogJCM6ICQxXSldLAogICAgICAgWyQjXSwgMiwgW200X3VucXVvdGUobTRfYnVpbHRpbihbcGF0c3Vic3RdLCBbWyQxXV0sIFskMl0pKV0sCiAgICAgICBbJCNdLCAzLCBbbTRfdW5xdW90ZShtNF9idWlsdGluKFtwYXRzdWJzdF0sIFtbJDFdXSwgWyQyXSwgWyQzXSkpXSwKICAgICAgIFtfJDAoJEBtNF9pZihtNF9ldmFsKCQjICYgMSksIDAsIFssXSkpXSkKVDIzLDI5Cm00X2xvY2F0aW9uKEFTX01FU1NBR0UpLi4vLi4vbGliL200c3VnYXIvbTRzaC5tNDo4MzQKRjcsNAptNF9kZWNyZGVjcgpUMTIsOTMKbTRfdGV4dF93cmFwXyQwKG00X2VzY2FwZShbJDFdKSwgWyQyXSwgbTRfZGVmYXVsdF9xdW90ZWQoWyQzXSwgWyQyXSksCiAgICAgbTRfZGVmYXVsdF9xdW90ZWQoWyQ0XSwgWzc5XSkpClQxMiw5MwptNF9zZXRfZW1wdHltNF9pZmRlZihbX200X3NldF9zaXplKCQxKV0sCgkgIFttNF9pZihtNF9pbmRpcihbX200X3NldF9zaXplKCQxKV0pLCBbMF0sIFskMl0sIFskM10pXSwgWyQyXSkKVDE1LDM2Cm00X3NldF9jb250ZW50c200X3NldF9tYXBfc2VwKFskMV0sIFtdLCBbXSwgW1skMl1dKQpUMzIsMzAKbTRfbG9jYXRpb24oX0FTX0RJUk5BTUVfUFJFUEFSRSkuLi8uLi9saWIvbTRzdWdhci9tNHNoLm00OjEwMTEKVDE1LDU1Cl9BU19UUl9TSF9JTkRJUmBBU19FQ0hPKFsiX0FTX0VTQ0FQRShbWyQxXV0sIFtgXSwgW1xdKSJdKSB8ICRhc190cl9zaGAKVDIwLDI5Cm00X2xvY2F0aW9uKEFTX0NBU0UpLi4vLi4vbGliL200c3VnYXIvbTRzaC5tNDo1NTAKVDEwLDE2OAptNF9jb21iaW5lbTRfaWYoWyQyXSwgW10sIFtdLCBtNF9ldmFsKFskIyA+IDNdKSwgWzFdLApbbTRfbWFwX2FyZ3Nfc2VwKFttNF9tYXBfYXJnc19zZXAobTRfZHF1b3RlKF0sIFspW1skM11dLCBbXSwgW1skMV1dLF1dbTRfZHF1b3RlKG00X2RxdW90ZShtNF9zaGlmdDMoJEApKSlbWyldLCBbWyQxXV0sICQyKV0pClQ5LDMzOQpBU19WQVJfSUZBU19MSVRFUkFMX1dPUkRfSUYoWyQxXSwKICBbQVNfSUYobTRfaWZ2YWwoWyQyXSwgW1t0ZXN0ICJ4JCQxIiA9IHhbXSQyXV0sIFtbJHskMTorZmFsc2V9IDpdXSldLAogIFtBU19WQVJfQ09QWShbYXNfdmFsXSwgWyQxXSkKICAgQVNfSUYobTRfaWZ2YWwoWyQyXSwgW1t0ZXN0ICJ4JGFzX3ZhbCIgPSB4W10kMl1dLCBbWyR7YXNfdmFsOitmYWxzZX0gOl1dKV0sCiAgW0FTX0lGKG00X2lmdmFsKFskMl0sCiAgICBbW2V2YWwgdGVzdCBcInhcJCIkMSJcIiA9IHgiX0FTX0VTQ0FQRShbJDJdLCBbYF0sIFtcIiRdKSJdXSwKICAgIFtbZXZhbCBcJHskMTorZmFsc2V9IDpdXSldKSwKWyQzXSwgWyQ0XSkKVDE4LDIwMgptNF9jcl9ub3Rfc3ltYm9sczEBAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyolJicoKSQrLC4vMDEyMzQ1Njc4OTo7PD0+P0BbXF1eYHt8fX5/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8tClQxOCwxOTIKbTRfY3Jfbm90X3N5bWJvbHMyAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMqJSYnKCkkKywuLzo7PD0+P0BbXF1eYHt8fX5/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8tClQyMywzMAptNF9sb2NhdGlvbihBU19ESVJOQU1FKS4uLy4uL2xpYi9tNHN1Z2FyL200c2gubTQ6MTAwMgpGMTIsOAptNF9icGF0c3Vic3RwYXRzdWJzdApUMzEsMjkKbTRfbG9jYXRpb24oX0FTX1NIRUxMX1NBTklUSVpFKS4uLy4uL2xpYi9tNHN1Z2FyL200c2gubTQ6NDUxClQ3LDIKbTRfZWNobyRAClQyMCwxCkFTX09SSUdJTkFMX1NURElOX0ZEMApUMjUsMTExCm00X3N0YWNrX2ZvcmVhY2hfc2VwX2xpZm9fbTRfc3RhY2tfcmV2ZXJzZShbJDFdLCBbbTRfdG1wLSQxXSwgWyQyW11fbTRfZGVmbihbbTRfdG1wLSQxXSkkM10sIFskNFtdXSlfbTRfc3RhY2tfcmV2ZXJzZShbbTRfdG1wLSQxXSwgWyQxXSkKVDE0LDEwMgpfQVNfTUVfUFJFUEFSRV9tNF9kZWZ1bl9wcm8oWyQwXSlBU19SRVFVSVJFKFtfQVNfQkFTRU5BTUVfUFJFUEFSRV0pYXNfbWU9YEFTX0JBU0VOQU1FKCIkWzBdIilgCltdX200X2RlZnVuX2VwaShbJDBdKQpUMjYsMzAKbTRfbG9jYXRpb24oX0FTX1BBVEhfV0FMSykuLi8uLi9saWIvbTRzdWdhci9tNHNoLm00OjEzMzkKVDcsOTEKbTRfYXJnbm00X2Fzc2VydChbMCA8ICQxXSltNF9wdXNoZGVmKFtfJDBdLCBbX200X3BvcGRlZihbXyQwXSldbTRfZHF1b3RlKFskXW00X2luY3IoWyQxXSkpKV8kMCgkQCkKVDI5LDMwCm00X2xvY2F0aW9uKF9BU19FQ0hPX1BSRVBBUkUpLi4vLi4vbGliL200c3VnYXIvbTRzaC5tNDoxMDQ0ClQ4LDI3Cm00X2lmdmFsbTRfaWYoWyQxXSwgW10sIFskM10sIFskMl0pClQ3LDE5NwptNF9jb3B5bTRfaWZkZWYoWyQyXSwgW200X2ZhdGFsKFskMDogd29uJ3Qgb3ZlcndyaXRlIGRlZmluZWQgbWFjcm86ICQyXSldLAoJICBbbTRfc3RhY2tfZm9yZWFjaF9zZXAoWyQxXSwgW200X3B1c2hkZWYoWyQyXSxdLCBbKV0pXSltNF9pZmRlZihbbTRfbG9jYXRpb24oJDEpXSwgW200X2RlZmluZShbbTRfbG9jYXRpb24oJDIpXSwgbTRfbG9jYXRpb24pXSkKVDExLDMxCl9BU19JRl9FTFNFbTRfaWZuYmxhbmsoWyQxXSwKW2Vsc2UKICAkMQpdKQpUMjYsMjkyCl9BU19QQVRIX1NFUEFSQVRPUl9QUkVQQVJFX200X2RlZnVuX3BybyhbJDBdKSMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgppZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgogIFBBVEhfU0VQQVJBVE9SPToKICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSAmJiB7CiAgICAoUEFUSD0nL2JpbjovYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSB8fAogICAgICBQQVRIX1NFUEFSQVRPUj0nOycKICB9CmZpCltdX200X2RlZnVuX2VwaShbJDBdKQpUMTQsMTEzCm00X2V4cGFuZF9vbmNlbTRfcHJvdmlkZV9pZihtNF9kZWZhdWx0X3F1b3RlZChbJDJdLCBbJDFdKSwKCSAgICAgICBbXSwKCSAgICAgICBbbTRfcHJvdmlkZShtNF9kZWZhdWx0X3F1b3RlZChbJDJdLCBbJDFdKSlbXSQxXSkKVDE0LDk2Cl9tNF9icGF0c3Vic3RzbTRfaWYoWyQjXSwgMiwgWyQxXSwKICAgICAgIFskMChtNF9idWlsdGluKFtwYXRzdWJzdF0sIFtbJDFdXSwgWyQyXSwgWyQzXSksCgkgICBtNF9zaGlmdDMoJEApKV0pClQxMyw0MQptNF9wcm92aWRlX2lmbTRfaWZkZWYoW200X3Byb3ZpZGUoJDEpXSwKCSAgWyQyXSwgWyQzXSkKVDE2LDgzOApfQVNfTE5fU19QUkVQQVJFX200X2RlZnVuX3BybyhbJDBdKXJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCmlmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgogIHJtIC1mIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUKZWxzZQogIHJtIC1mIGNvbmYkJC5kaXIKICBta2RpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCmZpCmlmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4KICBpZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KICAgIGFzX2xuX3M9J2xuIC1zJwogICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKICAgICMgMSkgT24gTVNZUywgYm90aCBgbG4gLXMgZmlsZSBkaXInIGFuZCBgbG4gZmlsZSBkaXInIGZhaWwuCiAgICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4KICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcFInLgogICAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAogICAgICBhc19sbl9zPSdjcCAtcFInCiAgZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KICAgIGFzX2xuX3M9bG4KICBlbHNlCiAgICBhc19sbl9zPSdjcCAtcFInCiAgZmkKZWxzZQogIGFzX2xuX3M9J2NwIC1wUicKZmkKcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmRpci9jb25mJCQuZmlsZSBjb25mJCQuZmlsZQpybWRpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCltdX200X2RlZnVuX2VwaShbJDBdKQpUOCwxMDc1CkFTX1VOQU1FewpjYXQgPDxfQVNVTkFNRQptNF90ZXh0X2JveChbUGxhdGZvcm0uXSkKCmhvc3RuYW1lID0gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCnVuYW1lIC1tID0gYCh1bmFtZSAtbSkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAp1bmFtZSAtciA9IGAodW5hbWUgLXIpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKdW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCnVuYW1lIC12ID0gYCh1bmFtZSAtdikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAoKL3Vzci9iaW4vdW5hbWUgLXAgPSBgKC91c3IvYmluL3VuYW1lIC1wKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCi9iaW4vdW5hbWUgLVggICAgID0gYCgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbCAgICAgfHwgZWNobyB1bmtub3duYAoKL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbCAgICAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAovdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCi91c3IvY29udmV4L2dldHN5c2luZm8gPSBgKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKL3Vzci9iaW4vaG9zdGluZm8gICAgICA9IGAoL3Vzci9iaW4vaG9zdGluZm8pIDI+L2Rldi9udWxsICAgICAgfHwgZWNobyB1bmtub3duYAovYmluL21hY2hpbmUgICAgICAgICAgID0gYCgvYmluL21hY2hpbmUpIDI+L2Rldi9udWxsICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCi91c3IvYmluL29zbGV2ZWwgICAgICAgPSBgKC91c3IvYmluL29zbGV2ZWwpIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGwgICAgICAgICAgfHwgZWNobyB1bmtub3duYAoKX0FTVU5BTUUKCl9BU19QQVRIX1dBTEsoWyRQQVRIXSwgW0FTX0VDSE8oWyJQQVRIOiAkYXNfZGlyIl0pXSkKfQpUNywxNgpBU19MTl9TJGFzX2xuX3MgJDEgJDJbXQpUNywxMjkKQVNfTE5fU19tNF9kZWZ1bl9wcm8oWyQwXSlBU19SRVFVSVJFKFtfQVNfTE5fU19QUkVQQVJFXSlbXV9tNF9wb3BkZWYoWyQwXSltNF9pbmRpcihbJDBdbTRfaWYoWyQjXSwgWzBdLCBbXSwgWywkQF0pKVtdX200X2RlZnVuX2VwaShbJDBdKQpUMTgsMjA3Cl9BU19UUl9DUFBfUFJFUEFSRV9tNF9kZWZ1bl9wcm8oWyQwXSlBU19SRVFVSVJFKFtfQVNfQ1JfUFJFUEFSRV0pIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgphc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW1teXyRhc19jcl9hbG51bV1dJV8lZyciCltdX200X2RlZnVuX2VwaShbJDBdKQpUOSw3NQpBU19FU0NBUEVfJDAoWyQxXSwgbTRfaWYoWyQyXSwgW10sIFtbYF0sIFtcIiRdXSwgW200X3N1YnN0cihbJDJdLCBbMF0sIFsxXSksIFskMl1dKSkKVDIwLDQKX200X2RpdmVydF9kaXZlcnNpb25LSUxMClQyNCwyOQptNF9sb2NhdGlvbihfQVNfUFJFUEFSRSkuLi8uLi9saWIvbTRzdWdhci9tNHNoLm00OjMyMgpUMjIsMzAKbTRfbG9jYXRpb24oQVNfRUNIT19OKS4uLy4uL2xpYi9tNHN1Z2FyL200c2gubTQ6MTAzNApUMzAsMzAKbTRfbG9jYXRpb24oX0FTX1RSX1NIX1BSRVBBUkUpLi4vLi4vbGliL200c3VnYXIvbTRzaC5tNDoxODA1ClQyMywzMAptNF9sb2NhdGlvbihBU19NS0RJUl9QKS4uLy4uL2xpYi9tNHN1Z2FyL200c2gubTQ6MTI4OQpGMTIsOApfbTRfdW5kaXZlcnR1bmRpdmVydApUNyw1NApfbTRfY2RybTRfaWYoWyQjXSwgMSwgW10sCiAgICAgICBbLCBtNF9kcXVvdGUobTRfc2hpZnQoJEApKV0pClQxMCw4NgptNF90b3VwcGVybTRfdHJhbnNsaXQoW1skMV1dLCBbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpdLAoJCSAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXSkKVDgsMTkKbTRfY3VycnkkMShtNF9zaGlmdCgkQCwpXyQwClQxNiw1NgpfQVNfVFJfQ1BQX0lORElSYEFTX0VDSE8oWyJfQVNfRVNDQVBFKFtbJDFdXSwgW2BdLCBbXF0pIl0pIHwgJGFzX3RyX2NwcGAKVDE3LDI4Cm00X2RlZmF1bHRfbmJsYW5rbTRfaWZibGFuayhbJDFdLCBbJDJdLCBbJDFdKQpUMjgsMjkKbTRfbG9jYXRpb24oX0FTX0RJUk5BTUVfU0VEKS4uLy4uL2xpYi9tNHN1Z2FyL200c2gubTQ6OTgyClQxOCw1NDAKX0FTX1RSX0NQUF9MSVRFUkFMbTRfdHJhbnNsaXQoW1skMV1dLAogIFsqW11dW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMqJSYnKCkkKywuLzo7PD0+P0BbXF1eYHt8fX5/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8tXSwKICBbUFtdXVtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX10pClQxMiw0OAptNF9yZV9lc2NhcGVtNF9icGF0c3Vic3QoWyQxXSwKCSAgICAgIFtbXVsqKy4/XF4kXV0sIFtcXFwmXSkKVDEyLDI2Cm00X25vcm1hbGl6ZW00X3N0cmlwKG00X2ZsYXR0ZW4oWyQxXSkpClQxOCw0MApfbTRfc2V0X2RpZmZlcmVuY2VtNF9zZXRfY29udGFpbnMoWyQxXSwgWyQyXSwgW10sIFssWyQyXV0pCkYzLDMKZG5sZG5sClQyNywyMDUyCl9BU19WRVJTSU9OX0NPTVBBUkVfUFJFUEFSRV9tNF9kZWZ1bl9wcm8oWyQwXSlbYXNfYXdrX3N0cnZlcnNjbXA9JwogICMgVXNlIG9ubHkgYXdrIGZlYXR1cmVzIHRoYXQgd29yayB3aXRoIDd0aCBlZGl0aW9uIFVuaXggYXdrICgxOTc4KS4KICAjIE15LCB3aGF0IGFuIG9sZCBhd2sgeW91IGhhdmUsIE1yLiBTb2xhcmlzIQogIEVORCB7CiAgICB3aGlsZSAobGVuZ3RoKHYxKSAmJiBsZW5ndGgodjIpKSB7CiAgICAgICMgU2V0IGQxIHRvIGJlIHRoZSBuZXh0IHRoaW5nIHRvIGNvbXBhcmUgZnJvbSB2MSwgYW5kIGxpa2V3aXNlIGZvciBkMi4KICAgICAgIyBOb3JtYWxseSB0aGlzIGlzIGEgc2luZ2xlIGNoYXJhY3RlciwgYnV0IGlmIHYxIGFuZCB2MiBjb250YWluIGRpZ2l0cywKICAgICAgIyBjb21wYXJlIHRoZW0gYXMgaW50ZWdlcnMgYW5kIGZyYWN0aW9ucyBhcyBzdHJ2ZXJzY21wIGRvZXMuCiAgICAgIGlmICh2MSB+IC9eWzAtOV0vICYmIHYyIH4gL15bMC05XS8pIHsKCSMgU3BsaXQgdjEgYW5kIHYyIGludG8gdGhlaXIgbGVhZGluZyBkaWdpdCBzdHJpbmcgY29tcG9uZW50cyBkMSBhbmQgZDIsCgkjIGFuZCBhZHZhbmNlIHYxIGFuZCB2MiBwYXN0IHRoZSBsZWFkaW5nIGRpZ2l0IHN0cmluZ3MuCglmb3IgKGxlbjEgPSAxOyBzdWJzdHIodjEsIGxlbjEgKyAxKSB+IC9eWzAtOV0vOyBsZW4xKyspIGNvbnRpbnVlCglmb3IgKGxlbjIgPSAxOyBzdWJzdHIodjIsIGxlbjIgKyAxKSB+IC9eWzAtOV0vOyBsZW4yKyspIGNvbnRpbnVlCglkMSA9IHN1YnN0cih2MSwgMSwgbGVuMSk7IHYxID0gc3Vic3RyKHYxLCBsZW4xICsgMSkKCWQyID0gc3Vic3RyKHYyLCAxLCBsZW4yKTsgdjIgPSBzdWJzdHIodjIsIGxlbjIgKyAxKQoJaWYgKGQxIH4gL14wLykgewoJICBpZiAoZDIgfiAvXjAvKSB7CgkgICAgIyBDb21wYXJlIHR3byBmcmFjdGlvbnMuCgkgICAgd2hpbGUgKGQxIH4gL14wLyAmJiBkMiB+IC9eMC8pIHsKCSAgICAgIGQxID0gc3Vic3RyKGQxLCAyKTsgbGVuMS0tCgkgICAgICBkMiA9IHN1YnN0cihkMiwgMik7IGxlbjItLQoJICAgIH0KCSAgICBpZiAobGVuMSAhPSBsZW4yICYmICEgKGxlbjEgJiYgbGVuMiAmJiBzdWJzdHIoZDEsIDEsIDEpID09IHN1YnN0cihkMiwgMSwgMSkpKSB7CgkgICAgICAjIFRoZSB0d28gY29tcG9uZW50cyBkaWZmZXIgaW4gbGVuZ3RoLCBhbmQgdGhlIGNvbW1vbiBwcmVmaXgKCSAgICAgICMgY29udGFpbnMgb25seSBsZWFkaW5nIHplcm9zLiAgQ29uc2lkZXIgdGhlIGxvbmdlciB0byBiZSBsZXNzLgoJICAgICAgZDEgPSAtbGVuMQoJICAgICAgZDIgPSAtbGVuMgoJICAgIH0gZWxzZSB7CgkgICAgICAjIE90aGVyd2lzZSwgY29tcGFyZSBhcyBzdHJpbmdzLgoJICAgICAgZDEgPSAieCIgZDEKCSAgICAgIGQyID0gIngiIGQyCgkgICAgfQoJICB9IGVsc2UgewoJICAgICMgQSBmcmFjdGlvbiBpcyBsZXNzIHRoYW4gYW4gaW50ZWdlci4KCSAgICBleGl0IDEKCSAgfQoJfSBlbHNlIHsKCSAgaWYgKGQyIH4gL14wLykgewoJICAgICMgQW4gaW50ZWdlciBpcyBncmVhdGVyIHRoYW4gYSBmcmFjdGlvbi4KCSAgICBleGl0IDIKCSAgfSBlbHNlIHsKCSAgICAjIENvbXBhcmUgdHdvIGludGVnZXJzLgoJICAgIGQxICs9IDAKCSAgICBkMiArPSAwCgkgIH0KCX0KICAgICAgfSBlbHNlIHsKCSMgVGhlIG5vcm1hbCBjYXNlLCB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IGRpZ2l0cy4KCWQxID0gc3Vic3RyKHYxLCAxLCAxKTsgdjEgPSBzdWJzdHIodjEsIDIpCglkMiA9IHN1YnN0cih2MiwgMSwgMSk7IHYyID0gc3Vic3RyKHYyLCAyKQogICAgICB9CiAgICAgIGlmIChkMSA8IGQyKSBleGl0IDEKICAgICAgaWYgKGQxID4gZDIpIGV4aXQgMgogICAgfQogICAgIyBCZXdhcmUgU29sYXJpcyAvdXNyL3hncDQvYmluL2F3ayAoYXQgbGVhc3QgdGhyb3VnaCBTb2xhcmlzIDEwKSwKICAgICMgd2hpY2ggbWlzaGFuZGxlcyBzb21lIGNvbXBhcmlzb25zIG9mIGVtcHR5IHN0cmluZ3MgdG8gaW50ZWdlcnMuCiAgICBpZiAobGVuZ3RoKHYyKSkgZXhpdCAxCiAgICBpZiAobGVuZ3RoKHYxKSkgZXhpdCAyCiAgfQonXVtdX200X2RlZnVuX2VwaShbJDBdKQpUMTQsMTE2CkFTX0xJTkVOT19QVVNIX200X2RlZnVuX3BybyhbJDBdKWFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2tbXV9tNF9kZWZ1bl9lcGkoWyQwXSkKRjEyLDgKX200X3VuZGVmaW5ldW5kZWZpbmUKVDEwLDc5Cl9tNF9zaGlmdG5tNF9pZihbJDFdLCAxLCBbbTRfc2hpZnQoXSwKICAgICAgIFskMChtNF9kZWNyKFskMV0pXSksIG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpClQyMCwxNzAKX200X3ZlcnNpb25fdW5sZXR0ZXJtNF9icGF0c3Vic3QobTRfYnBhdHN1YnN0KG00X3RyYW5zbGl0KFtbW1swLCQxXV1dXSwgWy4tXSwgWywsXSksW1thYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXV1bK10sCgkgICAgICBbKzEsLTEsWzByMzY6XCZdXSksIFssMF0sIFssWzByMTA6MF1dKQpUNyw2NzYKQVNfSU5JVCMgV3JhcCBvdXIgY2xlYW51cCBwcmlvciB0byBtNHN1Z2FyJ3MgY2xlYW51cC4KbTRfd3JhcChbX0FTX0NMRUFOVVBdKQptNF9pbml0Cm00X3Byb3ZpZGUoW0FTX0lOSVRdKQoKIyBGb3JiaWRkZW4gdG9rZW5zIGFuZCBleGNlcHRpb25zLgptNF9wYXR0ZXJuX2ZvcmJpZChbXl8/QVNfXSkKCiMgQmFuZ3NoZSBhbmQgbWluaW1hbCBpbml0aWFsaXphdGlvbi4KbTRfZGl2ZXJ0X3RleHQoW0JJTlNIXSwgW0AlOkAhIC9iaW4vc2hdKQptNF9kaXZlcnRfdGV4dChbSEVBREVSLUNPTU1FTlRdLAoJICAgICAgIFtAJTpAIEdlbmVyYXRlZCBmcm9tIF9fZmlsZV9fIGJ5IG00X1BBQ0tBR0VfU1RSSU5HLl0pCm00X2RpdmVydF90ZXh0KFtNNFNILVNBTklUSVpFXSwgW19BU19TSEVMTF9TQU5JVElaRV0pCm00X2RpdmVydF90ZXh0KFtNNFNILUlOSVQtRk5dLCBbbTRfdGV4dF9ib3goW000c2ggU2hlbGwgRnVuY3Rpb25zLl0pXSkKCiMgTGV0J3MgZ28hCm00X2RpdmVydChbQk9EWV0pZG5sCm00X3RleHRfYm94KFtNYWluIGJvZHkgb2Ygc2NyaXB0Ll0pCl9BU19ERVRFQ1RfUkVRVUlSRUQoW19BU19TSEVMTF9GTl9XT1JLXSlkbmwKX0FTX0RFVEVDVF9SRVFVSVJFRChbX0FTX1RFU1RfWF9XT1JLU10pZG5sCkFTX1JFUVVJUkUoW19BU19VTlNFVF9QUkVQQVJFXSwgW10sIFtNNFNILUlOSVQtRk5dKWRubAoKVDExLDEzNgptNF91bmRpdmVydG00X2lmKFskI10sIFswXSwgW200X2ZhdGFsKFskMDogbWlzc2luZyBhcmd1bWVudF0pXSwKICAgICAgIFskI10sIFsxXSwgW19tNF91bmRpdmVydChfbTRfZGl2ZXJ0KFskMV0pKV0sCiAgICAgICBbbTRfbWFwX2FyZ3MoWyQwXSwgJEApXSkKVDE1LDc2Cl9BU19CT1hfTElURVJBTEFTX0VDSE8oWyJfQVNfRVNDQVBFKG00X2RxdW90ZShtNF9leHBhbmQoW200X3RleHRfYm94KCRAKV0pKSwgW2BdLCBbXCIkXSkiXSkKVDEwLDQxMgptNF9yZXF1aXJlbTRfaWZkZWYoW19tNF9leHBhbmRpbmcoJDEpXSwKICBbbTRfZmF0YWwoWyQwOiBjaXJjdWxhciBkZXBlbmRlbmN5IG9mICQxXSldKW00X2lmKF9tNF9kaXZlcnRfZHVtcCwgW10sCiAgW200X2ZhdGFsKFskMCgkMSk6IGNhbm5vdCBiZSB1c2VkIG91dHNpZGUgb2YgYW4gXWRubAptNF9pZihbJDBdLCBbbTRfcmVxdWlyZV0sIFtbbTRfZGVmdW5dXSwgW1tBQ19ERUZVTl1dKVsnZCBtYWNyb10pXSltNF9wcm92aWRlX2lmKFskMV0sIFttNF9zZXRfY29udGFpbnMoW19tNF9wcm92aWRlXSwgWyQxXSwKICAgIFtfbTRfcmVxdWlyZV9jaGVjayhbJDFdLCBfbTRfZGVmbihbbTRfcHJvdmlkZSgkMSldKSwgWyQwXSldLCBbbTRfaWdub3JlXSldLAogIFtfbTRfcmVxdWlyZV9jYWxsXSkoWyQxXSwgWyQyXSwgX200X2RpdmVydF9kdW1wKQpUNywxMTkKbTRfY2FzZW00X2lmKFskI10sIDAsIFtdLAogICAgICAgWyQjXSwgMSwgW10sCiAgICAgICBbJCNdLCAyLCBbJDJdLAogICAgICAgWyQxXSwgWyQyXSwgWyQzXSwKICAgICAgIFskMChbJDFdLCBtNF9zaGlmdDMoJEApKV0pClQxMSw1NQptNF9zaW5jbHVkZW00X2luY2x1ZGVfdW5pcXVlKFskMV0pZG5sCm00X2J1aWx0aW4oW3NpbmNsdWRlXSwgWyQxXSkKVDI1LDIKX0FTX0xJVEVSQUxfSEVSRURPQ19JRl9OTyQyClQ5LDI1NQptNF9jcl9hbGwBAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyolJicoKSQrLC4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/y0KVDE5LDYyCm00X3ZlcnNpb25fdW5sZXR0ZXJtNF9zdWJzdHIobTRfbWFwX2FyZ3MoWy5tNF9ldmFsXSwgbTRfdW5xdW90ZShfJDAoWyQxXSkpKSwgWzNdKQpUMTcsMzIKbTRfZGVmaW5lX2RlZmF1bHRtNF9pZm5kZWYoWyQxXSwgW200X2RlZmluZSgkQCldKQpUMjEsNjk2Cl9BU19SRUVYRUNfV0lUSF9TSEVMTF9tNF9kZWZ1bl9wcm8oWyQwXSlkbmwKIyBXZSBjYW5ub3QgeWV0IGFzc3VtZSBhIGRlY2VudCBzaGVsbCwgc28gd2UgaGF2ZSB0byBwcm92aWRlIGEKIyBuZXV0cmFsaXphdGlvbiB2YWx1ZSBmb3Igc2hlbGxzIHdpdGhvdXQgdW5zZXQ7IGFuZCB0aGlzIGFsc28KIyB3b3JrcyBhcm91bmQgc2hlbGxzIHRoYXQgY2Fubm90IHVuc2V0IG5vbmV4aXN0ZW50IHZhcmlhYmxlcy4KIyBQcmVzZXJ2ZSAtdiBhbmQgLXggdG8gdGhlIHJlcGxhY2VtZW50IHNoZWxsLgpCQVNIX0VOVj0vZGV2L251bGwKRU5WPS9kZXYvbnVsbAoodW5zZXQgQkFTSF9FTlYpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBCQVNIX0VOViBFTlYKY2FzZSAkLSBpbiBAJTpAICgoKCgKICAqdip4KiB8ICp4KnYqICkgYXNfb3B0cz0tdnggOzsKICAqdiogKSBhc19vcHRzPS12IDs7CiAgKngqICkgYXNfb3B0cz0teCA7OwogICogKSBhc19vcHRzPSA7Owplc2FjCmV4ZWMgJDEgJGFzX29wdHMgIiRhc19teXNlbGYiICR7MSsiJFtAXSJ9CiMgQWRtaXR0ZWRseSwgdGhpcyBpcyBxdWl0ZSBwYXJhbm9pZCwgc2luY2UgYWxsIHRoZSBrbm93biBzaGVsbHMgYmFpbAojIG91dCBhZnRlciBhIGZhaWxlZCBgZXhlYycuCkFTX0VDSE8oWyIkW10wOiBjb3VsZCBub3QgcmUtZXhlY3V0ZSB3aXRoICQxIl0pID4mMgpBU19FWElUKFsyNTVdKVtdX200X2RlZnVuX2VwaShbJDBdKQpUMTEsMTYwCm00X3VuZGVmaW5lbTRfaWYoWyQjXSwgWzBdLCBbWyQwXV0sCiAgICAgICBbJCNdLCBbMV0sIFttNF9pZmRlZihbJDFdLCBbX200X3VuZGVmaW5lKFskMV0pXSwKCQkJICAgIFttNF9mYXRhbChbJDA6IHVuZGVmaW5lZCBtYWNybzogJDFdKV0pXSwKICAgICAgIFttNF9tYXBfYXJncyhbJDBdLCAkQCldKQpUMTUsMTIKbTRfUEFDS0FHRV9OQU1FR05VIEF1dG9jb25mCkYxMCw3Cm00X2J1aWx0aW5idWlsdGluClQxMCwyNjYKQVNfUkVRVUlSRV9tNF9kZWZ1bl9wcm8oWyQwXSltNF9kZWZpbmUoW19tNF9kaXZlcnRfZGVzaXJlZF0sIFttNF9kZWZhdWx0X3F1b3RlZChbJDNdLCBbTTRTSC1JTklUXSldKW00X2lmKG00X2V2YWwoX200X2RpdmVydF9kdW1wIC0gMCA8PSBfbTRfZGl2ZXJ0KF9tNF9kaXZlcnRfZGVzaXJlZCwgWy1dKSksCiAgICAgICAxLCBbbTRfcmVxdWlyZShdLAoJICBbbTRfZGl2ZXJ0X3JlcXVpcmUoX200X2RpdmVydF9kZXNpcmVkLF0pIFskMV0sIFskMl0pW11fbTRfZGVmdW5fZXBpKFskMF0pClQxNCw0NAptNF9kaXZlcnRfb25jZW00X2V4cGFuZF9vbmNlKFttNF9kaXZlcnRfdGV4dChbJDFdLCBbJDJdKV0pClQxMSwxNDYKX200X2V4cGFuZF9tNF9pZihbJDRdLCBbfT49LV0sCiAgICAgICBbbTRfY2hhbmdlcXVvdGUoWy09PHskMl0sIFspfT49LV0pJDNtNF9jaGFuZ2VxdW90ZShbLCBdKV0sCiAgICAgICBbJDAoWyQxXSwgWygkMl0sIC09PHsoJDIkMSl9Pj0tLCBbfT49LV0pbTRfaWdub3JlJDJdKQpUMjksMjkKbTRfbG9jYXRpb24oX0FTX0JBU0VOQU1FX1NFRCkuLi8uLi9saWIvbTRzdWdhci9tNHNoLm00OjkyNgpUMTcsNjQKX200X2RpdmVydF91bnNhZmVtNF9mYXRhbChbJDA6IGNhbm5vdCBjaGFuZ2UgZGl2ZXJzaW9uIHRvIGAkMScgaW5zaWRlIG00X2V4cGFuZF0pClQ4LDk5Cl9tNF9jb25kbTRfaWYoKCQxKSwgWygkMildLCBbJDNdLAogICAgICAgWyQjXSwgWzNdLCBbXSwKICAgICAgIFskI10sIFs0XSwgWyQ0XSwKICAgICAgIFskMChtNF9zaGlmdDMoJEApKV0pClQxNiwwCm00X3BhdHRlcm5fYWxsb3cKVDE3LDI1MwptNF9kaXZlcnRfcmVxdWlyZW00X2lmZGVmKFtfbTRfZXhwYW5kaW5nKCQyKV0sCiAgW200X2ZhdGFsKFskMDogY2lyY3VsYXIgZGVwZW5kZW5jeSBvZiAkMl0pXSltNF9pZihfbTRfZGl2ZXJ0X2R1bXAsIFtdLAogIFttNF9mYXRhbChbJDAoJDIpOiBjYW5ub3QgYmUgdXNlZCBvdXRzaWRlIG9mIGFuIG00X2RlZnVuJ2QgbWFjcm9dKV0pbTRfcHJvdmlkZV9pZihbJDJdLCBbXSwKICBbX200X3JlcXVpcmVfY2FsbChbJDJdLCBbJDNdLCBfbTRfZGl2ZXJ0KFskMV0sIFstXSkpXSkKRjksNgptNF9zeXN2YWxzeXN2YWwKVDEzLDkxCkFTX1NFVF9TVEFUVVNfbTRfZGVmdW5fcHJvKFskMF0pQVNfUkVRVUlSRShbX0FTX0VYSVRfUFJFUEFSRV0pW11hc19mbl9zZXRfc3RhdHVzICQxW11fbTRfZGVmdW5fZXBpKFskMF0pClQyMiw1MjcKX0FTX1ZBUl9BUFBFTkRfUFJFUEFSRV9tNF9kZWZ1bl9wcm8oWyQwXSlBU19GVU5DVElPTl9ERVNDUklCRShbYXNfZm5fYXBwZW5kXSwgW1ZBUiBWQUxVRV0sCltBcHBlbmQgdGhlIHRleHQgaW4gVkFMVUUgdG8gdGhlIGVuZCBvZiB0aGUgZGVmaW5pdGlvbiBjb250YWluZWQgaW4KVkFSLiAgVGFrZSBhZHZhbnRhZ2Ugb2YgYW55IHNoZWxsIG9wdGltaXphdGlvbnMgdGhhdCBhbGxvdyBhbW9ydGl6ZWQKbGluZWFyIGdyb3d0aCBvdmVyIHJlcGVhdGVkIGFwcGVuZHMsIGluc3RlYWQgb2YgdGhlIHR5cGljYWwgcXVhZHJhdGljCmdyb3d0aCBwcmVzZW50IGluIG5haXZlIGltcGxlbWVudGF0aW9ucy5dKQpBU19JRihbX0FTX1JVTihbIkFTX0VTQ0FQRShtNF9xdW90ZShfQVNfVkFSX0FQUEVORF9XT1JLUykpIl0pXSwKW2V2YWwgJ2FzX2ZuX2FwcGVuZCAoKQogIHsKICAgIGV2YWwgJFtdMSs9XCRbXTIKICB9J10sClthc19mbl9hcHBlbmQgKCkKICB7CiAgICBldmFsICRbXTE9XCQkW10xXCRbXTIKICB9XSkgIyBhc19mbl9hcHBlbmQKW11fbTRfZGVmdW5fZXBpKFskMF0pClQxNywwCm00X3BhdHRlcm5fZm9yYmlkClQ5LDY5Cm00X2Fzc2VydG00X2lmKG00X2V2YWwoWyQxXSksIDAsCiAgICAgICBbbTRfZmF0YWwoW2Fzc2VydCBmYWlsZWQ6ICQxXSwgWyQyXSldKQpGMTAsNwptNF9wdXNoZGVmcHVzaGRlZgpUMjAsNTMKbTRfZGl2ZXJ0X3N0YWNrX3B1c2htNF9wdXNoZGVmKFtfbTRfZGl2ZXJ0X3N0YWNrXSwgbTRfbG9jYXRpb25bOiAkMTogJDJdKQpUMTcsMTA1Cl9tNF9kZWZpbmVfY3Jfbm90bTRfZGVmaW5lKFttNF9jcl9ub3RfJDFdLAoJICAgbTRfdHJhbnNsaXQobTRfZHF1b3RlKG00X2RlZm4oW200X2NyX2FsbF0pKSwKCQkgICAgICAgbTRfZGVmbihbbTRfY3JfJDFdKSkpClQxOSwyMQpfQVNfVkFSX0FSSVRIX1dPUktTdGVzdCAkKCggMSArIDEgKSkgPSAyClQyMywzOQptNF9leHBhbnNpb25fc3RhY2tfcHVzaG00X3B1c2hkZWYoW19tNF9leHBhbnNpb25fc3RhY2tdLCBbJDFdKQpUMTQsMTk5CkFTX1NFVF9DQVRGSUxFY2FzZSAkMiBpbiBAJTpAKCgKLikgQVNfVkFSX1NFVChbJDFdLCBbJDNdKTs7CiopCiAgY2FzZSAkMyBpbiBAJTpAKCgoCiAgLikgQVNfVkFSX1NFVChbJDFdLCBbJDJdKTs7CiAgW1tcXC9dXSogfCA/OltbXFwvXV0qICkgQVNfVkFSX1NFVChbJDFdLCBbJDNdKTs7CiAgKikgQVNfVkFSX1NFVChbJDFdLCBbJDIvJDNdKTs7CiAgZXNhYzs7CmVzYWNbXQpUMzQsMzAKbTRfbG9jYXRpb24oX0FTX1ZBUl9BUklUSF9QUkVQQVJFKS4uLy4uL2xpYi9tNHN1Z2FyL200c2gubTQ6MTk0OApUMTMsMjYKbTRfY3JfbGV0dGVyc2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6ClQ3LDEzCkFTX0VDSE8kYXNfZWNobyAkMVtdClQ3LDEyNApBU19FQ0hPX200X2RlZnVuX3BybyhbJDBdKUFTX1JFUVVJUkUoW18kMF9QUkVQQVJFXSlbXV9tNF9wb3BkZWYoWyQwXSltNF9pbmRpcihbJDBdbTRfaWYoWyQjXSwgWzBdLCBbXSwgWywkQF0pKVtdX200X2RlZnVuX2VwaShbJDBdKQpUMTAsMzYKX200X2V4cGFuZCQwXyhbJDFdLCBbKF0sIC09PHsoJDEpfT49LSwgW30+PS1dKQpUMjYsMTA0Cl9BU19ERVRFQ1RfU1VHR0VTVEVEX1BSVU5FbTRfc2V0X2NvbnRhaW5zKFtfQVNfREVURUNUX1JFUVVJUkVEX0JPRFldLCBbJDFdLAoJCSBbbTRfc2V0X3JlbW92ZShbX0FTX0RFVEVDVF9TVUdHRVNURURfQk9EWV0sIFskMV0pXSkKVDExLDE0OQptNF9tYXBfYXJnc200X2lmKFskI10sIFswXSwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjXSldLAogICAgICAgWyQjXSwgWzFdLCBbXSwKICAgICAgIFskI10sIFsyXSwgWyQxKFskMl0pW11dLAogICAgICAgW19tNF9mb3JlYWNoKFskMShdLCBbKV0sICRAKV0pClQxOSwyODgKX200X3NldF9jb250ZW50c18xY200X2lmZGVmKFtfbTRfc2V0KFskMV0pXSwKCSAgW200X3NldF9jb250YWlucyhbJDFdLCBfbTRfZGVmbihbX200X3NldChbJDFdKV0pLAoJCSAgIFttNF9wdXNoZGVmKFtfbTRfc2V0XygkMSldLCBfbTRfZGVmbihbX200X3NldChbJDFdKV0pKV0sCgkJICAgW19tNF9wb3BkZWYoW19tNF9zZXQoWyQxXSxdX200X2RlZm4oCiAgICAgIFtfbTRfc2V0KFskMV0pXSlbKV0pXSlfbTRfcG9wZGVmKFtfbTRfc2V0KFskMV0pXSkkMChbJDFdKV0sCgkgIFtfbTRfcG9wZGVmKFtfbTRfc2V0X2NsZWFudXAoJDEpXSldKQpUNyw2NQpfbTRfbWlubTRfZXZhbCgoKFskMV0pIDwgKFskMl0pKSAqIChbJDFdKSArICgoWyQxXSkgPj0gKFskMl0pKSAqIChbJDJdKSkKVDE0LDE4MApBU19IRUxQX1NUUklOR200X3RleHRfd3JhcChbJDJdLCBtNF9jb25kKFtbJDNdXSwgW10sIFsgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCgkJCSAgICBbbTRfZXZhbChbJDNdKzApXSwgWzBdLCBbWyQzXV0sCgkJCSAgICBbbTRfZm9ybWF0KFtbJSpzXV0sIFskM10sIFtdKV0pLAoJICAgICAgbTRfZXhwYW5kKFsgICQxIF0pLCBbJDRdKQpGOCw1Cm00X3NoaWZ0c2hpZnQKVDE2LDQ1MgpfbTRfcmVxdWlyZV9jYWxsbTRfcHVzaGRlZihbX200X2RpdmVydF9ncm93XSwgbTRfZGVjcihfbTRfZGl2ZXJ0X2dyb3cpKW00X3B1c2hkZWYoW19tNF9kaXZlcnRpbmcoWyQxXSldKW00X3B1c2hkZWYoW19tNF9kaXZlcnRpbmddLCBbJDFdKW00X2RpdmVydF9wdXNoKF9tNF9kaXZlcnRfZ3JvdywgWy1dKW00X2lmKFskMl0sIFtdLCBbJDFdLCBbJDJdKQptNF9wcm92aWRlX2lmKFskMV0sIFttNF9zZXRfcmVtb3ZlKFtfbTRfcHJvdmlkZV0sIFskMV0pXSwKICBbbTRfd2Fybihbc3ludGF4XSwgWyQxIGlzIG00X3JlcXVpcmUnZCBidXQgbm90IG00X2RlZnVuJ2RdKV0pX200X2RpdmVydF9yYXcoJDMpX200X3VuZGl2ZXJ0KF9tNF9kaXZlcnRfZ3JvdyltNF9kaXZlcnRfcG9wKF9tNF9kaXZlcnRfZ3JvdylfbTRfcG9wZGVmKFtfbTRfZGl2ZXJ0X2dyb3ddLApbX200X2RpdmVydGluZyhbJDFdKV0sIFtfbTRfZGl2ZXJ0aW5nXSkKVDExLDcwCl9tNF9mb3JlYWNobTRfaWYoWyQjXSwgWzNdLCBbXSwKICAgICAgIFskMVskNF0kMltdJDAoWyQxXSwgWyQyXSwgbTRfc2hpZnQzKCRAKSldKQpUNyw2NQpfbTRfbWF4bTRfZXZhbCgoKFskMV0pID4gKFskMl0pKSAqIChbJDFdKSArICgoWyQxXSkgPD0gKFskMl0pKSAqIChbJDJdKSkKRjgsOApfX2ZpbGVfX19fZmlsZV9fClQxOCwyCl9BU19MSVRFUkFMX0lGX1lFUyQzCkYxMCw2Cm00X2JyZWdleHByZWdleHAKVDE0LDEwMwpfQVNfVFJfUFJFUEFSRV9tNF9kZWZ1bl9wcm8oWyQwXSlBU19SRVFVSVJFKFtfQVNfVFJfU0hfUFJFUEFSRV0pQVNfUkVRVUlSRShbX0FTX1RSX0NQUF9QUkVQQVJFXSlbXV9tNF9kZWZ1bl9lcGkoWyQwXSkKVDEyLDQ3CkFTX1ZBUl9BUklUSGFzX2ZuX2FyaXRoICQyICYmIEFTX1ZBUl9TRVQoWyQxXSwgWyRhc192YWxdKVtdClQxMiwxOTcKQVNfVkFSX0FSSVRIX200X2RlZnVuX3BybyhbJDBdKV9BU19ERVRFQ1RfU1VHR0VTVEVEKFtfQVNfVkFSX0FSSVRIX1dPUktTXSlBU19SRVFVSVJFKFtfQVNfVkFSX0FSSVRIX1BSRVBBUkVdLCBbXSwgW000U0gtSU5JVC1GTl0pW11fbTRfcG9wZGVmKFskMF0pbTRfaW5kaXIoWyQwXW00X2lmKFskI10sIFswXSwgW10sIFssJEBdKSlbXV9tNF9kZWZ1bl9lcGkoWyQwXSkKVDEwLDgyCkFTX0RJUk5BTUUkYXNfZGlybmFtZSAtLSAkMSB8fApfQVNfRElSTkFNRV9FWFBSKFskMV0pIDI+L2Rldi9udWxsIHx8Cl9BU19ESVJOQU1FX1NFRChbJDFdKVtdClQxMCwxMjQKQVNfRElSTkFNRV9tNF9kZWZ1bl9wcm8oWyQwXSlBU19SRVFVSVJFKFtfJDBfUFJFUEFSRV0pW11fbTRfcG9wZGVmKFskMF0pbTRfaW5kaXIoWyQwXW00X2lmKFskI10sIFswXSwgW10sIFssJEBdKSlbXV9tNF9kZWZ1bl9lcGkoWyQwXSkKVDMzLDI5Cm00X2xvY2F0aW9uKF9BU19CQVNFTkFNRV9QUkVQQVJFKS4uLy4uL2xpYi9tNHN1Z2FyL200c2gubTQ6OTU0ClQxMyw0MgptNF9tYXBhbGxfc2VwbTRfaWYoWyQzXSwgW10sIFtdLCBbXyQwKFskMV0sIFskMl0sICQzKV0pClQ5LDI2Cm00X2lmbmRlZm00X2lmZGVmKFskMV0sIFskM10sIFskMl0pClQxOCwxNDQKQVNfVkVSU0lPTl9DT01QQVJFYXNfYXJnX3YxPSQxCmFzX2FyZ192Mj0kMgphd2sgIiRhc19hd2tfc3RydmVyc2NtcCIgdjE9IiRhc19hcmdfdjEiIHYyPSIkYXNfYXJnX3YyIiAvZGV2L251bGwKQVNfQ0FTRShbJD9dLAoJWzFdLCBbJDNdLAoJWzBdLCBbJDRdLAoJWzJdLCBbJDVdKVtdClQxOCwxMjQKQVNfVkVSU0lPTl9DT01QQVJFX200X2RlZnVuX3BybyhbJDBdKUFTX1JFUVVJUkUoW18kMF9QUkVQQVJFXSlbXV9tNF9wb3BkZWYoWyQwXSltNF9pbmRpcihbJDBdbTRfaWYoWyQjXSwgWzBdLCBbXSwgWywkQF0pKVtdX200X2RlZnVuX2VwaShbJDBdKQpUMTMsNDcKbTRfY29weV9mb3JjZW00X2lmZGVmKFskMl0sIFtfbTRfdW5kZWZpbmUoWyQyXSldKW00X2NvcHkoJEApClQ3LDEwOAptNF9qb2lubTRfaWYoWyQjXSwgWzFdLCBbXSwKICAgICAgIFskI10sIFsyXSwgW1skMl1dLAogICAgICAgW200X2lmKFskMl0sIFtdLCBbXSwgW1skMl1fXSkkMChbJDFdLCBtNF9zaGlmdDIoJEApKV0pClQyMywzMTczCl9BU19ERVRFQ1RfQkVUVEVSX1NIRUxMX200X2RlZnVuX3BybyhbJDBdKW00X2lmKF9BU19GT1JDRV9SRUVYRUNfV0lUSF9DT05GSUdfU0hFTEwsIFt5ZXNdLAogIFsjIFVzZSBhIHByb3BlciBpbnRlcm5hbCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBlbnN1cmUgd2UgZG9uJ3QgZmFsbAogICMgaW50byBhbiBpbmZpbml0ZSBsb29wLCBjb250aW51b3VzbHkgcmUtZXhlY3V0aW5nIG91cnNlbHZlcy4KICBpZiB0ZXN0IHgiJHtfYXNfY2FuX3JlZXhlY30iICE9IHhubyAmJiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgIT0geDsgdGhlbgogICAgX2FzX2Nhbl9yZWV4ZWM9bm87IGV4cG9ydCBfYXNfY2FuX3JlZXhlYzsKICAgIF9BU19SRUVYRUNfV0lUSF9TSEVMTChbJENPTkZJR19TSEVMTF0pCiAgZmkKICAjIFdlIGRvbid0IHdhbnQgdGhpcyB0byBwcm9wYWdhdGUgdG8gb3RoZXIgc3VicHJvY2Vzc2VzLgogIGRubCBUaGlzIG1pZ2h0IGJlIGVzcGVjaWFsbHkgaW1wb3J0YW50IGluIGNhc2UgYW4gbTRzaC1nZW5lcmF0ZWQgc2NyaXB0CiAgZG5sIGlzIHVzZWQgdG8gbGF0ZXIgZXhlY3V0ZSBvdGhlciBtNHNoLWdlbmVyYXRlZCBzY3JpcHRzLiAgVGhpcyBoYXBwZW5zCiAgZG5sIGZvciBleGFtcGxlIGluIGF1dG9jb25mJ3Mgb3duIHRlc3RzdWl0ZSAoYW5kIGhhcHBlbnMgKmEgbG90KiB0aGVyZSwKICBkbmwgaW4gZmFjdCkuCiAgQVNfVU5TRVQoW19hc19jYW5fcmVleGVjXSkKXSltNF9zZXRfbWFwKFtfQVNfREVURUNUX1NVR0dFU1RFRF9CT0RZXSwgW19BU19ERVRFQ1RfU1VHR0VTVEVEX1BSVU5FXSltNF9wdXNoZGVmKFtBU19FWElUXSwgW2V4aXQgbTRfZGVmYXVsdChdbTRfZHF1b3RlKFskXVsxXSlbLCAxKV0paWYgdGVzdCAieCRDT05GSUdfU0hFTEwiID0geDsgdGhlbgogIGFzX2JvdXJuZV9jb21wYXRpYmxlPSJBU19FU0NBUEUoX200X2V4cGFuZChbX0FTX0JPVVJORV9DT01QQVRJQkxFXSkpIgogIF9BU19ERVRFQ1RfRVhQQU5EKFthc19yZXF1aXJlZF0sIFtfQVNfREVURUNUX1JFUVVJUkVEX0JPRFldKQogIF9BU19ERVRFQ1RfRVhQQU5EKFthc19zdWdnZXN0ZWRdLCBbX0FTX0RFVEVDVF9TVUdHRVNURURfQk9EWV0pCiAgQVNfSUYoW19BU19SVU4oWyIkYXNfcmVxdWlyZWQiXSldLAoJW2FzX2hhdmVfcmVxdWlyZWQ9eWVzXSwKCVthc19oYXZlX3JlcXVpcmVkPW5vXSkKICBBU19JRihbdGVzdCB4JGFzX2hhdmVfcmVxdWlyZWQgPSB4eWVzICYmIF9BU19SVU4oWyIkYXNfc3VnZ2VzdGVkIl0pXSwKICAgIFtdLAogICAgW19BU19QQVRIX1dBTEsoWy9iaW4kUEFUSF9TRVBBUkFUT1IvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIXSwKICAgICAgW2Nhc2UgJGFzX2RpciBpbiBAJTpAKAoJIC8qKQoJICAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbwoJICAgICAjIFRyeSBvbmx5IHNoZWxscyB0aGF0IGV4aXN0LCB0byBzYXZlIHNldmVyYWwgZm9ya3MuCgkgICAgIGFzX3NoZWxsPSRhc19kaXIvJGFzX2Jhc2UKCSAgICAgQVNfSUYoW3sgdGVzdCAtZiAiJGFzX3NoZWxsIiB8fCB0ZXN0IC1mICIkYXNfc2hlbGwuZXhlIjsgfSAmJgoJCSAgICBfQVNfUlVOKFsiJGFzX3JlcXVpcmVkIl0sIFsiJGFzX3NoZWxsIl0pXSwKCQkgICBbQ09ORklHX1NIRUxMPSRhc19zaGVsbCBhc19oYXZlX3JlcXVpcmVkPXllcwoJCSAgIG00X3NldF9lbXB0eShbX0FTX0RFVEVDVF9TVUdHRVNURURfQk9EWV0sIFticmVhayAyXSwKCQkgICAgIFtBU19JRihbX0FTX1JVTihbIiRhc19zdWdnZXN0ZWQiXSwgWyIkYXNfc2hlbGwiXSldLAoJCQkgICAgW2JyZWFrIDJdKV0pXSkKCSAgIGRvbmU7OwogICAgICAgZXNhY10sCiAgICAgIFtBU19JRihbeyB0ZXN0IC1mICIkU0hFTEwiIHx8IHRlc3QgLWYgIiRTSEVMTC5leGUiOyB9ICYmCgkgICAgICBfQVNfUlVOKFsiJGFzX3JlcXVpcmVkIl0sIFsiJFNIRUxMIl0pXSwKCSAgICAgW0NPTkZJR19TSEVMTD0kU0hFTEwgYXNfaGF2ZV9yZXF1aXJlZD15ZXNdKV0pCgogICAgICBBU19JRihbdGVzdCAieCRDT05GSUdfU0hFTEwiICE9IHhdLAogICAgICAgICAgICBbZXhwb3J0IENPTkZJR19TSEVMTAogICAgICAgICAgICAgX0FTX1JFRVhFQ19XSVRIX1NIRUxMKFskQ09ORklHX1NIRUxMXSldKQoKZG5sIFVuZm9ydHVuYXRlbHksICRhc19tZSBpc24ndCBhdmFpbGFibGUgaGVyZS4KICAgIEFTX0lGKFt0ZXN0IHgkYXNfaGF2ZV9yZXF1aXJlZCA9IHhub10sCiAgICAgIFtBU19FQ0hPKFsiJFtdMDogVGhpcyBzY3JpcHQgcmVxdWlyZXMgYSBzaGVsbCBtb3JlIG1vZGVybiB0aGFuIGFsbCJdKQogIEFTX0VDSE8oWyIkW10wOiB0aGUgc2hlbGxzIHRoYXQgSSBmb3VuZCBvbiB5b3VyIHN5c3RlbS4iXSkKICBpZiB0ZXN0IHgke1pTSF9WRVJTSU9OK3NldH0gPSB4c2V0IDsgdGhlbgogICAgQVNfRUNITyhbIiRbXTA6IEluIHBhcnRpY3VsYXIsIHpzaCAkWlNIX1ZFUlNJT04gaGFzIGJ1Z3MgYW5kIHNob3VsZCJdKQogICAgQVNfRUNITyhbIiRbXTA6IGJlIHVwZ3JhZGVkIHRvIHpzaCA0LjMuNCBvciBsYXRlci4iXSkKICBlbHNlCiAgICBBU19FQ0hPKCJtNF90ZXh0X3dyYXAoW1BsZWFzZSB0ZWxsIF1fbTRfZGVmbihbbTRfUEFDS0FHRV9CVUdSRVBPUlRdKQptNF9pZnNldChbQUNfUEFDS0FHRV9CVUdSRVBPUlRdLCBbbTRfaWYoX200X2RlZm4oW200X1BBQ0tBR0VfQlVHUkVQT1JUXSksCl9tNF9kZWZuKFtBQ19QQUNLQUdFX0JVR1JFUE9SVF0pLCBbXSwgW2FuZCBfbTRfZGVmbihbQUNfUEFDS0FHRV9CVUdSRVBPUlRdKV0pXSkKW2Fib3V0IHlvdXIgc3lzdGVtLCBpbmNsdWRpbmcgYW55IGVycm9yIHBvc3NpYmx5IG91dHB1dCBiZWZvcmUgdGhpcyBtZXNzYWdlLgpUaGVuIGluc3RhbGwgYSBtb2Rlcm4gc2hlbGwsIG9yIG1hbnVhbGx5IHJ1biB0aGUgc2NyaXB0IHVuZGVyIHN1Y2ggYQpzaGVsbCBpZiB5b3UgZG8gaGF2ZSBvbmUuXSwgWyRbXTA6IF0sIFtdLCBbNjJdKSIpCiAgZmkKICBBU19FWElUXSldKQpmaQpTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQpleHBvcnQgU0hFTEwKIyBVbnNldCBtb3JlIHZhcmlhYmxlcyBrbm93biB0byBpbnRlcmZlcmUgd2l0aCBiZWhhdmlvciBvZiBjb21tb24gdG9vbHMuCkNMSUNPTE9SX0ZPUkNFPSBHUkVQX09QVElPTlM9CnVuc2V0IENMSUNPTE9SX0ZPUkNFIEdSRVBfT1BUSU9OUwpfbTRfcG9wZGVmKFtBU19FWElUXSlbXV9tNF9kZWZ1bl9lcGkoWyQwXSkKVDI2LDMwCm00X2xvY2F0aW9uKEFTX01FX1BSRVBBUkUpLi4vLi4vbGliL200c3VnYXIvbTRzaC5tNDoxMTIxCkY3LDYKbTRfZXhpdG00ZXhpdApUMTIsODMKbTRfc2V0X3VuaW9ubTRfc2V0X2xpc3RjKFskMV0pbTRfaWYoWyQxXSwgWyQyXSwgW10sCiAgW200X3NldF9tYXBfc2VwKFskMl0sIFtfJDAoWyQxXSxdLCBbKV0pXSkKVDIwLDczCkFTX0JPVVJORV9DT01QQVRJQkxFIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCkRVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKXyQwCgpUMTYsMgpfbTRfZGl2ZXJ0KEtJTEwpLTEKVDEwLDEwMAptNF9mb3JlYWNobTRfaWYoWyQyXSwgW10sIFtdLAogICAgICAgW200X3B1c2hkZWYoWyQxXSlfJDAoW200X2RlZmluZShbJDFdLF0sIFspJDNdLCBbXSwKICAkMiltNF9wb3BkZWYoWyQxXSldKQpUOSwyNjUKX0FTX1FVT1RFbTRfY29uZChbbTRfaW5kZXgoWyQxXSwgW1xdKV0sIFstMV0sIFtfQVNfUVVPVEVfTU9ERVJOXSwKCSBbbTRfZXZhbChtNF9pbmRleChtNF90cmFuc2xpdChbWyQxXV0sIFskXSwgW1xdKSwgW1xcXSkgPj0gMCldLApbMV0sIFtfQVNfUVVPVEVfTU9ERVJOXSwKCSBbbTRfZXZhbChtNF9pbmRleChtNF90cmFuc2xpdChbWyQxXV0sIFsiXSwgW2BdKSwgW1xgXSkgPj0gMCldLGRubCIKWzFdLCBbX0FTX1FVT1RFX09MRF0sCgkgW19BU19RVU9URV9NT0RFUk5dKShbJDFdKQpGMTEsOAptNF90cmFjZW9mZnRyYWNlb2ZmClQ4LDMzCm00X2FwcGx5bTRfaWYoWyQyXSwgW10sIFskMV0sIFskMSgkMildKVtdClQzMCwwCm00X2luY2x1ZGUobTRzdWdhci92ZXJzaW9uLm00KQpUMjYsMzAKbTRfbG9jYXRpb24oQVNfVkFSX0FQUEVORCkuLi8uLi9saWIvbTRzdWdhci9tNHNoLm00OjE5MzkKVDE0LDczCl9tNF9tYXBhbGxfc2VwbTRfYXBwbHkoWyQxXSwgWyQzXSlfbTRfZm9yZWFjaChbbTRfYXBwbHkoWyQyW10kMV0sXSwgWyldLCBtNF9zaGlmdDIoJEApKQpUOSwxMzIKbTRfZGl2ZXJ0bTRfcG9wZGVmKFtfbTRfZGl2ZXJ0X3N0YWNrXSltNF9kZWZpbmUoW19tNF9kaXZlcnRfZGl2ZXJzaW9uXSwgWyQxXSltNF9kaXZlcnRfc3RhY2tfcHVzaChbJDBdLCBbJDFdKV9tNF9kaXZlcnRfcmF3KF9tNF9kaXZlcnQoWyQxXSkpCkYxMCw3Cm00X3RyYWNlb250cmFjZW9uClQxMyw1MgptNF9jcl9MZXR0ZXJzYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpUNywxNDYKQVNfQ0FTRV9tNF9kZWZ1bl9wcm8oWyQwXSljYXNlICQxIGluW11tNF9tYXBfYXJnc19wYWlyKFtfJDBdLCBbXyQwX0RFRkFVTFRdLAogICBtNF9zaGlmdCgkQG00X2lmKG00X2V2YWwoWyQjICYgMV0pLCBbMV0sIFssXSkpKQplc2FjW11fbTRfZGVmdW5fZXBpKFskMF0pClQ5LDc1Cm00X2JlZm9yZW00X3Byb3ZpZGVfaWYoWyQyXSwKCSAgICAgICBbbTRfd2Fybihbc3ludGF4XSwgWyQyIHdhcyBjYWxsZWQgYmVmb3JlICQxXSldKQpUMTAsMTQzCm00X21hcF9zZXBtNF9wdXNoZGVmKFttNF9TZXBdLCBbbTRfZGVmaW5lKFttNF9TZXBdLCBfbTRfZGVmbihbbTRfdW5xdW90ZV0pKV0pX200X2ZvcmVhY2goW19tNF9hcHBseShbbTRfU2VwKFskMl0pW10kMV0sXSwgWyldLCBbXSwgJDMpbTRfcG9wZGVmKFttNF9TZXBdKQpUMTIsNTUKbTRfY29weV91bm00bTRfY29weShbJDFdLCBtNF9icGF0c3Vic3QoWyQxXSwgW15tNF9cKC4qXCldLCBbW1wxXV0pKQpUMTAsODYKbTRfdG9sb3dlcm00X3RyYW5zbGl0KFtbJDFdXSwgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXSwKCQkgICAgIFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5el0pClQ3LDkzCl9BU19CT1htNF9pZihtNF9pbmRleChtNF90cmFuc2xpdChbWyQxXV0sIFtgXCJdLCBbJCQkXSksIFskXSksCiAgWy0xXSwgWyQwX0xJVEVSQUxdLCBbJDBfSU5ESVJdKSgkQCkKVDgsMTg5Cl9tNF93cmFwbTRfaWZkZWYoWyQwX3RleHRdLAoJICBbbTRfZGVmaW5lKFskMF90ZXh0XSwgWyQxXV9tNF9kZWZuKFskMF90ZXh0XSlbJDJdKV0sCgkgIFttNF9idWlsdGluKFttNHdyYXBdLCBbbTRfdW5xdW90ZSgKICBfbTRfZGVmbihbJDBfdGV4dF0pX200X3BvcGRlZihbJDBfdGV4dF0pKV0pbTRfZGVmaW5lKFskMF90ZXh0XSwgWyQxJDJdKV0pCkY5LDYKbTRfZGVmaW5lZGVmaW5lClQxMCwyNwptNF9kZWZhdWx0bTRfaWYoWyQxXSwgW10sIFskMl0sIFskMV0pClQ5LDUKX200X2N1cnJ5WyQxXSkKVDEzLDIwCkFTX1ZBUl9BUFBFTkRhc19mbl9hcHBlbmQgJDEgJDJbXQpUMTMsMTU1CkFTX1ZBUl9BUFBFTkRfbTRfZGVmdW5fcHJvKFskMF0pQVNfUkVRVUlSRShbX0FTX1ZBUl9BUFBFTkRfUFJFUEFSRV0sIFtdLCBbTTRTSC1JTklULUZOXSlbXV9tNF9wb3BkZWYoWyQwXSltNF9pbmRpcihbJDBdbTRfaWYoWyQjXSwgWzBdLCBbXSwgWywkQF0pKVtdX200X2RlZnVuX2VwaShbJDBdKQpUMjksMzAKbTRfbG9jYXRpb24oX0FTX0VYUFJfUFJFUEFSRSkuLi8uLi9saWIvbTRzdWdhci9tNHNoLm00OjExMDgKVDgsMTk4Cl9tNF9xbGVubTRfZGVmaW5lKFttNF9xbGVuLSQxXSwKbTRfaWYobTRfaW5kZXgoWyQxXSwgW0BdKSwgWy0xXSwgW200X2xlbihbJDFdKV0sCiAgICAgIFttNF9sZW4obTRfYnBhdHN1YnN0KFtbJDFdXSwKCQkJICAgW0BcKFwoPDpcfDo+XHxTfFx8JTpcfFx7Olx8Olx9XClcKEBcKVx8JnRAXCldLAoJCQkgICBbXDNdKSldKSlfbTRfZGVmbihbbTRfcWxlbi0kMV0pClQxMCw3MgptNF9yZXZlcnNlbTRfaWYoWyQjXSwgWzBdLCBbXSwgWyQjXSwgWzFdLCBbWyQxXV0sCiAgICAgICBbJDAobTRfc2hpZnQoJEApKSwgWyQxXV0pClQxMywxCkFTX01FU1NBR0VfRkQxClQ0MCwzMAptNF9sb2NhdGlvbihfQVNfVkVSU0lPTl9DT01QQVJFX1BSRVBBUkUpLi4vLi4vbGliL200c3VnYXIvbTRzaC5tNDoxNjk3ClQzMCwzMAptNF9sb2NhdGlvbihBU19MSU5FTk9fUFJFUEFSRSkuLi8uLi9saWIvbTRzdWdhci9tNHNoLm00OjExNjYKVDEwLDI5NApfbTRfZXNjYXBlbTRfY2hhbmdlcXVvdGUoWy09PHsoXSxbKX0+PS1dKW00X2JwYXRzdWJzdChtNF9icGF0c3Vic3QobTRfYnBhdHN1YnN0KG00X2JwYXRzdWJzdCgKCSAgLT08eygtPTx7KC09PHsoLT08eygtPTx7KCQxKX0+PS0pfT49LSl9Pj0tKX0+PS0pfT49LSwKCS09PHsoIyl9Pj0tLCAtPTx7KEAlOkApfT49LSksCiAgICAgIC09PHsoXFspfT49LSwgLT08eyhAPDpAKX0+PS0pLAogICAgLT08eyhcXSl9Pj0tLCAtPTx7KEA6PkApfT49LSksCiAgLT08eyhcJCl9Pj0tLCAtPTx7KEBTfEApfT49LSltNF9jaGFuZ2VxdW90ZShbLF0pClQxNiw1NQpfbTRfZGl2ZXJ0X3N0YWNrLi4vLi4vbGliL200c3VnYXIvbTRzdWdhci5tNDozMjU5OiBtNF9kaXZlcnRfcHVzaDogS0lMTApUMTEsNTQKQVNfVkFSX0NPUFlBU19MSVRFUkFMX1dPUkRfSUYoWyQxW10kMl0sIFskMT0kJDJdLCBbZXZhbCAkMT1cJCQyXSkKVDE3LDIyOQptNF9jcl9ub3RfbGV0dGVycwECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjKiUmJygpJCssLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xdXl9ge3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/y0KVDE3LDExNwptNF9pbmNsdWRlX3VuaXF1ZW00X2lmZGVmKFttNF9pbmNsdWRlKCQxKV0sCgkgIFttNF93YXJuKFtzeW50YXhdLCBbZmlsZSBgJDEnIGluY2x1ZGVkIHNldmVyYWwgdGltZXNdKV0pZG5sCm00X2RlZmluZShbbTRfaW5jbHVkZSgkMSldKQpUOCw3NwptNF9zdHJpcG00X2JwYXRzdWJzdHMoWyQxIF0sCgkgICAgICAgW1sJIF0rXSwgWyBdLAoJICAgICAgIFteLiA/XCguKlwpIC4kXSwgW1tbXDFdXV0pClQ5LDQKbTRfZHF1b3RlWyRAXQpELTEsMAoKIyBFbmQgb2YgZnJvemVuIHN0YXRlIGZpbGUK