Click Here to Return to Previous Page
This file contains statistics and figures from the paper, “Molecular,
Cellular, and Developmental Organization of the Mouse Vomeronasal organ
at Single Cell Resolution” by Max Hills Jr., Limei Ma, Ai Fang, Thelma
Chiremba, Seth Malloy, Allison Scott, Anoja Perera, and C. Ron Yu.
The paper can be found here:
Molecular,
Cellular, and Developmental Organization of the Mouse Vomeronasal organ
at Single Cell Resolution
Receptor distributions with
pseudogenes included
V1R
V2R
Olfr
Rank by average count distributions for
V1R, V2R, and VSN-OR, pseudogenes included
V1R
V2R
Olfr
LS0tCnRpdGxlOiAiVk5PIEF0bGFzIEZpZ3VyZSBTOCIKYXV0aG9yOiAiTWF4IEhpbGxzIgpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclZCAlQiwgJVknKWAiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgY3NzOiBzdHlsZS5jc3MKLS0tCgpgYGB7ciwgcmVzdWx0cz0nYXNpcyd9CgpjYXQoIjxidXR0b24gb25jbGljaz0naGlzdG9yeS5iYWNrKCknIHN0eWxlPSdmb250LXNpemU6IDIwcHg7IGJhY2tncm91bmQtY29sb3I6IGJsYWNrOyBjb2xvcjogd2hpdGU7IHBhZGRpbmc6IDEwcHggMjBweDsgYm9yZGVyOiAzcHggc29saWQgeWVsbG93OyBib3JkZXItcmFkaXVzOiA1cHg7Jz5DbGljayBIZXJlIHRvIFJldHVybiB0byBQcmV2aW91cyBQYWdlPC9idXR0b24+IikKCmBgYAoKKioqICAKCmBgYHtyLCBlbmdpbmU9J2NzcycsIGVjaG8gPSBGQUxTRX0KCmJvZHkgewogIGZvbnQtc2l6ZTogMThweDsKfQoubmF2LXBpbGxzID4gbGkgPiBhIHsKICBjb2xvcjogYmxhY2s7IC8qIFNldCBpbmFjdGl2ZSB0YWIgdGV4dCBjb2xvciB0byBibGFjayAqLwogIGJvcmRlcjogMnB4IHNvbGlkIGJsYWNrOyAvKiBBZGQgYmxhY2sgYm9yZGVyIHRvIGluYWN0aXZlIHRhYnMgKi8KICBib3JkZXItcmFkaXVzOiA0cHg7IC8qIE9wdGlvbmFsOiBTbGlnaHRseSByb3VuZCB0aGUgY29ybmVycyAqLwp9CgoubmF2LXBpbGxzID4gbGkgPiBhOmhvdmVyLCAubmF2LXBpbGxzID4gbGkgPiBhOmZvY3VzIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZ3JheTsgLyogU2V0IGhvdmVyIGJhY2tncm91bmQgY29sb3IgdG8gYSBkYXJrZXIgZ3JheSAqLwogIGNvbG9yOiB3aGl0ZTsgLyogU2V0IGhvdmVyIHRleHQgY29sb3IgdG8gd2hpdGUgZm9yIGJldHRlciBjb250cmFzdCAqLwp9CgoubmF2LXBpbGxzID4gbGkuYWN0aXZlID4gYSB7CiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7IC8qIFNldCBhY3RpdmUgdGFiIGJhY2tncm91bmQgY29sb3IgdG8gYmxhY2sgKi8KICBjb2xvcjogd2hpdGU7IC8qIFNldCBhY3RpdmUgdGFiIHRleHQgY29sb3IgdG8gd2hpdGUgKi8KICBib3JkZXI6IDNweCBzb2xpZCB5ZWxsb3cKfQoKLm5hdi1waWxscyA+IGxpLmFjdGl2ZSA+IGE6aG92ZXIgewogIGJhY2tncm91bmQtY29sb3I6IGRhcmtncmF5OyAvKiBTZXQgYWN0aXZlIHRhYiBiYWNrZ3JvdW5kIGNvbG9yIHRvIGJsYWNrICovCiAgY29sb3I6IHdoaXRlOyAvKiBTZXQgYWN0aXZlIHRhYiB0ZXh0IGNvbG9yIHRvIHdoaXRlICovCiAgYm9yZGVyOiAzcHggc29saWQgYmxhY2sKfQoKYGBgIAogIAogIAo+VGhpcyBmaWxlIGNvbnRhaW5zIHN0YXRpc3RpY3MgYW5kIGZpZ3VyZXMgZnJvbSB0aGUgcGFwZXIsICJNb2xlY3VsYXIsIENlbGx1bGFyLCBhbmQgRGV2ZWxvcG1lbnRhbCBPcmdhbml6YXRpb24gb2YgdGhlIE1vdXNlIFZvbWVyb25hc2FsIG9yZ2FuIGF0IFNpbmdsZSBDZWxsIFJlc29sdXRpb24iIGJ5IE1heCBIaWxscyBKci4sIExpbWVpIE1hLCBBaSBGYW5nLCBUaGVsbWEgQ2hpcmVtYmEsIFNldGggTWFsbG95LCBBbGxpc29uIFNjb3R0LCBBbm9qYSBQZXJlcmEsIGFuZCBDLiBSb24gWXUuICAgIAoKVGhlIHBhcGVyIGNhbiBiZSBmb3VuZCBoZXJlOiAgCgpbTW9sZWN1bGFyLCBDZWxsdWxhciwgYW5kIERldmVsb3BtZW50YWwgT3JnYW5pemF0aW9uIG9mIHRoZSBNb3VzZSBWb21lcm9uYXNhbCBvcmdhbiBhdCBTaW5nbGUgQ2VsbCBSZXNvbHV0aW9uXShodHRwczovL2VsaWZlc2NpZW5jZXMub3JnL3Jldmlld2VkLXByZXByaW50cy85NzM1NiN0YWItY29udGVudCkKCioqKiAgCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0KCiMgUi1NYXJrZG93biBHbG9iYWwgU2V0dGluZ3MgIAoKIyBTZXQtdXAgYSBkZWZhdWx0IGltYWdlIHNpemUgb2YgMTAgWCAxMCBpbmNoZXMuIFN1cHByZXNzIHdhcm5pbmcKIyBhbmQgZXJyb3IgbWVzc2FnZXMuIEhpZGUgY29kZS4Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGNvbW1lbnQ9IiIsCiAgICAgICAgICAgICAgICAgICAgICBlcnJvcj1GQUxTRSwgZmlnLndpZHRoPTEyLCBmaWcuaGVpZ2h0PTEyLCBjYWNoZT1GQUxTRSkKCmBgYAoKYGBge3IgbGlicmFyaWVzLCBpbmNsdWRlPUZBTFNFfQoKIyBMaWJyYXJ5IExvYWRpbmcgIAoKc3VwcHJlc3NQYWNrYWdlU3RhcnR1cE1lc3NhZ2VzKHsKICBsaWJyYXJ5KGtpdCk7IGxpYnJhcnkodGlkeXZlcnNlKTsgbGlicmFyeShzdHJpbmdyKTsgbGlicmFyeShwbG90M0QpIAogIGxpYnJhcnkoZ2dwbG90Mik7IGxpYnJhcnkoZGF0YS50YWJsZSk7IGxpYnJhcnkob3JnLk1tLmVnLmRiKQogIGxpYnJhcnkoZHBseXIpOyBsaWJyYXJ5KFNldXJhdCk7IGxpYnJhcnkoREJJKTsgbGlicmFyeShjb3dwbG90KQogIGxpYnJhcnkoTWF0cml4KTsgbGlicmFyeShnbG1HYW1Qb2kpOyBsaWJyYXJ5KGNpcmNsaXplKQogIGxpYnJhcnkodGliYmxlKTsgbGlicmFyeShnZ3B1YnIpOyBsaWJyYXJ5KHN2Z2xpdGUpOyBsaWJyYXJ5KGdnc2lnbmlmKQogIGxpYnJhcnkoc3RhdHMpOyBsaWJyYXJ5KHZlZ2FuKTsgbGlicmFyeShzY2FsZXMpOyBsaWJyYXJ5KGNhcmV0KQogIGxpYnJhcnkocGF0Y2h3b3JrKTsgbGlicmFyeShwbG90bHkpOyBsaWJyYXJ5KGdlb210ZXh0cGF0aCkKICBsaWJyYXJ5KG9wZW54bHN4KTsgbGlicmFyeShncmlkRXh0cmEpOyBsaWJyYXJ5KGdncmVwZWwpCiAgbGlicmFyeShHZW5lT3ZlcmxhcCk7IGxpYnJhcnkoYmlvbWFSdCk7IGxpYnJhcnkoZ2dwb2ludGRlbnNpdHkpCiAgbGlicmFyeShzbGluZ3Nob3QpOyBsaWJyYXJ5KHRyYWRlU2VxKTsgbGlicmFyeShTaW5nbGVDZWxsRXhwZXJpbWVudCkKICBsaWJyYXJ5KHZpcmlkaXMpOyBsaWJyYXJ5KFVwU2V0Uik7IGxpYnJhcnkocGhlYXRtYXApOyBsaWJyYXJ5KG1zaWdkYnIpCiAgbGlicmFyeShmZ3NlYSk7IGxpYnJhcnkoZ3JpZCk7IGxpYnJhcnkoSURQbWlzYyk7IGxpYnJhcnkoTUFTUykKICBsaWJyYXJ5KFJtaXNjKTsgbGlicmFyeShnZ3Bsb3RpZnkpOyBsaWJyYXJ5KGdncG1pc2MpOyBsaWJyYXJ5KHNjYWxlcykKICBsaWJyYXJ5KGhlYXRtYXBseSk7IGxpYnJhcnkoZGVuZGV4dGVuZCkKfSkKCmBgYAoKYGBge3J9CgojIEdsb2JhbCBWYXJpYWJsZXMKCiMgVGhlIGhvbWUgZGlyZWN0b3J5CmhvbWVfZGlyIDwtICIvbC9ZdS9ZdUxhYi9CaW9pbmZvcm1hdGljcy9wcm9qZWN0cy9taGgvc2NfVk5PLyIKIyBEaXJlY3RvcnkgZm9yIHN0b3JpbmcgZGF0YSBvYmplY3RzIGF0IGNydWNpYWwgc3RhZ2VzCm9iamVjdF9kaXIgPC0gcGFzdGUwKGhvbWVfZGlyLCJmaW5hbC5zZXUub2Jqcy8iKQojIERpcmVjdG9yeSBmb3IgaW1hZ2VzIGZyb20gdGhlIGZpbmFsIGFuYWx5c2lzCmltYWdlX2RpciA8LSBwYXN0ZTAoaG9tZV9kaXIsImZpbmFsX2ltYWdlcy8iKQphZG9iZV9pbWFnZXMgPC0gcGFzdGUwKGltYWdlX2RpciwgImFkb2JlX2lsbHVzdHJhdG9yX3N2Z19maWxlcy8iKQojIERpcmVjdG9yeSBmb3IgaW1hZ2VzIGZvciB0aGUgZmluYWwgcGFwZXIKY2x1c3RyZWVfZGlyIDwtIHBhc3RlMChpbWFnZV9kaXIsImNsdXN0cmVlLyIpCiMgQSBkaXJlY3RvcnkgZm9yIFRyYWRlU2VxIGZpdEdBTSBvdXRwdXQKZml0R0FNX2RpciA8LSBwYXN0ZTAob2JqZWN0X2RpciwgImZpdEdBTS8iKQptb2VfZGlyIDwtICIvbC9ZdS9ZdUxhYi9CaW9pbmZvcm1hdGljcy9wcm9qZWN0cy9taGgvbW9sbmdfMjQwN18yNDUzL1Jfb2JqLyIKCiNMb2FkIE5ldXJvbmFsIExpbmVhZ2UgU2V1cmF0IE9iamVjdCAgCmxvYWQoZmlsZSA9IHBhc3RlMChvYmplY3RfZGlyLCJuZXVyb24uaW50ZWdyYXRlZC5wb3N0Q2VsbElEIikpCgpsZXZlbHMobmV1cm9uLmludGVncmF0ZWRAYWN0aXZlLmlkZW50KVtsZXZlbHMobmV1cm9uLmludGVncmF0ZWRAYWN0aXZlLmlkZW50KT09InVua25vd25fbVZTTiJdIDwtICJzVlNOIgpsZXZlbHMobmV1cm9uLmludGVncmF0ZWQkY2VsbF90eXBlKVtsZXZlbHMobmV1cm9uLmludGVncmF0ZWQkY2VsbF90eXBlKT09InVua25vd25fbVZTTiJdIDwtICJzVlNOIgoKbWF0dXJlLm5ldXJvbnMgPC0gc3Vic2V0KG5ldXJvbi5pbnRlZ3JhdGVkLGlkZW50cz1jKCJWMVJfbVZTTiIsIlYyUl9tVlNOIiwibU9TTiIsInNWU04iKSkKCmdsb2JhbC52YXJzIDwtIGMobHMoKSwiZ2xvYmFsLnZhcnMiKQoKYGBgCgpgYGB7cn0KCmxvYWQoZmlsZT1wYXN0ZTAobW9lX2RpciwibW9lLmludGVncmF0ZWQucHJlQ2VsbElEIikpCm1vZS5tYXR1cmUubmV1cm9ucyA8LSBzdWJzZXQobW9lLnNldS5pbnRlZ3JhdGVkLGlkZW50cz1jKCIwIiwiMiIsIjMiLCI3IiwiOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxNiIsIjE3IiwiMTgiLCIyNiIpKQoKYGBgCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KCnJlY2VwdG9yLm5hbWVzIDwtIGdyZXAoIl4oVm1uMXJbMC05XXsxLDN9JHxWbW4yclswLTldezEsM30kfE9sZnJbMC05XXsxLDR9JCkiLAogICAgICAgICAgICAgICAgICAgICAgIHJvd25hbWVzKG1hdHVyZS5uZXVyb25zKSwgdmFsdWU9VFJVRSkKCiMgR2V0IGFsbCByZWNlcHRvciBuYW1lcyBpbiB0aGUgbWF0dXJlLm5ldXJvbnMgZGF0YXNldCAoaW5jbHVkaW5nIHBzZXVkb2dlbmVzKQpwc2cucmVjZXB0b3IubmFtZXMgPC0gZ3JlcCgiXihWbW4xcnxWbW4ycnxPbGZyKSIsCiAgICAgICAgICAgICAgICAgICAgICAgcm93bmFtZXMobWF0dXJlLm5ldXJvbnMpLCB2YWx1ZT1UUlVFKQoKbW9lLm9sZnIubmFtZXMgPC0gZ3JlcCgiXihPbGZyKSIsIHJvd25hbWVzKG1vZS5tYXR1cmUubmV1cm9ucyksIHZhbHVlPVRSVUUpCgojIEdldCBWMVIsIFYyUiwgYW5kIE9sZnIgbmFtZXMuClYxUi5uYW1lcyA8LSBncmVwKCJeVm1uMXIiLHJlY2VwdG9yLm5hbWVzLHZhbHVlPVRSVUUpClYyUi5uYW1lcyA8LSBncmVwKCJeVm1uMnIiLHJlY2VwdG9yLm5hbWVzLHZhbHVlPVRSVUUpCk9sZnIubmFtZXMgPC0gZ3JlcCgiXk9sZnIiLHJlY2VwdG9yLm5hbWVzLHZhbHVlPVRSVUUpCgojIFJldHJpZXZlIHRoZSBjZWxsIGJhcmNvZGUgWCByZWNlcHRvciBjb3VudCBtYXRyaXggZm9yIGFsbCBjaGVtby1zZW5zb3J5IHJlY2VwdG9yIGdlbmVzCnJlY2VwdG9yLmRmIDwtIEZldGNoRGF0YShtYXR1cmUubmV1cm9ucywgdmFycz1yZWNlcHRvci5uYW1lcywgc2xvdD0iY291bnRzIikKcHNnLnJlY2VwdG9yLmRmIDwtIEZldGNoRGF0YShtYXR1cmUubmV1cm9ucywgdmFycz1wc2cucmVjZXB0b3IubmFtZXMsIHNsb3Q9ImNvdW50cyIpCm1vZS5yZWNlcHRvci5kZiA8LSBGZXRjaERhdGEobW9lLm1hdHVyZS5uZXVyb25zLCB2YXJzPW1vZS5vbGZyLm5hbWVzLCBzbG90PSJjb3VudHMiKQoKYGBgCgoqKiogIAoKIyMgUmVjZXB0b3IgZGlzdHJpYnV0aW9ucyB3aXRoICoqcHNldWRvZ2VuZXMgaW5jbHVkZWQqKiB7LnRhYnNldCAudGFic2V0LXBpbGxzfSAgCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KCiMgR2V0IFYxUiwgVjJSLCBhbmQgT2xmciBuYW1lcy4KVjFSLm5hbWVzIDwtIGdyZXAoIl5WbW4xciIscHNnLnJlY2VwdG9yLm5hbWVzLHZhbHVlPVRSVUUpClYyUi5uYW1lcyA8LSBncmVwKCJeVm1uMnIiLHBzZy5yZWNlcHRvci5uYW1lcyx2YWx1ZT1UUlVFKQpPbGZyLm5hbWVzIDwtIGdyZXAoIl5PbGZyIixwc2cucmVjZXB0b3IubmFtZXMsdmFsdWU9VFJVRSkKCnYxci5kZiA8LSBwc2cucmVjZXB0b3IuZGZbICxWMVIubmFtZXNdCnYyci5kZiA8LSBwc2cucmVjZXB0b3IuZGZbICxWMlIubmFtZXNdCm9sZnIuZGYgPC0gcHNnLnJlY2VwdG9yLmRmWyAsT2xmci5uYW1lc10KCiMgVG90YWxfQ291bnRzIGlzIGJhc2VkIG9uIHJhdyBjb3VudHMKdjFyLnRvdGFsLmNvdW50cyA8LSAKICBzZXROYW1lcyhubT1jKCdnZW5lJywnVG90YWxfQ291bnRzJyksc3RhY2soc29ydChjb2xTdW1zKHYxci5kZiksZGVjcmVhc2luZz1UUlVFKSlbMjoxXSkKdjJyLnRvdGFsLmNvdW50cyA8LSAKICBzZXROYW1lcyhubT1jKCdnZW5lJywnVG90YWxfQ291bnRzJyksc3RhY2soc29ydChjb2xTdW1zKHYyci5kZiksZGVjcmVhc2luZz1UUlVFKSlbMjoxXSkKb2xmci50b3RhbC5jb3VudHMgPC0gCiAgc2V0TmFtZXMobm09YygnZ2VuZScsJ1RvdGFsX0NvdW50cycpLHN0YWNrKHNvcnQoY29sU3VtcyhvbGZyLmRmKSxkZWNyZWFzaW5nPVRSVUUpKVsyOjFdKQptb2Uub2xmci50b3RhbC5jb3VudHMgPC0gCiAgc2V0TmFtZXMobm09YygnZ2VuZScsJ1RvdGFsX0NvdW50cycpLHN0YWNrKHNvcnQoY29sU3Vtcyhtb2UucmVjZXB0b3IuZGYpLGRlY3JlYXNpbmc9VFJVRSkpWzI6MV0pCgojIG5DZWxscyBpcyBiYXNlZCBvbiBzaW1wbGUgcHJlc2VuY2UKdjFyLm5DZWxscyA8LSAKICBzZXROYW1lcyhubT1jKCJnZW5lIiwibkNlbGxzIiksc3RhY2soc29ydChjb2xTdW1zKHYxci5kZiA+IDApLGRlY3JlYXNpbmc9VFJVRSkpWzI6MV0pCnYyci5uQ2VsbHMgPC0gCiAgc2V0TmFtZXMobm09YygiZ2VuZSIsIm5DZWxscyIpLHN0YWNrKHNvcnQoY29sU3Vtcyh2MnIuZGYgPiAwKSxkZWNyZWFzaW5nPVRSVUUpKVsyOjFdKQpvbGZyLm5DZWxscyA8LSAKICBzZXROYW1lcyhubT1jKCJnZW5lIiwibkNlbGxzIiksc3RhY2soc29ydChjb2xTdW1zKG9sZnIuZGYgPiAwKSxkZWNyZWFzaW5nPVRSVUUpKVsyOjFdKQptb2Uub2xmci5uQ2VsbHMgPC0gCiAgc2V0TmFtZXMobm09YygiZ2VuZSIsIm5DZWxscyIpLHN0YWNrKHNvcnQoY29sU3Vtcyhtb2UucmVjZXB0b3IuZGYgPiAwKSxkZWNyZWFzaW5nPVRSVUUpKVsyOjFdKQoKdjFyLm1ldGFkYXRhIDwtIG1lcmdlKHYxci5uQ2VsbHMsdjFyLnRvdGFsLmNvdW50cykKIyBSZW1vdmUgdW5leHByZXNzZWQgcmVjZXB0b3JzCnYxci5tZXRhZGF0YSA8LSB2MXIubWV0YWRhdGFbISh2MXIubWV0YWRhdGEkbkNlbGxzPT0wKSwgXQojIENhbGN1bGF0ZSBhdmVyYWdlIGV4cHJlc3Npb24KdjFyLm1ldGFkYXRhJGF2Z19leHAgPC0gdjFyLm1ldGFkYXRhJFRvdGFsX0NvdW50cy92MXIubWV0YWRhdGEkbkNlbGxzCiMgU2V0IHRoZSBnZW5lIGZhY3RvciB0byBvcmRlcmVkIGJ5IGF2Z19leHAgZGVjcmVhc2luZwp2MXIubWV0YWRhdGEkZ2VuZSA8LSBmYWN0b3IodjFyLm1ldGFkYXRhJGdlbmUsbGV2ZWxzPXYxci5tZXRhZGF0YSRnZW5lW29yZGVyKHYxci5tZXRhZGF0YSRhdmdfZXhwLGRlY3JlYXNpbmc9VFJVRSldKQojIFNldCB0aGUgZGF0YWZyYW1lIHRvIHRoZSBzYW1lIG9yZGVyCnYxci5tZXRhZGF0YSA8LSB2MXIubWV0YWRhdGFbb3JkZXIodjFyLm1ldGFkYXRhJGF2Z19leHAsZGVjcmVhc2luZyA9IFRSVUUpLCBdCiMgUmVzZXQgcm93bmFtZXMKcm93bmFtZXModjFyLm1ldGFkYXRhKSA8LSBOVUxMCiMgR2V0IHRoZSByYW5rIG9mIHJlY2VwdG9ycyBieSB0b3RhbCBjb3VudHMKdjFyLm1ldGFkYXRhJHJhbmsgPC0gYXMubnVtZXJpYyhyb3duYW1lcyh2MXIubWV0YWRhdGEpKQoKdjJyLm1ldGFkYXRhIDwtIG1lcmdlKHYyci5uQ2VsbHMsdjJyLnRvdGFsLmNvdW50cykKdjJyLm1ldGFkYXRhIDwtIHYyci5tZXRhZGF0YVshKHYyci5tZXRhZGF0YSRuQ2VsbHM9PTApLCBdCnYyci5tZXRhZGF0YSRhdmdfZXhwIDwtIHYyci5tZXRhZGF0YSRUb3RhbF9Db3VudHMvdjJyLm1ldGFkYXRhJG5DZWxscwojIFNldCB0aGUgZ2VuZSBmYWN0b3IgdG8gb3JkZXJlZCBieSBhdmdfZXhwIGRlY3JlYXNpbmcKdjJyLm1ldGFkYXRhJGdlbmUgPC0gZmFjdG9yKHYyci5tZXRhZGF0YSRnZW5lLGxldmVscz12MnIubWV0YWRhdGEkZ2VuZVtvcmRlcih2MnIubWV0YWRhdGEkYXZnX2V4cCxkZWNyZWFzaW5nPVRSVUUpXSkKIyBTZXQgdGhlIGRhdGFmcmFtZSB0byB0aGUgc2FtZSBvcmRlcgp2MnIubWV0YWRhdGEgPC0gdjJyLm1ldGFkYXRhW29yZGVyKHYyci5tZXRhZGF0YSRhdmdfZXhwLGRlY3JlYXNpbmcgPSBUUlVFKSwgXQojIFJlc2V0IHJvd25hbWVzCnJvd25hbWVzKHYyci5tZXRhZGF0YSkgPC0gTlVMTAojIEdldCB0aGUgcmFuayBvZiByZWNlcHRvcnMgYnkgdG90YWwgY291bnRzCnYyci5tZXRhZGF0YSRyYW5rIDwtIGFzLm51bWVyaWMocm93bmFtZXModjJyLm1ldGFkYXRhKSkKCm9sZnIubWV0YWRhdGEgPC0gbWVyZ2Uob2xmci5uQ2VsbHMsb2xmci50b3RhbC5jb3VudHMpCm9sZnIubWV0YWRhdGEgPC0gb2xmci5tZXRhZGF0YVshKG9sZnIubWV0YWRhdGEkbkNlbGxzPT0wKSwgXQpvbGZyLm1ldGFkYXRhJGF2Z19leHAgPC0gb2xmci5tZXRhZGF0YSRUb3RhbF9Db3VudHMvb2xmci5tZXRhZGF0YSRuQ2VsbHMKIyBTZXQgdGhlIGdlbmUgZmFjdG9yIHRvIG9yZGVyZWQgYnkgYXZnX2V4cCBkZWNyZWFzaW5nCm9sZnIubWV0YWRhdGEkZ2VuZSA8LSBmYWN0b3Iob2xmci5tZXRhZGF0YSRnZW5lLGxldmVscz1vbGZyLm1ldGFkYXRhJGdlbmVbb3JkZXIob2xmci5tZXRhZGF0YSRhdmdfZXhwLGRlY3JlYXNpbmc9VFJVRSldKQojIFNldCB0aGUgZGF0YWZyYW1lIHRvIHRoZSBzYW1lIG9yZGVyCm9sZnIubWV0YWRhdGEgPC0gb2xmci5tZXRhZGF0YVtvcmRlcihvbGZyLm1ldGFkYXRhJGF2Z19leHAsZGVjcmVhc2luZyA9IFRSVUUpLCBdCiMgUmVzZXQgcm93bmFtZXMKcm93bmFtZXMob2xmci5tZXRhZGF0YSkgPC0gTlVMTAojIEdldCB0aGUgcmFuayBvZiByZWNlcHRvcnMgYnkgdG90YWwgY291bnRzCm9sZnIubWV0YWRhdGEkcmFuayA8LSBhcy5udW1lcmljKHJvd25hbWVzKG9sZnIubWV0YWRhdGEpKQoKbW9lLm9sZnIubWV0YWRhdGEgPC0gbWVyZ2UobW9lLm9sZnIubkNlbGxzLG1vZS5vbGZyLnRvdGFsLmNvdW50cykKIyBSZW1vdmUgR2VuZXMgVW5leHByZXNzZWQgaW4gQ2VsbHMKbW9lLm9sZnIubWV0YWRhdGEgPC0gbW9lLm9sZnIubWV0YWRhdGFbIShtb2Uub2xmci5tZXRhZGF0YSRuQ2VsbHM9PTApLCBdCm1vZS5vbGZyLm1ldGFkYXRhJGF2Z19leHAgPC0gbW9lLm9sZnIubWV0YWRhdGEkVG90YWxfQ291bnRzL21vZS5vbGZyLm1ldGFkYXRhJG5DZWxscwojIFNldCB0aGUgZ2VuZSBmYWN0b3IgdG8gb3JkZXJlZCBieSBhdmdfZXhwIGRlY3JlYXNpbmcKbW9lLm9sZnIubWV0YWRhdGEkZ2VuZSA8LSBmYWN0b3IobW9lLm9sZnIubWV0YWRhdGEkZ2VuZSxsZXZlbHM9bW9lLm9sZnIubWV0YWRhdGEkZ2VuZVtvcmRlcihtb2Uub2xmci5tZXRhZGF0YSRhdmdfZXhwLGRlY3JlYXNpbmc9VFJVRSldKQojIFNldCB0aGUgZGF0YWZyYW1lIHRvIHRoZSBzYW1lIG9yZGVyCm1vZS5vbGZyLm1ldGFkYXRhIDwtIG1vZS5vbGZyLm1ldGFkYXRhW29yZGVyKG1vZS5vbGZyLm1ldGFkYXRhJGF2Z19leHAsZGVjcmVhc2luZyA9IFRSVUUpLCBdCiMgUmVzZXQgcm93bmFtZXMKcm93bmFtZXMobW9lLm9sZnIubWV0YWRhdGEpIDwtIE5VTEwKIyBHZXQgdGhlIHJhbmsgb2YgcmVjZXB0b3JzIGJ5IHRvdGFsIGNvdW50cwptb2Uub2xmci5tZXRhZGF0YSRyYW5rIDwtIGFzLm51bWVyaWMocm93bmFtZXMobW9lLm9sZnIubWV0YWRhdGEpKQoKdjFyLm1ldGFkYXRhJHByb3BvcnRpb24gPC0gdjFyLm1ldGFkYXRhJGF2Z19leHAvc3VtKHYxci5tZXRhZGF0YSRhdmdfZXhwKSAKdjJyLm1ldGFkYXRhJHByb3BvcnRpb24gPC0gdjJyLm1ldGFkYXRhJGF2Z19leHAvc3VtKHYyci5tZXRhZGF0YSRhdmdfZXhwKSAKb2xmci5tZXRhZGF0YSRwcm9wb3J0aW9uIDwtIG9sZnIubWV0YWRhdGEkYXZnX2V4cC9zdW0ob2xmci5tZXRhZGF0YSRhdmdfZXhwKSAKbW9lLm9sZnIubWV0YWRhdGEkcHJvcG9ydGlvbiA8LSBtb2Uub2xmci5tZXRhZGF0YSRhdmdfZXhwL3N1bShtb2Uub2xmci5tZXRhZGF0YSRhdmdfZXhwKSAKCmBgYAoKYGBge3IsIGluY2x1ZGU9RkFMU0V9Cgp2bm8ucmVjZXB0b3IuZGYubGlzdCA8LSBsaXN0KFYxUj12MXIudG90YWwuY291bnRzLFYyUj12MnIudG90YWwuY291bnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9sZnI9b2xmci50b3RhbC5jb3VudHMsTU9FLk9sZnI9bW9lLm9sZnIubWV0YWRhdGEpCgp2bm8ucmVjZXB0b3IucGllLmxpc3QgPC0gbGFwcGx5KG5hbWVzKHZuby5yZWNlcHRvci5kZi5saXN0KSwgZnVuY3Rpb24obmFtZSl7CiAgZGYgPC0gdm5vLnJlY2VwdG9yLmRmLmxpc3RbW25hbWVdXQogIHplcm9lcyA8LSBzdW0oZGZbICwiVG90YWxfQ291bnRzIl0gPT0gMCkKICBsb3cgPC0gc3VtKGRmWyAsIlRvdGFsX0NvdW50cyJdID4gMCAmIGRmWyAsIlRvdGFsX0NvdW50cyJdIDwgMTAwKQogIG1lZGl1bSA8LSBzdW0oZGZbICwiVG90YWxfQ291bnRzIl0gPj0gMTAwICYgZGZbICwiVG90YWxfQ291bnRzIl0gPCAxMDAwKQogIGhpZ2ggPC0gc3VtKGRmWyAsIlRvdGFsX0NvdW50cyJdID49IDEwMDAgJiBkZlsgLCJUb3RhbF9Db3VudHMiXSA8IDEwMDAwKQogIHZlcnlfaGlnaCA8LSBzdW0oZGZbICwiVG90YWxfQ291bnRzIl0gPj0gMTAwMDApCiAgYyh6ZXJvZXMsbG93LG1lZGl1bSxoaWdoLHZlcnlfaGlnaCkKfSkKCm5hbWVzKHZuby5yZWNlcHRvci5waWUubGlzdCkgPC0gbmFtZXModm5vLnJlY2VwdG9yLmRmLmxpc3QpCgpsYmxzIDwtIGMoInggPSAwIiwiMCA8IHggPCAxMDAiLCIxMDAg4omkIHggPCAxMDAwIiwKICAgICAgICAgICIxMDAwIOKJpCB4IDwgMTAwMDAiLCJ4IOKJpSAxMDAwMCIpCgojIE9yZGVyIHRoZSBSZWNlcHRvcnMgZmFjdG9yIGxldmVscyBmb3IgcGxvdHRpbmcKbGJscyA8LSBmYWN0b3IoYXMuZmFjdG9yKGxibHMpLCBsZXZlbHM9YygieCA9IDAiLCIwIDwgeCA8IDEwMCIsIjEwMCDiiaQgeCA8IDEwMDAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMDAwIOKJpCB4IDwgMTAwMDAiLCJ4IOKJpSAxMDAwMCIpKQoKdjFyLnBpZS5kZiA8LSBkYXRhLmZyYW1lKEV4cHJlc3Npb25fUmFuZ2U9bGJscyxDb3VudHM9dm5vLnJlY2VwdG9yLnBpZS5saXN0JFYxUikKdjJyLnBpZS5kZiA8LSBkYXRhLmZyYW1lKEV4cHJlc3Npb25fUmFuZ2U9bGJscyxDb3VudHM9dm5vLnJlY2VwdG9yLnBpZS5saXN0JFYyUikKb2xmci5waWUuZGYgPC0gZGF0YS5mcmFtZShFeHByZXNzaW9uX1JhbmdlPWxibHMsQ291bnRzPXZuby5yZWNlcHRvci5waWUubGlzdCRPbGZyKQptb2Uub2xmci5waWUuZGYgPC0gZGF0YS5mcmFtZShFeHByZXNzaW9uX1JhbmdlPWxibHMsQ291bnRzPXZuby5yZWNlcHRvci5waWUubGlzdCRNT0UuT2xmcikKCmBgYAoKIyMjIFYxUiAgCgpgYGB7cn0KCiMgQ3JlYXRlIGEgY29sb3IgdmVjdG9yIHRvIGRpc3Rpbmd1aXNoIGdlbmVzIGZyb20gcHNldWRvZ2VuZXMuCnYxci5kaXN0LnBsb3QgPC0gdjFyLm1ldGFkYXRhICU+JSBtdXRhdGUoY29sb3IgPSBpZmVsc2Uoc3RyX2RldGVjdCh2MXIubWV0YWRhdGEkZ2VuZSwgIi1wcyIpLCAiZ3JheSIsICJnb2xkMiIpKQoKZmlnNF9hLnBhcnRfMiA8LSBnZ3Bsb3QodjFyLmRpc3QucGxvdCwgYWVzKHg9bkNlbGxzLHk9VG90YWxfQ291bnRzLGxhYmVsPWdlbmUpKSArCiAgZ2VvbV9wb2ludChzaGFwZT0yMSxzaXplPTQsZmlsbD12MXIuZGlzdC5wbG90JGNvbG9yLGNvbG9yPSJnb2xkMiIpICsgdGhlbWVfY2xhc3NpYygpICsgc2NhbGVfY29sb3JfaWRlbnRpdHkoKSArCiAgZ2VvbV90ZXh0X3JlcGVsKGRhdGE9djFyLmRpc3QucGxvdFt2MXIuZGlzdC5wbG90JG5DZWxscz41MDAwfHYxci5kaXN0LnBsb3QkVG90YWxfQ291bnRzPjgwMDAwLCBdLAogICAgICAgICAgICAgICAgICBudWRnZV94PTEyNSxudWRnZV95PS0yNSxwb2ludC5wYWRkaW5nPTAsc2l6ZT03LG1pbi5zZWdtZW50Lmxlbmd0aD0wLjI1KSArCiAgdGhlbWUoYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTI0KSwKICAgICAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZT0yMCksYXNwZWN0LnJhdGlvPTEpICsKICB5bGFiKCJUb3RhbCBSYXcgQ291bnQiKSArCiAgc3RhdF9wb2x5X2xpbmUobWV0aG9kPSJsbSIsIGZvcm11bGEgPSB5IH4geCArIDApICsKICBzdGF0X3BvbHlfZXEoZm9ybXVsYSA9IHkgfiB4ICsgMCwgYWVzKGxhYmVsID0gcGFzdGUoYWZ0ZXJfc3RhdChlcS5sYWJlbCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyX3N0YXQocnIubGFiZWwpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VwID0gIipcIiwgXCIqIikpLHNpemU9NyxsYWJlbC55PTAuODUsbGFiZWwueD0wLjUpCgpmaWc0X2EucGFydF8yCgpgYGAKCiMjIyBWMlIgIAoKYGBge3J9CgojIENyZWF0ZSBhIGNvbG9yIHZlY3RvciB0byBkaXN0aW5ndWlzaCBnZW5lcyBmcm9tIHBzZXVkb2dlbmVzLgp2MnIuZGlzdC5wbG90IDwtIHYyci5tZXRhZGF0YSAlPiUgbXV0YXRlKGNvbG9yID0gaWZlbHNlKHN0cl9kZXRlY3QodjJyLm1ldGFkYXRhJGdlbmUsICItcHMiKSwgImdyYXkiLCAicHVycGxlIikpCgpmaWc0X2IucGFydF8yIDwtIGdncGxvdCh2MnIuZGlzdC5wbG90LCBhZXMoeD1uQ2VsbHMseT1Ub3RhbF9Db3VudHMsbGFiZWw9Z2VuZSkpICsKICBnZW9tX3BvaW50KHNoYXBlPTIxLHNpemU9NCxmaWxsPXYyci5kaXN0LnBsb3QkY29sb3IsY29sb3I9InB1cnBsZSIpICsgdGhlbWVfY2xhc3NpYygpICsgc2NhbGVfY29sb3JfaWRlbnRpdHkoKSArCiAgZ2VvbV90ZXh0X3JlcGVsKGRhdGE9djJyLmRpc3QucGxvdFt2MnIuZGlzdC5wbG90JG5DZWxscz42MDAwfHYyci5kaXN0LnBsb3QkVG90YWxfQ291bnRzPjMwMDAwLCBdLAogICAgICAgICAgICAgICAgICBudWRnZV94PS01MCxudWRnZV95PTUwLHBvaW50LnBhZGRpbmc9MCxzaXplPTcsbWluLnNlZ21lbnQubGVuZ3RoPTAuMjUpICsKICB0aGVtZShheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9MjQpLAogICAgICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplPTIwKSxhc3BlY3QucmF0aW89MSkgKwogIHlsYWIoIlRvdGFsIFJhdyBDb3VudCIpICsKICBzdGF0X3BvbHlfbGluZShtZXRob2Q9ImxtIiwgZm9ybXVsYSA9IHkgfiB4ICsgMCkgKwogIHN0YXRfcG9seV9lcShmb3JtdWxhID0geSB+IHggKyAwLCBhZXMobGFiZWwgPSBwYXN0ZShhZnRlcl9zdGF0KGVxLmxhYmVsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJfc3RhdChyci5sYWJlbCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXAgPSAiKlwiLCBcIioiKSksc2l6ZT03LGxhYmVsLnk9MC45KQoKZmlnNF9iLnBhcnRfMgoKYGBgCgojIyMgT2xmciAgCgpgYGB7cn0KCiMgQ3JlYXRlIGEgY29sb3IgdmVjdG9yIHRvIGRpc3Rpbmd1aXNoIGdlbmVzIGZyb20gcHNldWRvZ2VuZXMuCm9sZnIuZGlzdC5wbG90IDwtIG9sZnIubWV0YWRhdGEgJT4lIG11dGF0ZShjb2xvciA9IGlmZWxzZShzdHJfZGV0ZWN0KG9sZnIubWV0YWRhdGEkZ2VuZSwgIi1wcyIpLCAiZ3JheSIsICJncmVlbjMiKSkKCmZpZzRfYy5wYXJ0XzIgPC0gZ2dwbG90KG9sZnIuZGlzdC5wbG90LCBhZXMobkNlbGxzLFRvdGFsX0NvdW50cyxsYWJlbD1nZW5lKSkgKwogIGdlb21fcG9pbnQoc2hhcGU9MjEsc2l6ZT00LGZpbGw9b2xmci5kaXN0LnBsb3QkY29sb3IsY29sb3I9ImdyZWVuMyIpICsgdGhlbWVfY2xhc3NpYygpICsgc2NhbGVfY29sb3JfaWRlbnRpdHkoKSArCiAgZ2VvbV90ZXh0X3JlcGVsKGRhdGE9b2xmci5kaXN0LnBsb3Rbb2xmci5kaXN0LnBsb3QkbkNlbGxzPjYwMDB8b2xmci5kaXN0LnBsb3QkVG90YWxfQ291bnRzPjEwMDAwLCBdLAogICAgICAgICAgICAgICAgICBudWRnZV94PS01MCxudWRnZV95PS03NSxwb2ludC5wYWRkaW5nPTAsc2l6ZT03LG1pbi5zZWdtZW50Lmxlbmd0aD0wLjI1KSArCiAgdGhlbWUoYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTI0KSwKICAgICAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZT0yMCksYXNwZWN0LnJhdGlvPTEpICsKICB5bGFiKCJUb3RhbCBSYXcgQ291bnQiKSArCiAgc3RhdF9wb2x5X2xpbmUobWV0aG9kPSJsbSIsIGZvcm11bGEgPSB5IH4geCArIDApICsKICBzdGF0X3BvbHlfZXEoZm9ybXVsYSA9IHkgfiB4ICsgMCwgYWVzKGxhYmVsID0gcGFzdGUoYWZ0ZXJfc3RhdChlcS5sYWJlbCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyX3N0YXQocnIubGFiZWwpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VwID0gIipcIiwgXCIqIikpLHNpemU9NyxsYWJlbC55PTAuOSxsYWJlbC54PTAuNSkKCmZpZzRfYy5wYXJ0XzIKCmBgYAoKIyMgUmFuayBieSBhdmVyYWdlIGNvdW50IGRpc3RyaWJ1dGlvbnMgZm9yIFYxUiwgVjJSLCBhbmQgVlNOLU9SLCAqKnBzZXVkb2dlbmVzIGluY2x1ZGVkKiogIHsudGFic2V0IC50YWJzZXQtcGlsbHN9ICAKCiMjIyBWMVIgIAoKYGBge3J9CgojIENyZWF0ZSB0aGUgZ2FtbWEgbW9kZWwgd2l0aCBhIDE1IGRlZ3JlZSBwb2x5bm9taWFsLgp2MXIuZ2FtbWEubW9kZWwgPC0gZ2xtKGF2Z19leHAgfiBwb2x5KHJhbmssIDE1LCByYXc9VFJVRSksIGRhdGE9djFyLmRpc3QucGxvdCwKICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sPWdsbS5jb250cm9sKG1heGl0PTEwMDApLCBmYW1pbHk9R2FtbWEobGluaz0ibG9nIikpCiMgQ3JlYXRlIHRoZSB2ZWN0b3Igb2YgcHJlZGljdGVkIHZhbHVlcywgYmFzZWQgb24gb3VyIG1vZGVsLgp2MXIuZGlzdC5wbG90JHByZWRpY3RlZCA8LSBwcmVkaWN0KHYxci5nYW1tYS5tb2RlbCwgdHlwZT0icmVzcG9uc2UiKQoKIyBQbG90IHRoZSBkYXRhIGFuZCB0aGUgZml0dGVkIG1vZGVsCmZpZzRfYS5wYXJ0XzMgPC0gZ2dwbG90KHYxci5kaXN0LnBsb3QsIGFlcyh4ID0gcmFuaywgeSA9IGF2Z19leHAsIGNvbG9yPWNvbG9yKSkgKwogIGdlb21fcG9pbnQoc2l6ZT00KSArIHRoZW1lX2NsYXNzaWMoKSArIHNjYWxlX2NvbG9yX2lkZW50aXR5KCkgKwogIGdlb21fbGluZShhZXMoeSA9IHByZWRpY3RlZCksIGNvbG9yID0gImJsYWNrIikgKwogIHRoZW1lKGF4aXMudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9MjQpLAogICAgICAgIGF4aXMudGV4dD1lbGVtZW50X3RleHQoc2l6ZT0yMCksCiAgICAgICAgYXNwZWN0LnJhdGlvPTEpICsKICBnZW9tX2xhYmVsX3JlcGVsKGFlcyhsYWJlbCA9IGdlbmUsIGNvbG9yPSJibGFjayIpLCBzaXplPTgsIGxhYmVsLnNpemUgPSAwLCBwb2ludC5wYWRkaW5nPTAuNSwKICAgICAgICAgICAgICAgICAgIGRhdGEgPSB+IHN1YnNldCguLCBnZW5lID09IHYxci5tZXRhZGF0YSRnZW5lWzE6Nl0pLCBsYWJlbC5wYWRkaW5nPTAuMSwgCiAgICAgICAgICAgICAgICAgICBudWRnZV94PTcwLG51ZGdlX3k9LTEwLG1pbi5zZWdtZW50Lmxlbmd0aD0wLjI1LCBib3gucGFkZGluZz0wLjEpICsKICBsYWJzKHg9InJhbmsiLCB5PSJhdmdfZXhwIikKCmZpZzRfYS5wYXJ0XzMKCmBgYAoKIyMjIFYyUiAgCgpgYGB7cn0KCnYyci5nYW1tYS5tb2RlbCA8LSBnbG0oYXZnX2V4cCB+IHBvbHkocmFuaywgMjMsIHJhdz1UUlVFKSwgZGF0YT12MnIubWV0YWRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbD1nbG0uY29udHJvbChtYXhpdD0xMDAwKSwgZmFtaWx5PUdhbW1hKGxpbms9ImxvZyIpKQojIENyZWF0ZSB0aGUgdmVjdG9yIG9mIHByZWRpY3RlZCB2YWx1ZXMsIGJhc2VkIG9uIG91ciBtb2RlbC4KdjJyLmRpc3QucGxvdCRwcmVkaWN0ZWQgPC0gcHJlZGljdCh2MnIuZ2FtbWEubW9kZWwsIHR5cGU9InJlc3BvbnNlIikKCiMgUGxvdCB0aGUgZGF0YSBhbmQgdGhlIGZpdHRlZCBtb2RlbApmaWc0X2IucGFydF8zIDwtIGdncGxvdCh2MnIuZGlzdC5wbG90LCBhZXMoeCA9IHJhbmssIHkgPSBhdmdfZXhwLCBjb2xvcj1jb2xvcikpICsKICBnZW9tX3BvaW50KHNpemU9NCkgKyB0aGVtZV9jbGFzc2ljKCkgKyBzY2FsZV9jb2xvcl9pZGVudGl0eSgpICsKICBnZW9tX2xpbmUoYWVzKHkgPSBwcmVkaWN0ZWQpLCBjb2xvciA9ICJibGFjayIpICsKICB0aGVtZShheGlzLnRpdGxlPWVsZW1lbnRfdGV4dChzaXplPTI0KSwKICAgICAgICBheGlzLnRleHQ9ZWxlbWVudF90ZXh0KHNpemU9MjApLAogICAgICAgIGFzcGVjdC5yYXRpbz0xKSArCiAgZ2VvbV9sYWJlbF9yZXBlbChhZXMobGFiZWwgPSBnZW5lLGNvbG9yPSJibGFjayIpLCBzaXplPTgsIGxhYmVsLnNpemUgPSAwLCBwb2ludC5wYWRkaW5nPTAuNSwKICAgICAgICAgICAgICAgICAgIGRhdGEgPSB+IHN1YnNldCguLCBnZW5lID09IHYyci5tZXRhZGF0YSRnZW5lWzE6Nl0pLCBsYWJlbC5wYWRkaW5nPTAuMSwgCiAgICAgICAgICAgICAgICAgICBudWRnZV94PTMwLCBtaW4uc2VnbWVudC5sZW5ndGg9MC4yNSwgYm94LnBhZGRpbmc9MC4xKSArCiAgbGFicyh4ID0gInJhbmsiLCB5ID0gImF2Z19leHAiKQoKZmlnNF9iLnBhcnRfMwoKYGBgCgojIyMgT2xmciAgCgpgYGB7cn0KCm9sZnIuZ2FtbWEubW9kZWwgPC0gZ2xtKGF2Z19leHAgfiBwb2x5KHJhbmssIDE1LCByYXc9VFJVRSksIGRhdGE9b2xmci5tZXRhZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sPWdsbS5jb250cm9sKG1heGl0PTEwMDApLCBmYW1pbHk9R2FtbWEobGluaz0ibG9nIikpCm9sZnIuZGlzdC5wbG90JHByZWRpY3RlZCA8LSBwcmVkaWN0KG9sZnIuZ2FtbWEubW9kZWwsIHR5cGU9InJlc3BvbnNlIikKCiMgUGxvdCB0aGUgZGF0YSBhbmQgdGhlIGZpdHRlZCBtb2RlbApmaWc0X2MucGFydF8zIDwtIGdncGxvdChvbGZyLmRpc3QucGxvdCwgYWVzKHggPSByYW5rLCB5ID0gYXZnX2V4cCwgY29sb3I9Y29sb3IpKSArCiAgZ2VvbV9wb2ludChzaXplPTQpICsgdGhlbWVfY2xhc3NpYygpICsgc2NhbGVfY29sb3JfaWRlbnRpdHkoKSArCiAgZ2VvbV9saW5lKGFlcyh5ID0gcHJlZGljdGVkKSwgY29sb3IgPSAiYmxhY2siKSArCiAgdGhlbWUoYXhpcy50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT0yNCksCiAgICAgICAgYXhpcy50ZXh0PWVsZW1lbnRfdGV4dChzaXplPTIwKSwKICAgICAgICBhc3BlY3QucmF0aW89MSkgKwogIGdlb21fbGFiZWxfcmVwZWwoYWVzKGxhYmVsPWdlbmUsY29sb3I9ImJsYWNrIiksIHNpemU9OCwgbGFiZWwuc2l6ZT0wLCBwb2ludC5wYWRkaW5nPTAuNSwgbWF4Lm92ZXJsYXBzPTEsCiAgICAgICAgICAgICAgICAgICBkYXRhID0gfiBzdWJzZXQoLiwgZ2VuZT09b2xmci5tZXRhZGF0YSRnZW5lWzE6N10sIGxhYmVsLnBhZGRpbmc9MC4xKSwgCiAgICAgICAgICAgICAgICAgICBudWRnZV94PTE1MCwgbnVkZ2VfeT0tMSwgbWluLnNlZ21lbnQubGVuZ3RoPTAuMjUsIGJveC5wYWRkaW5nPTAuMSwgeGxpbT1jKDc1LDYwMCkpICsKICBsYWJzKHggPSAicmFuayIsIHkgPSAiYXZnX2V4cCIpCgpmaWc0X2MucGFydF8zCgpgYGAK