LyoKICogIE5vdGVwYWQgKFN3ZWRpc2ggcmVzb3VyY2VzKQogKgogKiAgQ29weXJpZ2h0IDE5OTcsOTggTWFyY2VsIEJhdXIgPG1iYXVyQGcyNi5ldGh6LmNoPgogKiAgUHJvb2ZyZWFkIDE5OTggYnkgRGF2aWQgTGVlIExhbWJlcnQgPGxhbWJlcjQ1QGVnci5tc3UuZWR1PgogKiAgQ29weXJpZ2h0IDIwMDIgU3lsdmFpbiBQZXRyZW9sbGUgPHNwZXRyZW9sbGVAeWFob28uZnI+CiAqICBDb3B5cmlnaHQgMjAwNywgMjAwOCBEYW5pZWwgTnlsYW5kZXIgPHBvQGRhbmllbG55bGFuZGVyLnNlPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAibm90ZXBhZF9yZXMuaCIKCkxBTkdVQUdFIExBTkdfU1dFRElTSCwgU1VCTEFOR19ORVVUUkFMCgpNQUlOX01FTlUgTUVOVQp7CiBQT1BVUCAiJkFya2l2IiB7CiAgTUVOVUlURU0gIiZOeVx0Q3RybCtOIiwgICAgICAgICAgICBDTURfTkVXCiAgTUVOVUlURU0gItYmcHBuYS4uLlx0Q3RybCtPIiwgICAgICAgICAgICBDTURfT1BFTgogIE1FTlVJVEVNICImU3BhcmFcdEN0cmwrUyIsICAgICAgICAgICAgQ01EX1NBVkUKICBNRU5VSVRFTSAiU3BhcmEgcyZvbS4uLiIsICAgICBDTURfU0FWRV9BUwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImU2tyaXYgdXQuLi5cdEN0cmwrUCIsICAgICAgICAgQ01EX1BSSU5UCiAgTUVOVUlURU0gIlNpZGxhJnlvdXQuLi4iLCAgICBDTURfUEFHRV9TRVRVUAogIE1FTlVJVEVNICJTa3JpdmFyJmtvbmZpZ3VyYXRpb24uLi4iLCBDTURfUFJJTlRFUl9TRVRVUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImQXZzbHV0YSIsICAgICAgICAgIENNRF9FWElUCiB9ClBPUFVQICImUmVkaWdlcmEiIHsKICBNRU5VSVRFTSAiJsVuZ3JhXHRDdHJsK1oiLCAgICAgQ01EX1VORE8KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiS2xpcHAgJnV0XHRDdHJsK1giLCAgICBDTURfQ1VUCiAgTUVOVUlURU0gIiZLb3BpZXJhXHRDdHJsK0MiLCAgQ01EX0NPUFkKICBNRU5VSVRFTSAiS2xpc3RyYSAmaW5cdEN0cmwrViIsICAgICAgIENNRF9QQVNURQogIE1FTlVJVEVNICImVGEgYm9ydFx0RGVsIiwgICAgIENNRF9ERUxFVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiTWFya2VyYSAmYWxsdCIsICAgICBDTURfU0VMRUNUX0FMTAogIE1FTlVJVEVNICImVGlkL0RhdHVtXHRGNSIsICAgIENNRF9USU1FX0RBVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkRlbGEgbOVuZ2EgbWVuaW5nYXIiLCAgICAgIENNRF9XUkFQCiAgTUVOVUlURU0gIiZGb250Li4uIiwgICAgICAgICAgQ01EX0ZPTlQKIH0KUE9QVVAgIiZT9msiIHsKICBNRU5VSVRFTSAiU/ZrLi4uIiwgICAgICAgICAgICBDTURfU0VBUkNICiAgTUVOVUlURU0gIiZT9msgbuRzdGFcdEYzIiwgICAgQ01EX1NFQVJDSF9ORVhUCiAgTUVOVUlURU0gIiZFcnPkdHQuLi5cdEN0cmwrSCIsIENNRF9SRVBMQUNFCiB9ClBPUFVQICImSGrkbHAiIHsKICBNRU5VSVRFTSAiJklubmVo5WxsIiwgICAgICAgICBDTURfSEVMUF9DT05URU5UUwogIE1FTlVJVEVNICImU/ZrLi4uIiwgICAgICAgICAgIENNRF9IRUxQX1NFQVJDSAogIE1FTlVJVEVNICJBbnbkbmRuaW5nICZhdiBoauRscCIsICAgIENNRF9IRUxQX09OX0hFTFAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJk9tIEFudGVja25pbmdhciIsIENNRF9IRUxQX0FCT1VUX05PVEVQQUQKIH0KfQoKLyogRGlhbG9nIGBQYWdlIHNldHVwJyAqLwoKRElBTE9HX1BBR0VTRVRVUCBESUFMT0cgMCwgMCwgMjI1LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpDQVBUSU9OICJTaWRsYXlvdXQiCnsKTFRFWFQgICAgIiZTaWRodXZ1ZDoiLCAgMHgxNDAsICAgMTAsIDA3LCA0MCwgMTUKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgICA2MCwgMDUsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJlNpZGZvdDoiLCAgMHgxNDIsICAgMTAsIDI0LCA0MCwgMTUKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9GT09URVJWQUxVRSwgICA2MCwgMjIsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKR1JPVVBCT1ggIkthbnRlcjoiLCAgICAgIDB4MTQ0LCAgICAgMTAsIDQzLDE2MCwgNDUKTFRFWFQgICAgIiZW5G5zdGVyOiIsICAgICAgICAweDE0NSwgICAyMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9MRUZUVkFMVUUsICAgICA1MCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICIm1nZlcjoiLCAgICAgICAgIDB4MTQ4LCAgICAyMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9UT1BWQUxVRSwgICAgICA1MCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImSPZnZXI6IiwgICAgICAgMHgxNEIsIDEwMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9SSUdIVFZBTFVFLCAgIDEzMCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImVW5kZXI6IiwgICAgICAweDE0RSwxMDAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsICAxMzAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKREVGUFVTSEJVVFRPTiAiT0siLCAgICAgICAgIElET0ssICAgICAgICAgICAgICAgICAgIDE4MCwgIDMsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJBdmJyeXQiLCAgICAgSURDQU5DRUwsICAgICAgICAgICAgICAgMTgwLCAyMSwgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIiZIauRscCIsICAgICAgIElESEVMUCwgICAgICAgICAgICAgICAgMTgwLCAzOSwgNDAsIDE1LCBXU19UQUJTVE9QCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKU1RSSU5HX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgICAiJmYiClNUUklOR19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsICAgIlNpZGEgJnAiCgpTVFJJTkdfTk9URVBBRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQW50ZWNrbmluZ2FyIgpTVFJJTkdfRVJST1IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkVMIgpTVFJJTkdfV0FSTklORywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVkFSTklORyIKU1RSSU5HX0lORk8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZm9ybWF0aW9uIgoKU1RSSU5HX1VOVElUTEVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihuYW1ubPZzKSIKClNUUklOR19BTExfRklMRVMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxhIGZpbGVyICgqLiopIgpTVFJJTkdfVEVYVF9GSUxFU19UWFQsICAgICAgICAgICAgICAgICAgCSJUZXh0ZmlsZXIgKCoudHh0KSIKClNUUklOR19UT09MQVJHRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaWxlbiAnJXMnIORyIGb2ciBzdG9yIGb2ciBBbnRlY2tuaW5nYXIuXG4gXApBbnbkbmQgZW4gYW5uYW4gcmVkaWdlcmFyZS4iClNUUklOR19OT1RFWFQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEdSBza3JldiBpbnRlIGluIG7lZ29uIHRleHQuIFwKXG5Ta3JpdiBu5WdvdCBvY2ggZvZyc/ZrIHNlZGFuIGlnZW4iClNUUklOR19ET0VTTk9URVhJU1QsICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaWxlbiAnJXMnXG5maW5ucyBpbnRlXG5cbiBcClZpbGwgZHUgc2thcGEgZW4gbnkgZmlsPyIKU1RSSU5HX05PVFNBVkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbGVuICclcydcbmhhciDkbmRyYXRzXG5cbiBcClZpbGwgZHUgc3BhcmEg5G5kcmluZ2FybmE/IgpTVFJJTkdfTk9URk9VTkQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyVzJyBoaXR0YWRlcyBpbnRlLiIKU1RSSU5HX09VVF9PRl9NRU1PUlksICAgICAgICAgICAgICAgICAgICJEZXQgZmlubnMgaW50ZSB0aWxscuRja2xpZ3QgbWVkIG1pbm5lIGb2ciBhdHQgc2x1dGb2cmEgXApkZW4gaORyIHVwcGdpZnRlbi5cbkF2c2x1dGEgZXR0IGVsbGVyIGZsZXJhIHByb2dyYW0gZvZyIGF0dCD2a2EgbeRuZ2RlblxubGVkaWd0IFwKbWlubmUuIgoKfQo=