LyoKICogIE5vdGVwYWQgKFN3ZWRpc2ggcmVzb3VyY2VzKQogKgogKiAgQ29weXJpZ2h0IDE5OTcsOTggTWFyY2VsIEJhdXIgPG1iYXVyQGcyNi5ldGh6LmNoPgogKiAgUHJvb2ZyZWFkIDE5OTggYnkgRGF2aWQgTGVlIExhbWJlcnQgPGxhbWJlcjQ1QGVnci5tc3UuZWR1PgogKiAgQ29weXJpZ2h0IDIwMDIgU3lsdmFpbiBQZXRyZW9sbGUgPHNwZXRyZW9sbGVAeWFob28uZnI+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCk1BSU5fTUVOVSBNRU5VIExBTkdVQUdFIExBTkdfU1dFRElTSCwgU1VCTEFOR19ORVVUUkFMCnsKIFBPUFVQICImQXJraXYiIHsKICBNRU5VSVRFTSAiJk55Li4uIiwgMHgxMDAKICBNRU5VSVRFTSAi1iZwcG5hIiwgMHgxMDEKICBNRU5VSVRFTSAiJlNwYXJhIiwgMHgxMDIKICBNRU5VSVRFTSAiU3BhcmEgJnNvbS4uLiIsIDB4MTAzCiAgTUVOVUlURU0gIiZTa3JpdiB1dCIsIDB4MTA0CiAgTUVOVUlURU0gIlNpZCBMYSZ5b3V0Li4uIiwgMHgxMDUKICBNRU5VSVRFTSAiU2tyaXZhciAmaW5zdORsbG5pbmdhci4uLiIsIDB4MTA2CiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZBdnNsdXRhIiwgMHgxMDgKIH0KUE9QVVAgIiZSZWRpZ2VyYSIgewogIE1FTlVJVEVNICImVW5kb1x0Q3RybCtaIiwgMHgxMTAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiS2xpcHBhXHRDdHJsK1giLCAweDExMQogIE1FTlVJVEVNICImS29waWVyYVx0Q3RybCtDIiwgMHgxMTIKICBNRU5VSVRFTSAiJktsaXN0cmEgaW5cdEN0cmwrViIsIDB4MTEzCiAgTUVOVUlURU0gIiZUYSBib3J0XHREZWwiLCAweDExNAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJNYXJrZXJhICZhbGx0IiwgMHgxMTYKICBNRU5VSVRFTSAiJlRpZC9EYXR1bVx0RjUiLCAweDExNwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImRGVsYSBs5W5nYSBtZW5pbmdhciIsIDB4MTE5CiB9ClBPUFVQICImU/ZrIiB7CiAgTUVOVUlURU0gIlP2ay4uLiIsIDB4MTIwCiAgTUVOVUlURU0gIiZT9msgbuRzdGFcdEYzIiwgMHgxMjEKIH0KUE9QVVAgIiZIauRscCIgewogIE1FTlVJVEVNICImSW5uZWjlbGwiLCAweDEzMAogIE1FTlVJVEVNICImU/ZrLi4uIiwgMHgxMzEKICBNRU5VSVRFTSAiQW525G5kbmluZ2VuICZhdiBoauRscCIsIDB4MTMyCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgUE9QVVAgIkluZiZvcm1hdGlvbi4uLiIgewogICBNRU5VSVRFTSAiJkxpY2VucyIsIDB4MTM1CiAgIE1FTlVJVEVNICImSU5HRU4gR0FSQU5USSIsIDB4MTM2CiAgIE1FTlVJVEVNICImT20gV2luZSIsIDB4MTM3CiAgfQogfQp9IAoKLyogRGlhbG9nIGBQYWdlIHNldHVwJyAqLwoKRElBTE9HX1BBR0VTRVRVUF8gRElBTE9HIDAsIDAsIDIyNSwgOTUKTEFOR1VBR0UgTEFOR19TV0VESVNILCBTVUJMQU5HX05FVVRSQUwKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkZPTlQgOCwgIkhlbHYiCkNBUFRJT04gIlNpZCBMYXlvdXQiCnsKTFRFWFQgICAgIiZIdXZ1ZG5vdDoiLCAgMHgxNDAsICAgMTAsIDA3LCA0MCwgMTUKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDEsICAgICAgIDYwLCAwNSwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImRm90bm90OiIsICAweDE0MiwgICAxMCwgMjQsIDQwLCAxNQpFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MywgICAgICAgNjAsIDIyLDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkdST1VQQk9YICJLYW50ZXI6IiwgICAgICAweDE0NCwgICAgIDEwLCA0MywxNjAsIDQ1CkxURVhUICAgICImVuRuc3RlcjoiLCAgICAgICAgMHgxNDUsICAgMjAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9MRUZUVkFMVUUsKi8gICAweDE0NywgICAgICAgNTAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJtZ2ZXI6IiwgICAgICAgICAweDE0OCwgICAgMjAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9UT1BWQUxVRSwqLyAgICAweDE0QSwgICAgICAgIDUwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZI9mdlcjoiLCAgICAgICAweDE0QiwgMTAwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfUklHSFRWQUxVRSwqLyAgMHgxNEQsICAgICAxMzAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJlVuZGVyOiIsICAgICAgMHgxNEUsMTAwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsKi8gMHgxNTAsICAgIDEzMCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpERUZQVVNIQlVUVE9OICJPSyIsICAgICAgICAgMHgxNTEsICAgICAgICAgICAgICAgICAgIDE4MCwgIDMsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJBdmJyeXQiLCAgICAgMHgxNTIsICAgICAgICAgICAgICAgMTgwLCAyMSwgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIiZIauRscCIsICAgICAgIDB4MTUzLCAgICAgICAgICAgICAgICAxODAsIDM5LCA0MCwgMTUsIFdTX1RBQlNUT1AKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUgTEFOR1VBR0UgTEFOR19TV0VESVNILCBTVUJMQU5HX05FVVRSQUwKewpTVFJJTkdfUEFHRVNFVFVQX0hFQURFUlZBTFVFLAkiJm4iICAgICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLAkiUGFnZSAmcyIgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0xFRlRWQUxVRSwJCSIyMCBtbSIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfUklHSFRWQUxVRSwJIjIwIG1tIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9UT1BWQUxVRSwJCSIyNSBtbSIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsCSIyNSBtbSIgICAgIC8qIEZJWE1FICovCgpTVFJJTkdfTk9URVBBRCwJCQkJCSJBbnRlY2tuaW5nYXIiClNUUklOR19FUlJPUiwJCQkJCSJGRUwiClNUUklOR19XQVJOSU5HLAkJCQkJIldBUk5JTkciClNUUklOR19JTkZPLAkJCQkJIkluZm9ybWF0aW9uIgoKU1RSSU5HX1VOVElUTEVELAkJCQkiKHVudGl0bGVkKSIKClNUUklOR19BTExfRklMRVMsCQkJCSJBbGxhIGZpbGVyICgqLiopIgpTVFJJTkdfVEVYVF9GSUxFU19UWFQsCQkJIlRleHQgZmlsZXIgKCoudHh0KSIKClNUUklOR19UT09MQVJHRSwJCQkJIkZpbGVuICclcycg5HIgZvZyIHN0b3IgZvZyIG5vdGVwYWQuXG4gXApBbnbkbmQgZW4gYW5uYW4gZWRpdG9yLiIKU1RSSU5HX05PVEVYVCwJCQkJCSJEdSBza3JldiBpbnRlIGluIG7lZ29uIHRleHQuIFwKXG5Ta3JpdiBu5WdvdCBvY2ggZvZyc/ZrIHNlZGFuIGlnZW4iClNUUklOR19ET0VTTk9URVhJU1QsCQkJCSJGaWxlICclcydcbmRvZXMgbm90IGV4aXN0XG5cbiBcCkRvIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBmaWxlID8iClNUUklOR19OT1RTQVZFRCwJCQkJIkZpbGUgJyVzJ1xuaGFzIGJlZW4gbW9kaWZpZWRcblxuIFwKV291bGQgeW91IGxpa2UgdG8gc2F2ZSB0aGUgY2hhbmdlcyA/IgpTVFJJTkdfTk9URk9VTkQsCQkJCQkiJyVzJyBoaXR0YWRlcyBpbnRlLiIKU1RSSU5HX09VVF9PRl9NRU1PUlksCQkJIkludGUgdGlsbHLka2xpZ3QgbWVkIG1pbm5lIGb2ciBhdHQgc2x1dGb2cmEgXApkZW4gaORyIHVwcGdpZnRlbi4gXG5BdnNsdXRhIGV0dCBlbGxlciBmbGVyYSBwcm9ncmFtIGb2ciBhdHQg9mthIG3kbmdkZW4gXG5mcml0dCBcCm1pbm5lLiIKCn0KCg==