Exploratory Data Analysis
This section contains some preliminary EDA. We construct the sample from all firms for which we have time series of financial statements coming from factset. Flannery and Rangan exclude financials and regulated utilities (sic codes 4900 to 4999). We need to exclude these in future research. All of these variables are winsorized at the 1st and 99th percentiles to avoid the influence of extreme observations.
We define two samples:
- All US firms that report in USD that have two or more years of history
- All US firms that report in USD that have twenty or more years of history. We call these “survivor” firms.
The rationale behind also looking at survivor firms is that if we are interested in modelling the dynamics of firms over a long horizon (like it is the case for the CvaR usecase) we might want to build the model with firms that haven’t defaulted or disappeared in some other way over a long horizon. Also, to estimate firm-level firms effect, it is at least my intuition, that enough firm level history should be input. However the latter is not taken into account in Flannery, so I might be wrong. In any case it doesn’t do any harm.
For the regression, we also require complete information on the explanatory variables. Specifically:
- We have 14491 US firms that report in USD in the data.
- We have 6495 US firms that report in USD in the data, that have complete information to run the regression.
- The pooled panel has 64024 observations.
- We have 2456 US firms that report in USD in the data that we classify as survivors.
- We have 1793 survivors, that have complete information to run the regression.
- The pooled panel for survivor firms has 35036 observations.


- Descriptive Statistics for the full sample (winsorised 99th):
- Descriptive Statistics for the survivor sample (winsorised 99th):
- How do industry medians (IndMed) look like?

LS0tCnRpdGxlOiAiT3B0aW1hbCBDYXBpdGFsIFN0cnVjdHVyZSIKc3VidGl0bGU6ICJFeHBsb3JhdG9yeSBEYXRhIEFuYWx5c2lzIgphdXRob3I6Ci0gTWFpdGVuYSBQaW5laXJvCm91dHB1dDogaHRtbF9ub3RlYm9vawpkYXRlOiAiTGFzdCB1cGRhdGVkOiAyMHRoIG9mIE1hcmNoIDIwMjIiIAotLS0KCgpgYGB7ciBzZXR1cCwgZWNobz1GLCB3YXJuaW5nPUYsIGluY2x1ZGU9Rn0KIyMjIyBTZXQgdXAsIGxpYnJhcmllcywgbW9vY29scyBhbmQgcHJlLWRlZmluZWQgZnVuY3Rpb25zLgpybShsaXN0ID0gbHMoKSkKbGlicmFyeShkYXRhLnRhYmxlKTtsaWJyYXJ5KGdncGxvdDIpO2xpYnJhcnkocGxtKTtsaWJyYXJ5KGdyaWRFeHRyYSk7bGlicmFyeShzdGFyZ2F6ZXIpO2xpYnJhcnkodGV4cmVnKQojIE1BIENvbG9ycyBmb3IgR3JhcGhzCm1vb2NvbHMgPC0gYygiIzQxQjZFNiIsIiMwMDk3NzUiLCIjQkEwQzJGIiwiIzAwMjhBMCIsICIjNzhCRTIwIiwiI0UzNTIwNSIsIiM1QzA2OEMiLCAiIzAwOEM5NSIsIiM3NTc4N0IiLCIjMDAyRTVEIiwiI0EwREFGMiIsIiM4MENCQkEiLCIjREQ4Njk3IiwgIiM4MDkzQ0YiLCAiI0JCREU4RiIsICIjRjFBODgyIiwiI0FEODJDNSIsICIjODBDNUNBIiwiI0JBQkJCRCIsIiM4MDk2QUUiKQojIERlZmluZSBjZW5zb3IgYW5kIHdpbnNvcml6ZSBmdW5jdGlvbnMKY2Vuc29yPWZ1bmN0aW9uKGRmLHBlcj0uMDEpIHsKICBkZjFwZXI9cXVhbnRpbGUoZGYscHJvYnM9cGVyLG5hLnJtPVRSVUUpCiAgZGY5OXBlcj1xdWFudGlsZShkZixwcm9icz0oMS1wZXIpLG5hLnJtPVRSVUUpCiAgdmFsPWlmZWxzZShkZjxkZjFwZXIsTkEsaWZlbHNlKGRmPmRmOTlwZXIsTkEsZGYpKQogIHJldHVybih2YWwpfQpgYGAKCmBgYHtyIGRhdGEsIGVjaG89Riwgd2FybmluZz1GLCBpbmNsdWRlPUZ9CiMgRG93bmxvYWQgdGhlIGRhdGEKIyBkYXRhIDwtIHMzcmVhZF91c2luZyhGVU4gPSBmcmVhZCwgYnVja2V0ID0gInMzOi8vZ2l0aHViLXByb2Zvcm1hLW5leHRnZW4vIiwgb2JqZWN0ID0gJ01BRFQvcHVibGljX3Byb2Nlc3NlZF93aXRoX3NlY3Rvci5jc3YnKQoKIyBHZXQgYSBzbGljZSBmcm9tIHRoZSBkYXRhIGJ5IHNlbGVjdGluZyBVUyBmaXJtcyBieSBkb2luZzoKIyBzZXREVChkYXRhKQojIGR0PWRhdGFbY291bnRyeT09IlVTQSJdIAojIGR0PWRhdGFbLC4ocGlkLGVudGl0eV9uYW1lLGNvdW50cnkscmVnaW9uLG5keSxuZHlfZGV0YWlsZWQsc2VjdG9yLGN1cnJlbmN5LAojICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlPXN0YXRlbWVudF9kYXRlLAojICAgICAgICAgICAgICAgICAgICAgICAgICB5ZWFyPWZpc2NhbF95ZWFyLAojICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFydGVyPWZpc2NhbF9xdWFydGVyLAojICAgICAgICAgICAgICAgICAgICAgICAgICB0YT10b3RhbF9hc3NldCwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgc2FsZXMsCiMgICAgICAgICAgICAgICAgICAgICAgICAgIGx0YT1sb25nX3Rlcm1fYXNzZXQsCiMgICAgICAgICAgICAgICAgICAgICAgICAgIGNsPWN1cnJlbnRfbGlhYmlsaXR5LAojICAgICAgICAgICAgICAgICAgICAgICAgICB0bD10b3RhbF9saWFiaWxpdHksCiMgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZD1zaG9ydF90ZXJtX2RlYnQsCiMgICAgICAgICAgICAgICAgICAgICAgICAgIGx0ZD1sb25nX3Rlcm1fZGVidCwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgcmU9cmV0YWluZWRfZWFybmluZywKIyAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uX2VxdWl0eSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfZXF1aXR5LAojICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXRfY2FwLAojICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRlcnByaXNlX3ZhbCwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgc2hfb3V0PXNoYXJlc19vdXRzdGFuZGluZywKIyAgICAgICAgICAgICAgICAgICAgICAgICAgc2hfYWRqPXNoYXJlc19hZGpfZmFjdG9yLAojICAgICAgICAgICAgICAgICAgICAgICAgICBzaF9lcHM9c2hhcmVzX2VwcywKIyAgICAgICAgICAgICAgICAgICAgICAgICAgZWJpdCwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgZWJpdGRhLAojICAgICAgICAgICAgICAgICAgICAgICAgICBkYT1kZXByX2Ftb3J0LAojICAgICAgICAgICAgICAgICAgICAgICAgICBkYV9yYXRlLAojICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhfZXhwZW5zZSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4X3JhdGUpXQoKCiMgbWt0IDwtIHMzcmVhZF91c2luZyhGVU4gPSBmcmVhZCwgYnVja2V0ID0gInMzOi8vZ2l0aHViLXByb2Zvcm1hLW5leHRnZW4vIiwgb2JqZWN0ID0gJ01BRFQvc3RtdF9hbGxjYXBzX2VkZi5jc3YnKQojICAgbWt0ID0gbWt0WywgLihwaWQsIHN0YXRlbWVudF9kYXRlLCBpZGF0ZSwgIyBpZGF0ZSA9IDcgd2Vla3MgYWZ0ZXIgc3RtdCBkYXRlCiMgICAgICAgICAgICAgICAgIHNhbGVzX3N0bXQgPSBzYWxlcywKIyAgICAgICAgICAgICAgICAgbWt0Y2FwZGF0ZV9zdG10LCBta3RjYXBfc3RtdCwgIyBta3RjYXAgY2xvc2VzdCBlb20gYWZ0ZXIgc3RtdCBkYXRlIChwcm9iYWJseSBiZXR0ZXIgZGFpbHkuLi4pCiMgICAgICAgICAgICAgICAgIG1rdGNhcGRhdGVfaWRhdGUsIG1rdGNhcF9pZGF0ZSwgIyBmb3IgMTggbW9udGhzIGFmdGVyIGlkYXRlCiMgICAgICAgICAgICAgICAgIGVkZl9kYXRlX21rdCwgZWRmX21rdCwgc2FsZXNfZWRmX21rdCwgc2FsZXNfdXNkX2VkZl9ta3QsICMgZm9yIGVhY2ggbWt0Y2FwZGF0ZSBnZXQgY2xvc2VzdCBlZGYKIyAgICAgICAgICAgICAgICAgZWRmX2RhdGVfaWRhdGUsIGVkZl9pZGF0ZSwgc2FsZXNfZWRmX2lkYXRlLCBzYWxlc191c2RfZWRmX2lkYXRlICMgZ2V0IGNsb3Nlc3QgZWRmIGFmdGVyIGlkYXRlICh1c3VhbGx5IGEgd2VlayBiZWZvcmUgZWFybGllc3QgbWt0Y2FwZGF0ZV9pZGF0ZSkKIyAgICAgICAgICAgICAgICAgKV0KIyAKIyAKIyBta3QgPSBta3Rbb3JkZXIocGlkLCBzdGF0ZW1lbnRfZGF0ZSwgbWt0Y2FwZGF0ZV9pZGF0ZSldCiMgICBta3RbLCBubiA6PSBzZXEoLk4pLCAuKHBpZCwgc3RhdGVtZW50X2RhdGUpXQojICAgbWt0ID0gbWt0W25uID09IDFdWywgbm4gOj0gTlVMTF0KIyAgIG1rdDEgPSBta3RbYXMuRGF0ZShta3RjYXBkYXRlX2lkYXRlLCAiJVktJW0tJWQiKSA8PSBhcy5EYXRlKGlkYXRlLCAiJVktJW0tJWQiKSAlbSslIG1vbnRocygyKV0KIyAKIyBkdD1tZXJnZShkdCxta3RbLC4ocGlkLGRhdGU9c3RhdGVtZW50X2RhdGUsbWt0Y2FwX3N0bXQsbWt0Y2FwX2lkYXRlKV0sYWxsLng9VCkKIyBzdW1tYXJ5KGR0JG1rdGNhcF9pZGF0ZSkKIyBzdW1tYXJ5KGR0JG1hcmtldF9jYXApCiMgc3VtbWFyeShkdCRta3RjYXBfc3RtdCkKIyBkdFssbWFya2V0X2NhcDo9aWZlbHNlKG1rdGNhcF9pZGF0ZTw9MCwwLG1rdGNhcF9pZGF0ZSldCiMgIGZ3cml0ZShkdCwiVVNfc2xpY2VfZnJvbV9kYXRlLmNzdiIpCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBkdCBhcmUgZmlybXMgaW4gdGhlIFVTIHRoYXQgcmVwb3J0IGluIFVTRCAoMTIsOTYyIGZpcm1zKQpkdD1mcmVhZCgiVVNfc2xpY2VfZnJvbV9kYXRlLmNzdiIpCiMgRmlybXMgdGhhdCByZXBvcnQgaW4gVVNEOiAxMywxMzcgZmlybXMgLT4gMTIsOTYyIGZpcm1zCmR0PWR0W2N1cnJlbmN5PT0iVVNEIl0gCiMgTWluIGFuZCBNYXggeWVhciBpbmRpY2F0b3JzCmR0WyxtaW55Oj1taW4oeWVhciksYnk9cGlkXVssbWF4eTo9bWF4KHllYXIpLGJ5PXBpZF1bLG1lYW50YTo9bWVhbih0YSxuYS5ybT1UKSxieT1waWRdCmR0PWR0WyFkdXBsaWNhdGVkKGR0WyxjKCJwaWQiLCJ5ZWFyIildKV0jVGhlcmUgYXJlbid0IGFueSwganVzdCBjaGVja2luZwpkdFssY291bnR5Zjo9bGVuZ3RoKHVuaXF1ZSh5ZWFyKSksYnk9cGlkXQoKCiNDUEkgYWRqIGZvciBzYWxlcyBhbmQgdGEjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgTWVyZ2UgaW4gY3BpIGFkagojIGNwaT1mcmVhZCgiY3BpX2Fkal9pbmQyMDE1LmNzdiIpCiMgZHQ9bWVyZ2UoZHQsY3BpLGJ5PWMoInllYXIiKSxhbGwueD1UKQojIGR0Wyx0YV9jcGk6PXRhKmNwaS8xMDBdCiMgZHRbLHNhbGVzX2NwaTo9c2FsZXMqY3BpLzEwMF0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgZHRzdXI6IHN1cnZpdm9ycyBtb3JlIHRoYW4gMjAgeWVhcnMKZHQ9ZHRbb3JkZXIocGlkLHllYXIpXQpkdFsseWVhcmxhZzo9c2hpZnQoeWVhcixuPTEsdHlwZT0ibGFnIiksYnk9cGlkXQpkdFsseWVhcm46PXllYXIteWVhcmxhZ10jIHRpbWUgZnJvbSBwcmV2aW91cyBzdG10CiMgV2UgZG9uJ3Qgd2FudCB0byBoYXZlIGRpc2NvbnRpbnVvdXMgdGltZSBzZXJpZXMgb2Ygc3RtdCB0aGF0IGNvdWxkIGJlIGRlZgp0bXA9ZHRbeWVhcm4+MV07bG9va2F0X2Rpc2M9dW5pcXVlKHRtcCRwaWQpCmR0c3VyPWR0WyEocGlkJWluJWxvb2thdF9kaXNjKV0KZHRzdXJbLGNvdW50eWY6PWxlbmd0aCh1bmlxdWUoeWVhcikpLGJ5PXBpZF0KZHRzdXI9ZHRzdXJbY291bnR5Zj49MjBdCiNsZW5ndGgodW5pcXVlKGR0c3VyJHBpZCkpIzIsMzIxIGZpcm1zIHRoYXQgc3Vydml2ZSB0aHJvdWdoIDIwIHN1YnNlcXVlbnQgeWVhcnMKcGlkc3VyPXVuaXF1ZShkdHN1ciRwaWQpCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyA2LiBDcmVhdGUgZHRfZmlybXMgd2hpY2ggaXMgYSBzdW1tYXJ5IHRhYmxlIG9mIHRoZSBmaXJtcyBpbiBvdXIgc3R1ZHkKZHRfZmlybXM9ZHRbIWR1cGxpY2F0ZWQoZHRbLGMoInBpZCIpXSldCmR0X2Zpcm1zPWR0X2Zpcm1zWywuKHBpZCxlbnRpdHlfbmFtZSxjb3VudHJ5LHJlZ2lvbixuZHksbmR5X2RldGFpbGVkLHNlY3Rvcixjb3VudHlmLG1pbnksbWF4eSxtZWFudGEsc3VyPWlmZWxzZShwaWQlaW4lcGlkc3VyLDEsMCkpXQoKIyBQb29sZWQgcGFuZWwgZm9yIHRoZSByZWdyZXNzaW9uLCB3aXRoIGR0IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKcmVnZHQ9ZHRbLC4ocGlkLGVudGl0eV9uYW1lLHllYXIsbmR5LHNlY3RvcixNRFI9KGx0ZCtzdGQpLyhsdGQrc3RkK21hcmtldF9jYXApLCBFQklUX1RBPWViaXQvdGEsIE1CPSh0bCttYXJrZXRfY2FwKS90YSwgREVQX1RBPWRhL3RhLEZBX1RBPWx0YS90YSxsblRBPWxvZyh0YSksbG5UQWNwaT1sb2codGFfY3BpKSxsblNBTEVTPWxvZyhzYWxlcyksbG5TQUxFU2NwaT1sb2coc2FsZXNfY3BpKSldCnJlZ2R0PXJlZ2R0W29yZGVyKHBpZCx5ZWFyKV0KcmVnZHRbLE1EUl9sZWFkOj1zaGlmdChNRFIsbj0xLHR5cGU9ImxlYWQiKSxieT0uKHBpZCldCnJlZ2R0PW5hLm9taXQocmVnZHQpCiMgUG9vbGVkIHBhbmVsIGZvciB0aGUgcmVncmVzc2lvbiwgd2l0aCBkdCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnJlZ2R0c3VyPWR0c3VyWywuKHBpZCxlbnRpdHlfbmFtZSx5ZWFyLG5keSxzZWN0b3IsTURSPShsdGQrc3RkKS8obHRkK3N0ZCttYXJrZXRfY2FwKSwgRUJJVF9UQT1lYml0L3RhLCBNQj0odGwrbWFya2V0X2NhcCkvdGEsIERFUF9UQT1kYS90YSxGQV9UQT1sdGEvdGEsbG5UQT1sb2codGEpLGxuVEFjcGk9bG9nKHRhX2NwaSksbG5TQUxFUz1sb2coc2FsZXMpLGxuU0FMRVNjcGk9bG9nKHNhbGVzX2NwaSkpXQpyZWdkdHN1cj1yZWdkdHN1cltvcmRlcihwaWQseWVhcildCnJlZ2R0c3VyWyxNRFJfbGVhZDo9c2hpZnQoTURSLG49MSx0eXBlPSJsZWFkIiksYnk9LihwaWQpXQpyZWdkdHN1cj1uYS5vbWl0KHJlZ2R0c3VyKQoKCiMKY29scz1jKCJNRFIiLCJFQklUX1RBIiwiTUIiLCJERVBfVEEiLCJGQV9UQSIsImxuVEEiLCJNRFJfbGVhZCIsImxuVEFjcGkiLCJsblNBTEVTIiwibG5TQUxFU2NwaSIpCndpbnNvcml6ZT1mdW5jdGlvbihkZixwZXI9LjAxKSB7CiAgZGYxcGVyPXF1YW50aWxlKGRmLHByb2JzPXBlcixuYS5ybT1UUlVFKQogIGRmOTlwZXI9cXVhbnRpbGUoZGYscHJvYnM9KDEtcGVyKSxuYS5ybT1UUlVFKQogIAogIHZhbD1wbWluKHBtYXgoZGYsZGYxcGVyKSxkZjk5cGVyKQogIHJldHVybih2YWwpCn0KcmVnZHRjPWNvcHkocmVnZHQpCmZvciAoaiBpbiBjb2xzKSB7cmVnZHRjWyxwYXN0ZTAoaik6PXdpbnNvcml6ZShyZWdkdGNbLGdldChqKV0pXX0KcmVnZHRjc3VyPWNvcHkocmVnZHRzdXIpCmZvciAoaiBpbiBjb2xzKSB7cmVnZHRjc3VyWyxwYXN0ZTAoaik6PXdpbnNvcml6ZShyZWdkdGNzdXJbLGdldChqKV0pXX0KCnJlZ2R0Y1ssSW5kTWVkOj1tZWRpYW4oTURSKSxieT0uKHNlY3Rvcix5ZWFyKV0KcmVnZHRjc3VyWyxJbmRNZWQ6PW1lZGlhbihNRFIpLGJ5PS4oc2VjdG9yLHllYXIpXQoKCnJlZ2R0Y1ssRGVsdGFfRUJJVF9UQTo9c2hpZnQoRUJJVF9UQSxuPTEsdHlwZT0ibGVhZCIpLUVCSVRfVEEsYnk9cGlkXQpyZWdkdGNbLERlbHRhX2xuVEFjcGk6PXNoaWZ0KGxuVEFjcGksbj0xLHR5cGU9ImxlYWQiKS1sblRBY3BpLGJ5PXBpZF0KcmVnZHRjWyxEZWx0YV9sblNBTEVTY3BpOj1zaGlmdChsblNBTEVTY3BpLG49MSx0eXBlPSJsZWFkIiktbG5TQUxFU2NwaSxieT1waWRdCmBgYAoKCiMjIyBFeHBsb3JhdG9yeSBEYXRhIEFuYWx5c2lzCgpUaGlzIHNlY3Rpb24gY29udGFpbnMgc29tZSBwcmVsaW1pbmFyeSBFREEuIFdlIGNvbnN0cnVjdCB0aGUgc2FtcGxlIGZyb20gYWxsIGZpcm1zIGZvciB3aGljaCB3ZSBoYXZlIHRpbWUgc2VyaWVzIG9mIGZpbmFuY2lhbCBzdGF0ZW1lbnRzIGNvbWluZyBmcm9tIGZhY3RzZXQuIEZsYW5uZXJ5IGFuZCBSYW5nYW4gZXhjbHVkZSBmaW5hbmNpYWxzIGFuZCByZWd1bGF0ZWQgdXRpbGl0aWVzIChzaWMgY29kZXMgNDkwMCB0byA0OTk5KS4gV2UgbmVlZCB0byBleGNsdWRlIHRoZXNlIGluIGZ1dHVyZSByZXNlYXJjaC4gQWxsIG9mIHRoZXNlIHZhcmlhYmxlcyBhcmUgd2luc29yaXplZCBhdCB0aGUgMXN0IGFuZCA5OXRoIHBlcmNlbnRpbGVzIHRvIGF2b2lkIHRoZSBpbmZsdWVuY2Ugb2YgZXh0cmVtZSBvYnNlcnZhdGlvbnMuCgpXZSBkZWZpbmUgdHdvIHNhbXBsZXM6CgoqIEFsbCBVUyBmaXJtcyB0aGF0IHJlcG9ydCBpbiBVU0QgdGhhdCBoYXZlIHR3byBvciBtb3JlIHllYXJzIG9mIGhpc3RvcnkgCiogQWxsIFVTIGZpcm1zIHRoYXQgcmVwb3J0IGluIFVTRCB0aGF0IGhhdmUgdHdlbnR5IG9yIG1vcmUgeWVhcnMgb2YgaGlzdG9yeS4gV2UgY2FsbCB0aGVzZSAic3Vydml2b3IiIGZpcm1zLgoKVGhlIHJhdGlvbmFsZSBiZWhpbmQgYWxzbyBsb29raW5nIGF0IHN1cnZpdm9yIGZpcm1zIGlzIHRoYXQgaWYgd2UgYXJlIGludGVyZXN0ZWQgaW4gbW9kZWxsaW5nIHRoZSBkeW5hbWljcyBvZiBmaXJtcyBvdmVyIGEgbG9uZyBob3Jpem9uIChsaWtlIGl0IGlzIHRoZSBjYXNlIGZvciB0aGUgQ3ZhUiB1c2VjYXNlKSB3ZSBtaWdodCB3YW50IHRvIGJ1aWxkIHRoZSBtb2RlbCB3aXRoIGZpcm1zIHRoYXQgaGF2ZW4ndCBkZWZhdWx0ZWQgb3IgZGlzYXBwZWFyZWQgaW4gc29tZSBvdGhlciB3YXkgb3ZlciBhIGxvbmcgaG9yaXpvbi4gQWxzbywgdG8gZXN0aW1hdGUgZmlybS1sZXZlbCBmaXJtcyBlZmZlY3QsIGl0IGlzIGF0IGxlYXN0IG15IGludHVpdGlvbiwgdGhhdCBlbm91Z2ggZmlybSBsZXZlbCBoaXN0b3J5IHNob3VsZCBiZSBpbnB1dC4gSG93ZXZlciB0aGUgbGF0dGVyIGlzIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gRmxhbm5lcnksIHNvIEkgbWlnaHQgYmUgd3JvbmcuIEluIGFueSBjYXNlIGl0IGRvZXNuJ3QgZG8gYW55IGhhcm0uCgoKRm9yIHRoZSByZWdyZXNzaW9uLCB3ZSBhbHNvIHJlcXVpcmUgY29tcGxldGUgaW5mb3JtYXRpb24gb24gdGhlIGV4cGxhbmF0b3J5IHZhcmlhYmxlcy4gU3BlY2lmaWNhbGx5OgoKYGBge3Igd2FybmluZz1GLCBldmFsPVQsIGVjaG89RiwgaW5jbHVkZSA9Rn0KIyBQb29sZWQgcGFuZWwgZm9yIHRoZSByZWdyZXNzaW9uLCB3aXRoIGR0IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKcmVnZHQ9ZHRbLC4ocGlkLGVudGl0eV9uYW1lLHllYXIsbmR5LHNlY3RvcixNRFI9KGx0ZCtzdGQpLyhsdGQrc3RkK21hcmtldF9jYXApLCBFQklUX1RBPWViaXQvdGEsIE1CPSh0bCttYXJrZXRfY2FwKS90YSwgREVQX1RBPWRhL3RhLEZBX1RBPWx0YS90YSxsblRBPWxvZyh0YSkpXQpyZWdkdD1yZWdkdFtvcmRlcihwaWQseWVhcildCnJlZ2R0WyxNRFJfbGVhZDo9c2hpZnQoTURSLG49MSx0eXBlPSJsZWFkIiksYnk9LihwaWQpXQpyZWdkdD1uYS5vbWl0KHJlZ2R0KQojIFBvb2xlZCBwYW5lbCBmb3IgdGhlIHJlZ3Jlc3Npb24sIHdpdGggZHQjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpyZWdkdHN1cj1kdHN1clssLihwaWQsZW50aXR5X25hbWUseWVhcixzZWN0b3IsbmR5LE1EUj0obHRkK3N0ZCkvKGx0ZCtzdGQrbWFya2V0X2NhcCksIEVCSVRfVEE9ZWJpdC90YSwgTUI9KHRsK21hcmtldF9jYXApL3RhLCBERVBfVEE9ZGEvdGEsRkFfVEE9bHRhL3RhLGxuVEE9bG9nKHRhKSldCnJlZ2R0c3VyPXJlZ2R0c3VyW29yZGVyKHBpZCx5ZWFyKV0KcmVnZHRzdXJbLE1EUl9sZWFkOj1zaGlmdChNRFIsbj0xLHR5cGU9ImxlYWQiKSxieT0uKHBpZCldCnJlZ2R0c3VyPW5hLm9taXQocmVnZHRzdXIpCmBgYAoKKiBXZSBoYXZlIGByIGxlbmd0aCh1bmlxdWUoZHQkcGlkKSlgIFVTIGZpcm1zIHRoYXQgcmVwb3J0IGluIFVTRCBpbiB0aGUgZGF0YS4KKiBXZSBoYXZlIGByIGxlbmd0aCh1bmlxdWUocmVnZHQkcGlkKSlgIFVTIGZpcm1zIHRoYXQgcmVwb3J0IGluIFVTRCBpbiB0aGUgZGF0YSwgdGhhdCBoYXZlIGNvbXBsZXRlIGluZm9ybWF0aW9uIHRvIHJ1biB0aGUgcmVncmVzc2lvbi4gCiogVGhlIHBvb2xlZCBwYW5lbCBoYXMgYHIgbnJvdyhyZWdkdClgIG9ic2VydmF0aW9ucy4KKiBXZSBoYXZlIGByIGxlbmd0aCh1bmlxdWUoZHRzdXIkcGlkKSlgIFVTIGZpcm1zIHRoYXQgcmVwb3J0IGluIFVTRCBpbiB0aGUgZGF0YSB0aGF0IHdlIGNsYXNzaWZ5IGFzIHN1cnZpdm9ycy4KKiBXZSBoYXZlIGByIGxlbmd0aCh1bmlxdWUocmVnZHRzdXIkcGlkKSlgIHN1cnZpdm9ycywgdGhhdCBoYXZlIGNvbXBsZXRlIGluZm9ybWF0aW9uIHRvIHJ1biB0aGUgcmVncmVzc2lvbi4gCiogVGhlIHBvb2xlZCBwYW5lbCBmb3Igc3Vydml2b3IgZmlybXMgaGFzIGByIG5yb3cocmVnZHRzdXIpYCBvYnNlcnZhdGlvbnMuCgpgYGB7ciAsIHdhcm5pbmc9RiwgZXZhbD1ULCB3YXJuaW5nPUYsZWNobz1GfQojdG1wPW1lbHQoZHRfZmlybXNbLC4odG90PWxlbmd0aCh1bmlxdWUocGlkKSksc3VyPXN1bShzdXIpKSxieT1zZWN0b3JdLGlkLnZhcnM9InNlY3RvciIpCnRtcD1tZXJnZShkdFssLih0b3Q9bGVuZ3RoKHVuaXF1ZShwaWQpKSksYnk9c2VjdG9yXSxyZWdkdFssLihyZWc9bGVuZ3RoKHVuaXF1ZShwaWQpKSksYnk9c2VjdG9yXSxieT0ic2VjdG9yIikKdG1wWyxzZWN0b3I6PWZhY3RvcihyZW9yZGVyKHNlY3Rvcix0b3QpKV0KCmc9Z2dwbG90KG1lbHQodG1wLGlkLnZhcnM9InNlY3RvciIpLGFlcyhzZWN0b3IsdmFsdWUsZmlsbD12YXJpYWJsZSkpK2dlb21fYmFyKHN0YXQ9ImlkZW50aXR5Iikrc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPW1vb2NvbHNbYygxLDIpXSkrdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSx2anVzdD0uNSxoanVzdD0uNSkpK3hsYWIoIiIpK3lsYWIoInVuaXF1ZSBwaWRzIikrZ2d0aXRsZSgiVG90YWwiKSt0aGVtZShsZWdlbmQucG9zaXRpb24gPSAidG9wIikKCnRtcD1tZXJnZShkdHN1clssLih0b3Q9bGVuZ3RoKHVuaXF1ZShwaWQpKSksYnk9c2VjdG9yXSxyZWdkdHN1clssLihyZWc9bGVuZ3RoKHVuaXF1ZShwaWQpKSksYnk9c2VjdG9yXSxieT0ic2VjdG9yIikKdG1wWyxzZWN0b3I6PWZhY3RvcihyZW9yZGVyKHNlY3Rvcix0b3QpKV0KCmg9Z2dwbG90KG1lbHQodG1wLGlkLnZhcnM9InNlY3RvciIpLGFlcyhzZWN0b3IsdmFsdWUsZmlsbD12YXJpYWJsZSkpK2dlb21fYmFyKHN0YXQ9ImlkZW50aXR5Iikrc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPW1vb2NvbHNbYygxLDIpXSkrdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSx2anVzdD0uNSxoanVzdD0uNSkpK3hsYWIoIiIpK3lsYWIoInVuaXF1ZSBwaWRzIikrZ2d0aXRsZSgiU3Vydml2b3JzIikrdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInRvcCIpCgpncmlkLmFycmFuZ2UoZyxoLG5yb3c9MSx0b3A9Ik51bWJlciBvZiBmaXJtcyBieSBzZWN0b3IiKQpgYGAKCgoKYGBge3IsIHdhcm5pbmc9RiwgZXZhbD1ULCB3YXJuaW5nPUYsZWNobz1GfQp0bXA9bWVyZ2UoZHRbLC4odG90PWxlbmd0aCh1bmlxdWUocGlkKSkpLGJ5PXllYXJdLHJlZ2R0WywuKHJlZz1sZW5ndGgodW5pcXVlKHBpZCkpKSxieT15ZWFyXSxieT0ieWVhciIpCgpnPWdncGxvdChtZWx0KHRtcCxpZC52YXJzID0gInllYXIiKSxhZXMoeWVhcix2YWx1ZSxmaWxsPXZhcmlhYmxlKSkrZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpK2dndGl0bGUoIlRvdGFsIikreWxhYigiVW5pcXVlIHBpZHMiKStzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9bW9vY29sc1tjKDEsMildKStnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAxMDApK2dlb21faGxpbmUoeWludGVyY2VwdCA9IDUwMCkrdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJ0b3AiKSt4bGFiKCIiKSt0aGVtZShsZWdlbmQucG9zaXRpb24gPSAidG9wIikKCnRtcD1tZXJnZShkdHN1clssLih0b3Q9bGVuZ3RoKHVuaXF1ZShwaWQpKSksYnk9eWVhcl0scmVnZHRzdXJbLC4ocmVnPWxlbmd0aCh1bmlxdWUocGlkKSkpLGJ5PXllYXJdLGJ5PSJ5ZWFyIikKCmg9Z2dwbG90KG1lbHQodG1wLGlkLnZhcnMgPSAieWVhciIpLGFlcyh5ZWFyLHZhbHVlLGZpbGw9dmFyaWFibGUpKStnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikrZ2d0aXRsZSgiU3Vydml2b3JzIikreWxhYigiVW5pcXVlIHBpZHMiKStzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9bW9vY29sc1tjKDEsMildKStnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAxMDApK2dlb21faGxpbmUoeWludGVyY2VwdCA9IDUwMCkrdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJ0b3AiKSt4bGFiKCIiKSt0aGVtZShsZWdlbmQucG9zaXRpb24gPSAidG9wIikKCmdyaWQuYXJyYW5nZShnLGgsbnJvdz0xLHRvcD0iTnVtYmVyIG9mIGZpcm1zIGJ5IHllYXIiKQoKYGBgCgoqIERlc2NyaXB0aXZlIFN0YXRpc3RpY3MgZm9yIHRoZSBmdWxsIHNhbXBsZSAod2luc29yaXNlZCA5OXRoKToKIApgYGB7ciwgZWNobz1GLCBldmFsPVR9CnRtcD1yYmluZChyZWdkdGNbLC4oVmFyaWFibGU9Ik1EUiIsYE4uIE9icy5gPW5yb3cocmVnZHRjKSxNZWFuPW1lYW4oTURSKSxNZWRpYW49bWVkaWFuKE1EUiksU0Q9c2QoTURSKSxNaW49bWluKE1EUiksTWF4PW1heChNRFIpLFEyNT1xdWFudGlsZShNRFIscHJvYnMgPTAuMjUpLFE3NT1xdWFudGlsZShNRFIscHJvYnMgPTAuNzUpKV0sCiAgICAgICAgICByZWdkdGNbLC4oVmFyaWFibGU9IkVCSVRfVEEiLGBOLiBPYnMuYD1ucm93KHJlZ2R0YyksTWVhbj1tZWFuKEVCSVRfVEEpLE1lZGlhbj1tZWRpYW4oRUJJVF9UQSksU0Q9c2QoRUJJVF9UQSksTWluPW1pbihFQklUX1RBKSxNYXg9bWF4KEVCSVRfVEEpLFEyNT1xdWFudGlsZShFQklUX1RBLHByb2JzID0wLjI1KSxRNzU9cXVhbnRpbGUoRUJJVF9UQSxwcm9icyA9MC43NSkpXSwKICAgICAgICAgIHJlZ2R0Y1ssLihWYXJpYWJsZT0iTUIiLGBOLiBPYnMuYD1ucm93KHJlZ2R0YyksTWVhbj1tZWFuKE1CKSxNZWRpYW49bWVkaWFuKE1CKSxTRD1zZChNQiksTWluPW1pbihNQiksTWF4PW1heChNQiksUTI1PXF1YW50aWxlKE1CLHByb2JzID0wLjI1KSxRNzU9cXVhbnRpbGUoTUIscHJvYnMgPTAuNzUpKV0sCiAgICAgICAgICByZWdkdGNbLC4oVmFyaWFibGU9IkRFUF9UQSIsYE4uIE9icy5gPW5yb3cocmVnZHRjKSxNZWFuPW1lYW4oREVQX1RBKSxNZWRpYW49bWVkaWFuKERFUF9UQSksU0Q9c2QoREVQX1RBKSxNaW49bWluKERFUF9UQSksTWF4PW1heChERVBfVEEpLFEyNT1xdWFudGlsZShERVBfVEEscHJvYnMgPTAuMjUpLFE3NT1xdWFudGlsZShERVBfVEEscHJvYnMgPTAuNzUpKV0sCiAgICAgICAgICByZWdkdGNbLC4oVmFyaWFibGU9IkZBX1RBIixgTi4gT2JzLmA9bnJvdyhyZWdkdGMpLE1lYW49bWVhbihGQV9UQSksTWVkaWFuPW1lZGlhbihGQV9UQSksU0Q9c2QoRkFfVEEpLE1pbj1taW4oRkFfVEEpLE1heD1tYXgoRkFfVEEpLFEyNT1xdWFudGlsZShGQV9UQSxwcm9icyA9MC4yNSksUTc1PXF1YW50aWxlKEZBX1RBLHByb2JzID0wLjc1KSldLAogICAgICAgICAgcmVnZHRjWywuKFZhcmlhYmxlPSJsblRBIixgTi4gT2JzLmA9bnJvdyhyZWdkdGMpLE1lYW49bWVhbihsblRBKSxNZWRpYW49bWVkaWFuKGxuVEEpLFNEPXNkKGxuVEEpLE1pbj1taW4obG5UQSksTWF4PW1heChsblRBKSxRMjU9cXVhbnRpbGUobG5UQSxwcm9icyA9MC4yNSksUTc1PXF1YW50aWxlKGxuVEEscHJvYnMgPTAuNzUpKV0sIHJlZ2R0Y1ssLihWYXJpYWJsZT0iSW5kTWVkIixgTi4gT2JzLmA9bnJvdyhyZWdkdGMpLE1lYW49bWVhbihJbmRNZWQpLE1lZGlhbj1tZWRpYW4oSW5kTWVkKSxTRD1zZChJbmRNZWQpLE1pbj1taW4oSW5kTWVkKSxNYXg9bWF4KEluZE1lZCksUTI1PXF1YW50aWxlKEluZE1lZCxwcm9icyA9MC4yNSksUTc1PXF1YW50aWxlKEluZE1lZCxwcm9icyA9MC43NSkpXSkKCgp0bXBbLE1lYW46PXJvdW5kKE1lYW4sMildWyxNZWRpYW46PXJvdW5kKE1lZGlhbiwyKV1bLFNEOj1yb3VuZChTRCwyKV1bLE1pbjo9cm91bmQoTWluLDIpXVssTWF4Oj1yb3VuZChNYXgsMildWyxRMjU6PXJvdW5kKFEyNSwyKV1bLFE3NTo9cm91bmQoUTc1LDIpXQoKcHJpbnQodG1wKQpgYGAKCiogRGVzY3JpcHRpdmUgU3RhdGlzdGljcyBmb3IgdGhlIHN1cnZpdm9yIHNhbXBsZSAod2luc29yaXNlZCA5OXRoKToKYGBge3IsIGVjaG8gPSBGLCBldmFsPVR9CnRtcD1yYmluZChyZWdkdGNzdXJbLC4oVmFyaWFibGU9Ik1EUiIsYE4uIE9icy5gPW5yb3cocmVnZHRjc3VyKSxNZWFuPW1lYW4oTURSKSxNZWRpYW49bWVkaWFuKE1EUiksU0Q9c2QoTURSKSxNaW49bWluKE1EUiksTWF4PW1heChNRFIpLFEyNT1xdWFudGlsZShNRFIscHJvYnMgPTAuMjUpLFE3NT1xdWFudGlsZShNRFIscHJvYnMgPTAuNzUpKV0sCiAgICAgICAgICByZWdkdGNzdXJbLC4oVmFyaWFibGU9IkVCSVRfVEEiLGBOLiBPYnMuYD1ucm93KHJlZ2R0Y3N1ciksTWVhbj1tZWFuKEVCSVRfVEEpLE1lZGlhbj1tZWRpYW4oRUJJVF9UQSksU0Q9c2QoRUJJVF9UQSksTWluPW1pbihFQklUX1RBKSxNYXg9bWF4KEVCSVRfVEEpLFEyNT1xdWFudGlsZShFQklUX1RBLHByb2JzID0wLjI1KSxRNzU9cXVhbnRpbGUoRUJJVF9UQSxwcm9icyA9MC43NSkpXSwKICAgICAgICAgIHJlZ2R0Y3N1clssLihWYXJpYWJsZT0iTUIiLGBOLiBPYnMuYD1ucm93KHJlZ2R0Y3N1ciksTWVhbj1tZWFuKE1CKSxNZWRpYW49bWVkaWFuKE1CKSxTRD1zZChNQiksTWluPW1pbihNQiksTWF4PW1heChNQiksUTI1PXF1YW50aWxlKE1CLHByb2JzID0wLjI1KSxRNzU9cXVhbnRpbGUoTUIscHJvYnMgPTAuNzUpKV0sCiAgICAgICAgICByZWdkdGNzdXJbLC4oVmFyaWFibGU9IkRFUF9UQSIsYE4uIE9icy5gPW5yb3cocmVnZHRjc3VyKSxNZWFuPW1lYW4oREVQX1RBKSxNZWRpYW49bWVkaWFuKERFUF9UQSksU0Q9c2QoREVQX1RBKSxNaW49bWluKERFUF9UQSksTWF4PW1heChERVBfVEEpLFEyNT1xdWFudGlsZShERVBfVEEscHJvYnMgPTAuMjUpLFE3NT1xdWFudGlsZShERVBfVEEscHJvYnMgPTAuNzUpKV0sCiAgICAgICAgICByZWdkdGNzdXJbLC4oVmFyaWFibGU9IkZBX1RBIixgTi4gT2JzLmA9bnJvdyhyZWdkdGNzdXIpLE1lYW49bWVhbihGQV9UQSksTWVkaWFuPW1lZGlhbihGQV9UQSksU0Q9c2QoRkFfVEEpLE1pbj1taW4oRkFfVEEpLE1heD1tYXgoRkFfVEEpLFEyNT1xdWFudGlsZShGQV9UQSxwcm9icyA9MC4yNSksUTc1PXF1YW50aWxlKEZBX1RBLHByb2JzID0wLjc1KSldLAogICAgICAgICAgcmVnZHRjc3VyWywuKFZhcmlhYmxlPSJsblRBIixgTi4gT2JzLmA9bnJvdyhyZWdkdGNzdXIpLE1lYW49bWVhbihsblRBKSxNZWRpYW49bWVkaWFuKGxuVEEpLFNEPXNkKGxuVEEpLE1pbj1taW4obG5UQSksTWF4PW1heChsblRBKSxRMjU9cXVhbnRpbGUobG5UQSxwcm9icyA9MC4yNSksUTc1PXF1YW50aWxlKGxuVEEscHJvYnMgPTAuNzUpKV0sIHJlZ2R0Y3N1clssLihWYXJpYWJsZT0iSW5kTWVkIixgTi4gT2JzLmA9bnJvdyhyZWdkdGNzdXIpLE1lYW49bWVhbihJbmRNZWQpLE1lZGlhbj1tZWRpYW4oSW5kTWVkKSxTRD1zZChJbmRNZWQpLE1pbj1taW4oSW5kTWVkKSxNYXg9bWF4KEluZE1lZCksUTI1PXF1YW50aWxlKEluZE1lZCxwcm9icyA9MC4yNSksUTc1PXF1YW50aWxlKEluZE1lZCxwcm9icyA9MC43NSkpXSkKCnRtcFssTWVhbjo9cm91bmQoTWVhbiwyKV1bLE1lZGlhbjo9cm91bmQoTWVkaWFuLDIpXVssU0Q6PXJvdW5kKFNELDIpXVssTWluOj1yb3VuZChNaW4sMildWyxNYXg6PXJvdW5kKE1heCwyKV1bLFEyNTo9cm91bmQoUTI1LDIpXVssUTc1Oj1yb3VuZChRNzUsMildCgpwcmludCh0bXApCmBgYAoKKiBIb3cgZG8gaW5kdXN0cnkgbWVkaWFucyAoSW5kTWVkKSBsb29rIGxpa2U/CgpgYGB7ciwgZWNobyA9IEYsIGV2YWw9VH0KcmVnZHRjWyxJbmRNZWQ6PW1lZGlhbihNRFIpLGJ5PXNlY3Rvcl0KcmVnZHRjc3VyWyxJbmRNZWQ6PW1lZGlhbihNRFIpLGJ5PXNlY3Rvcl0KdG1wPW1lcmdlKHJlZ2R0Y1shZHVwbGljYXRlZChyZWdkdGNbLGMoInNlY3RvciIpXSksLihzZWN0b3IsdG90PUluZE1lZCldLHJlZ2R0Y3N1clshZHVwbGljYXRlZChyZWdkdGNzdXJbLGMoInNlY3RvciIpXSksLihzZWN0b3Isc3VyPUluZE1lZCldLGJ5PSJzZWN0b3IiKQp0bXBbLHNlY3Rvcjo9ZmFjdG9yKHJlb3JkZXIoc2VjdG9yLHRvdCkpXQpnZ3Bsb3QobWVsdCh0bXAsaWQudmFycz0ic2VjdG9yIiksYWVzKHNlY3Rvcix2YWx1ZSxmaWxsPXZhcmlhYmxlKSkrZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIscG9zaXRpb24gPSAiZG9kZ2UiKStzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9bW9vY29sc1tjKDEsMildKSt0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LHZqdXN0PS41LGhqdXN0PS41KSkreGxhYigiIikreWxhYigiIikrZ2d0aXRsZSgiSW5kdXN0cnkgTWVkaWFuIE1EUiBieSBzZWN0b3IiKSt0aGVtZShsZWdlbmQucG9zaXRpb249InRvcCIpCmBgYAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg==