LyoKICogUHJvZ3JhbSBNYW5hZ2VyCiAqCiAqIENvcHlyaWdodCAxOTk2IFVscmljaCBTY2htaWQKICogRnJlbmNoIEZyLnJjIGJ5IFBhYmxvIFNhcmF0eGFnYQogKiBDb3B5cmlnaHQgMjAwMiBTeWx2YWluIFBldHJlb2xsZQogKiBDb3B5cmlnaHQgMjAwNiBKb25hdGhhbqBFcm5zdAogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0ZSRU5DSCwgU1VCTEFOR19ORVVUUkFMCgovKiBNZW51ICovCgpNQUlOX01FTlUgTUVOVQp7CiBQT1BVUCAiJkZpY2hpZXIiIHsKICAgTUVOVUlURU0gIiZOb3V2ZWF1Li4uIiwgICAgICAgICAgICAgIFBNX05FVwogICBNRU5VSVRFTSAiTyZ1dnJpclx0RW50cullIiwgICAgICAgICAgICAgUE1fT1BFTgogICBNRU5VSVRFTSAiJkTpcGxhY2VyLi4uXHRGNyIsICAgICAgICAgICAgIFBNX01PVkUsICAgICAgR1JBWUVECiAgIE1FTlVJVEVNICImQ29waWVyLi4uXHRGOCIsICAgICAgICAgICAgIFBNX0NPUFksICAgICAgR1JBWUVECiAgIE1FTlVJVEVNICImU3VwcHJpbWVyXHRTdXBwciIsICAgICAgICAgICBQTV9ERUxFVEUKICAgTUVOVUlURU0gIiZQcm9wcmnpdOlzLi4uXHRBbHQrRW50cullIiwgICAgICAgUE1fQVRUUklCVVRFUwogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIkUmeOljdXRlci4uLiIsICAgICAgICAgIFBNX0VYRUNVVEUKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICImUXVpdHRlciBXaW5kb3dzLi4uIiwgICAgICAgICAgICAgUE1fRVhJVAogfQogUE9QVVAgIiZPcHRpb25zIiB7CiAgIE1FTlVJVEVNICJS6W9yZyZhbmlzYXRpb24gYXV0b21hdGlxdWUiLCAgUE1fQVVUT19BUlJBTkdFCiAgIE1FTlVJVEVNICImUulkdWlyZSDgIGwndXRpbGlzYXRpb24iLCAgICBQTV9NSU5fT05fUlVOCiAgIE1FTlVJVEVNICImRW5yZWdpc3RyZXIgbGEgY29uZmlndXJhdGlvbiBlbiBxdWl0dGFudCIsIFBNX1NBVkVfU0VUVElOR1MKIH0KIFBPUFVQICJGJmVu6nRyZXMiIHsKICAgTUVOVUlURU0gIiZDYXNjYWRlXHRNYWorRjUiLCAgICAgICBQTV9PVkVSTEFQCiAgIE1FTlVJVEVNICImTW9zYe9xdWVcdE1haitGNCIsICBQTV9TSURFX0JZX1NJREUKICAgTUVOVUlURU0gIiZS6W9yZ2FuaXNlciBsZXMgaWP0bmVzIiwgICAgICAgUE1fQVJSQU5HRQogfQogCiBQT1BVUCAiQWlkJmUiIHsKICAgTUVOVUlURU0gIiZTb21tYWlyZSIsICAgICAgICAgUE1fQ09OVEVOVFMKICAgTUVOVUlURU0gIiZSZWNoZXJjaGVyLi4uIiwgICAgICAgICAgIFBNX1NFQVJDSAogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIiZVdGlsaXNlciBsJ2FpZGUiLCAgICAgUE1fSEVMUE9OSEVMUAogICBNRU5VSVRFTSAiRGlkYWN0aWNpZWwgJldpbmRvd3MiLCAgICAgICAgIFBNX1RVVE9SSUFMCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgoKICAgUE9QVVAgIiZJbmZvLi4uIiB7CiAgICAgTUVOVUlURU0gIiZMaWNlbmNlIiwgICAgICAgIFBNX0xJQ0VOU0UKICAgICBNRU5VSVRFTSAiQVVDVU5FICZHQVJBTlRJRSIsICAgIFBNX05PX1dBUlJBTlRZCiAgICAgTUVOVUlURU0gIsAgJnByb3BvcyBkZSBXaW5lIiwgICAgIFBNX0FCT1VUX1dJTkUKICAgfQogfQp9CgovKiBEaWFsb2cgYE5ldycgKi8KCkRJQUxPR19ORVcgRElBTE9HIDAsIDAsIDE3MCwgNjUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiTm91dmVhdSIKewpSQURJT0JVVFRPTiAgICIiLCAgICAgICAgICAgICAgICAgUE1fTkVXX0dST1VQLCAgICAxMCwgMTUsICAxMCwgMTUKTFRFWFQgICAgICAgICAiJkdyb3VwZSBkZSBwcm9ncmFtbWVzIiwgICBQTV9ORVdfR1JPVVAsICAgIDIwLCAxOCwgIDgwLCAxNQpSQURJT0JVVFRPTiAgICIiLCAgICAgICAgICAgICAgICAgUE1fTkVXX1BST0dSQU0sICAxMCwgMzUsICAxMCwgMTUKTFRFWFQgICAgICAgICAiJlByb2dyYW1tZSIsIFBNX05FV19QUk9HUkFNLCAgMjAsIDM4LCAgODAsIDE1CkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgICAgSURPSywgICAgICAgICAgIDEwNSwgIDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQW5udWxlciIsICAgICAgSURDQU5DRUwsICAgICAgIDEwNSwgMjUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQWlkJmUiLCAgICAgICAgUE1fSEVMUCwgICAgICAgIDEwNSwgNDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKfQoKLyogRGlhbG9nIGBNb3ZlJyAqLwoKRElBTE9HX01PVkUgRElBTE9HIDAsIDAsIDI1MCwgNjUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiROlwbGFjZXIgdW4gcHJvZ3JhbW1lIgp7CkxURVhUICAgICAgICAgIkTpcGxhY2VyIGxlIHByb2dyYW1tZaA6IiwgICAgSURJR05PUkUsICAgICAgICAgICAgNSwgIDUsICA5MCwgMTUKTFRFWFQgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICBQTV9QUk9HUkFNLCAgICAgICAgIDk1LCAgNSwgIDkwLCAxNQpMVEVYVCAgICAgICAgICLAIHBhcnRpciBkdSBncm91cGWgOiIsIElESUdOT1JFLCAgICAgICAgICAgIDUsIDEzLCAgOTAsIDE1CkxURVhUICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgUE1fRlJPTV9HUk9VUCwgICAgICA5NSwgMTMsICA5MCwgMTUKTFRFWFQgICAgICAgICAiJlZlcnMgbGUgZ3JvdXBloDoiLCAgIFBNX1RPX0dST1VQX1RYVCwgICAgIDUsIDI4LCAxNDAsIDE1CkNPTUJPQk9YICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE1fVE9fR1JPVVAsICAgICAgICAgNSwgMzgsIDE0MCwgNTAsIFdTX1RBQlNUT1AgfCBDQlNfRFJPUERPV05MSVNUCkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgICAgICAgIElET0ssICAgICAgICAgICAgICAxODUsICA1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFubnVsZXIiLCAgICAgICAgICBJRENBTkNFTCwgICAgICAgICAgMTg1LCAyNSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJBaWQmZSIsICAgICAgICAgICAgUE1fSEVMUCwgICAgICAgICAgIDE4NSwgNDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKfQoKLyogRGlhbG9nIGBDb3B5JyAqLwoKRElBTE9HX0NPUFkgRElBTE9HIDAsIDAsIDI1MCwgNjUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiQ29waWVyIHVuIHByb2dyYW1tZSIKewpMVEVYVCAgICAgICAgICJDb3BpZXIgbGUgcHJvZ3JhbW1loDoiLCAgICBJRElHTk9SRSwgICAgICAgICAgICA1LCAgNSwgIDkwLCAxNQpMVEVYVCAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgIFBNX1BST0dSQU0sICAgICAgICAgOTUsICA1LCAgOTAsIDE1CkxURVhUICAgICAgICAgIsAgcGFydGlyIGR1IGdyb3VwZaA6IiwgSURJR05PUkUsICAgICAgICAgICAgNSwgMTMsICA5MCwgMTUKTFRFWFQgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICBQTV9GUk9NX0dST1VQLCAgICAgIDk1LCAxMywgIDkwLCAxNQpMVEVYVCAgICAgICAgICImVmVycyBsZSBncm91cGWgOiIsICAgUE1fVE9fR1JPVVBfVFhULCAgICAgNSwgMjgsIDE0MCwgMTUKQ09NQk9CT1ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTV9UT19HUk9VUCwgICAgICAgICA1LCAzOCwgMTQwLCA1MCwgV1NfVEFCU1RPUCB8IENCU19EUk9QRE9XTkxJU1QKREVGUFVTSEJVVFRPTiAiT0siLCAgICAgICAgICAgICAgSURPSywgICAgICAgICAgICAgIDE4NSwgIDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQW5udWxlciIsICAgICAgICAgIElEQ0FOQ0VMLCAgICAgICAgICAxODUsIDI1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFpZCZlIiwgICAgICAgICAgICBQTV9IRUxQLCAgICAgICAgICAgMTg1LCA0NSwgIDYwLCAxNSwgV1NfVEFCU1RPUAp9CgovKiBEaWFsb2cgYEdyb3VwIGF0dHJpYnV0ZXMnICovCgpESUFMT0dfR1JPVVAgRElBTE9HIDAsIDAsIDIzMCwgNjUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiUHJvcHJp6XTpcyBkZSBncm91cGUiCnsKTFRFWFQgICAgICImTm9tIDoiLCBQTV9ERVNDUklQVElPTl9UWFQsICAgMDUsIDE4LCAgNTAsIDEwCkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNX0RFU0NSSVBUSU9OLCAgICAgICA2MCwgMTgsICA5MCwgMTUsIFdTX1RBQlNUT1AKTFRFWFQgICAgICImRmljaGllciBkdSBncm91cGWgOiIsICAgICAgICBQTV9GSUxFX1RYVCwgICAgICAgICAgMDUsIDM4LCAgNTAsIDEwCkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNX0ZJTEUsICAgICAgICAgICAgICA2MCwgMzgsICA5MCwgMTUsIFdTX1RBQlNUT1AKREVGUFVTSEJVVFRPTiAiT0siLCAgICAgICAgICAgIElET0ssICAgICAgICAgICAgICAgIDE1NSwgIDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQW5udWxlciIsICAgICAgICBJRENBTkNFTCwgICAgICAgICAgICAxNTUsIDI1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFpZCZlIiwgICAgICAgICAgUE1fSEVMUCwgICAgICAgICAgICAgMTU1LCA0NSwgIDYwLCAxNSwgV1NfVEFCU1RPUAp9CgovKiBEaWFsb2cgYFByb2dyYW0gYXR0cmlidXRlcycgKi8KCkRJQUxPR19QUk9HUkFNIERJQUxPRyAwLCAwLCAyNTAsIDEwNQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJQcm9wcmnpdOlzIGRlIHByb2dyYW1tZSIKewpMVEVYVCAgICAgICAgICImTm9toDoiLCAgUE1fREVTQ1JJUFRJT05fVFhULCAgIDA1LCAxMCwgIDYwLCAxMApFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE1fREVTQ1JJUFRJT04sICAgICAgIDgwLCAxMCwgIDkwLCAxNSwgV1NfVEFCU1RPUApMVEVYVCAgICAgICAgICImTGlnbmUgZGUgY29tbWFuZGWgOiIsIFBNX0NPTU1BTkRfTElORV9UWFQsICAwNSwgMjUsICA2MCwgMTAKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNX0NPTU1BTkRfTElORSwgICAgICA4MCwgMjUsICA5MCwgMTUsIFdTX1RBQlNUT1AKTFRFWFQgICAgICAgICAiUulwZXJ0b2lyZSBkZSB0cmEmdmFpbKA6IiwgICAgUE1fRElSRUNUT1JZX1RYVCwgICAgIDA1LCA0MCwgIDYwLCAxMApFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE1fRElSRUNUT1JZLCAgICAgICAgIDgwLCA0MCwgIDkwLCAxNSwgV1NfVEFCU1RPUApMVEVYVCAgICAgICAgICImVG91Y2hlIGRlIHJhY2NvdXJjaaA6IiwgICAgICBQTV9IT1RfS0VZX1RYVCwgICAgICAgMDUsIDU1LCAgNjAsIDEwCkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTV9IT1RfS0VZLCAgICAgICAgICAgODAsIDU1LCAgOTAsIDE1LCBXU19UQUJTVE9QCklDT04gICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICBQTV9JQ09OLCAgICAgICAgICAgICAgMjAsIDcwCkNIRUNLQk9YICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICBQTV9TWU1CT0wsICAgICAgICAgICAgODAsIDc1LCAgMTAsIDEwLCBXU19UQUJTVE9QCkxURVhUICAgICAgICAgIlLpZHVpcmUg4CBsJyZ1dGlsaXNhdGlvbiIsICAgICAgIElESUdOT1JFLCAgICAgICAgICAgICA5NSwgNzUsICA3NSwgMTAKREVGUFVTSEJVVFRPTiAiT0siLCAgICAgICAgICAgICAgICAgICBJRE9LLCAgICAgICAgICAgICAgICAxODUsICA1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFubnVsZXIiLCAgICAgICAgICAgICAgIElEQ0FOQ0VMLCAgICAgICAgICAgIDE4NSwgMjUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiUGEmcmNvdXJpci4uLiIsICAgICAgICAgICAgICAgUE1fQlJPV1NFLCAgICAgICAgICAgMTg1LCA0NSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImQ2hhbmdlciBsJ2lj9G5lLi4uIiwgUE1fT1RIRVJfU1lNQk9MLCAgICAgMTg1LCA2NSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJBaWQmZSIsICAgICAgICAgICAgICAgICBQTV9IRUxQLCAgICAgICAgICAgICAxODUsIDg1LCAgNjAsIDE1LCBXU19UQUJTVE9QCn0KCi8qIERpYWxvZyBgU3ltYm9sJyAqLwoKRElBTE9HX1NZTUJPTCBESUFMT0cgMCwgMCwgMjAwLCA4NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJDaGFuZ2VyIGwnaWP0bmUiCnsKTFRFWFQgICAgICImTm9tIGR1IGZpY2hpZXKgOiIsICAgIFBNX0lDT05fRklMRV9UWFQsICAgIDUsIDE1LCAgNDAsIDEwCkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgIFBNX0lDT05fRklMRSwgICAgICAgNDUsIDE1LCAgODUsIDE1LCBXU19UQUJTVE9QCkxURVhUICAgICAiSWP0bmUgYSZjdHVlbGxloDoiLCBQTV9TWU1CT0xfTElTVF9UWFQsICA1LCAzMCwgMTI1LCAxMApDT01CT0JPWCAgICAgICAgICAgICAgICAgICAgICAgICBQTV9TWU1CT0xfTElTVCwgICAgICA1LCA0MCwgMTI1LCA1MCwKICAgQ0JTX0RST1BET1dOTElTVCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19PV05FUkRSQVdGSVhFRCB8IFdTX1RBQlNUT1AKREVGUFVTSEJVVFRPTiAiT0siLCAgICAgICAgIElET0ssICAgICAgICAgICAgICAxMzUsICA1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFubnVsZXIiLCAgICAgSURDQU5DRUwsICAgICAgICAgIDEzNSwgMjUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiUGEmcmNvdXJpci4uLiIsICAgIFBNX0JST1dTRSwgICAgICAgICAxMzUsIDQ1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFpZCZlIiwgICAgICAgUE1fSEVMUCwgICAgICAgICAgIDEzNSwgNjUsICA2MCwgMTUsIFdTX1RBQlNUT1AKfQoKLyogRGlhbG9nIGBFeGVjdXRlJyAqLwoKRElBTE9HX0VYRUNVVEUgRElBTE9HIDAsIDAsIDIwMCwgODUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiRXjpY3V0ZXIgdW4gcHJvZ3JhbW1lIgp7CkxURVhUICAgICAiJkxpZ25lIGRlIGNvbW1hbmRloDoiLCBJRElHTk9SRSwgICAwNSwgMTUsIDEyMCwgMTAKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE1fQ09NTUFORCwgMDUsIDI1LCAxMjAsIDE1LCBXU19UQUJTVE9QCkNIRUNLQk9YICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgIFBNX1NZTUJPTCwgIDA1LCA0NSwgIDEwLCAxMCwgV1NfVEFCU1RPUApMVEVYVCAgICAgICAgICJS6WR1aXJlIOAgbCcmdXRpbGlzYXRpb24iLCAgIElESUdOT1JFLCAgIDIwLCA0NSwgMTIwLCAxMApERUZQVVNIQlVUVE9OICJPSyIsICAgICAgICAgICAgICAgSURPSywgICAgICAxMzUsICA1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFubnVsZXIiLCAgICAgICAgICAgSURDQU5DRUwsICAxMzUsIDI1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIlBhJnJjb3VyaXIuLi4iLCAgICAgICAgICBQTV9CUk9XU0UsIDEzNSwgNDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQWlkJmUiLCAgICAgICAgICAgICBQTV9IRUxQLCAgIDEzNSwgNjUsICA2MCwgMTUsIFdTX1RBQlNUT1AKfQoKLyogU3RyaW5ncyAqLwoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewpJRFNfUFJPR1JBTV9NQU5BR0VSLAkJIkdlc3Rpb25haXJlIGRlIHByb2dyYW1tZXMiCklEU19FUlJPUiwJCQkiRVJSRVVSIgpJRFNfV0FSTklORywJCQkiQVRURU5USU9OIgpJRFNfSU5GTywJCQkiSW5mb3JtYXRpb24iCklEU19ERUxFVEUsCQkJIlN1cHByaW1lciIKSURTX0RFTEVURV9HUk9VUF9zLAkJIlZvdWxlei12b3VzIHN1cHByaW1lciBsZSBncm91cGUgq6Alc6C7oD8iCklEU19ERUxFVEVfUFJPR1JBTV9zLAkJIlZvdWxlei12b3VzIHN1cHByaW1lciBsZSBwcm9ncmFtbWUgq6Alc6C7oD8iCklEU19OT1RfSU1QTEVNRU5URUQsCQkiTm9uIGltcGxlbWVudOkiCklEU19GSUxFX1JFQURfRVJST1JfcywJCSJJbXBvc3NpYmxlIGQnb3V2cmlyIKugJXOguy4iCklEU19GSUxFX1dSSVRFX0VSUk9SX3MsCQkiSW1wb3NzaWJsZSBkJ2VucmVnaXN0cmVyIKugJXOguy4iCklEU19HUlBGSUxFX1JFQURfRVJST1JfcywJIlwKSW1wb3NzaWJsZSBkJ291dnJpciBsZSBncm91cGUgq6Alc6C7LlxuXApWb3VsZXotdm91cyBxdWUgbGUgR2VzdGlvbm5haXJlIGRlIHByb2dyYW1tZXMgZXNzYWllXG5cCmRlIGwnb3V2cmlyIGRhbnMgbGVzIHByb2NoYWluZXMgc2Vzc2lvbnOgPyIKSURTX09VVF9PRl9NRU1PUlksCQkiTeltb2lyZSBpbnN1ZmZpc2FudGUuIgpJRFNfV0lOSEVMUF9FUlJPUiwJCSJJbXBvc3NpYmxlIGQnYWZmaWNoZXIgbCdhaWRlLiIKSURTX1VOS05PV05fRkVBVFVSRV9zLAkJIkNhcmFjdOlyaXN0aXF1ZSBpbmNvbm51ZSBkYW5zICVzIgpJRFNfRklMRV9OT1RfT1ZFUldSSVRURU5fcywJIkxlIGZpY2hpZXIgq6Alc6C7IGV4aXN0ZS4gTm9uIOljcmFz6S4iCklEU19TQVZFX0dST1VQX0FTX3MsCQkiR3JvdXBlIGVucmVnaXN0cukgc291cyCroCVzoLsgcG91ciDpdml0ZXIgbCfpY3Jhc2VtZW50IGR1IGZpY2hpZXIgb3JpZ2luYWwuIgpJRFNfTk9fSE9UX0tFWSwJCQkiQXVjdW4iCklEU19BTExfRklMRVMsCQkJIlRvdXMgZmljaGllcnMgKCouKikiCklEU19QUk9HUkFNUywJCQkiUHJvZ3JhbW1lcyIKSURTX0xJQlJBUklFU19ETEwsCQkiQmlibGlvdGjocXVlcyAoKi5kbGwpIgpJRFNfU1lNQk9MX0ZJTEVTLAkJIklj9G5lcyIKSURTX1NZTUJPTFNfSUNPLAkJIklj9G5lcyAoKi5pY28pIgp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSBMQU5HVUFHRSBMQU5HX0ZSRU5DSCwgU1VCTEFOR19ORVVUUkFMCnsKSURTX0xJQ0VOU0VfQ0FQVElPTiwgICAgICAgICAgICAiTElDRU5DRSIKSURTX0xJQ0VOU0UsCiJDZXR0ZSBiaWJsaW90aOhxdWUgZXN0IGxpYnJlLCB2b3VzIHBvdXZleiBsYSByZWRpc3RyaWJ1ZXIgZXQvb3UgXApsYSBtb2RpZmllciBzZWxvbiBsZXMgdGVybWVzIGRlIGxhIExpY2VuY2UgUHVibGlxdWUgR+lu6XJhbGUgR05VIFwKTGltaXTpZSBwdWJsaellIHBhciBsYSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gKHZlcnNpb24gMi4xIG91IFwKYmllbiB0b3V0ZSBhdXRyZSB2ZXJzaW9uIHVsdOlyaWV1cmUgY2hvaXNpZSBwYXIgdm91cykuXG5cCkNldHRlIGJpYmxpb3Ro6HF1ZSBlc3QgZGlzdHJpYnXpZSBjYXIgcG90ZW50aWVsbGVtZW50IHV0aWxlLCBcCm1haXMgU0FOUyBBVUNVTkUgR0FSQU5USUUsIG5pIGV4cGxpY2l0ZSBuaSBpbXBsaWNpdGUsIHkgY29tcHJpcyBcCmxlcyBnYXJhbnRpZXMgZGUgY29tbWVyY2lhbGlzYXRpb24gb3UgZCdhZGFwdGF0aW9uIGRhbnMgdW4gYnV0IFwKc3DpY2lmaXF1ZS4gUmVwb3J0ZXotdm91cyDgIGxhIExpY2VuY2UgUHVibGlxdWUgR+lu6XJhbGUgR05VIFwKTGltaXTpZSBwb3VyIHBsdXMgZGUgZOl0YWlscy5cblwKVm91cyBkZXZleiBhdm9pciByZed1IHVuZSBjb3BpZSBkZSBsYSBMaWNlbmNlIFB1YmxpcXVlIEfpbulyYWxlIFwKR05VIExpbWl06WUgZW4gbeptZSB0ZW1wcyBxdWUgY2V0dGUgYmlibGlvdGjocXVloDsgc2kgY2Ugbidlc3QgcGFzIFwKbGUgY2FzLCDpY3JpdmV6IOAgbGEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgXApGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMS0xMzAxLCDJdGF0cy1VbmlzLiIKCklEU19XQVJSQU5UWV9DQVBUSU9OLCAiQVVDVU5FIEdBUkFOVElFIgpJRFNfV0FSUkFOVFksCiJDZXR0ZSBiaWJsaW90aOhxdWUgZXN0IGRpc3RyaWJ16WUgY2FyIHBvdGVudGllbGxlbWVudCB1dGlsZSwgXAptYWlzIFNBTlMgQVVDVU5FIEdBUkFOVElFLCBuaSBleHBsaWNpdGUgbmkgaW1wbGljaXRlLCB5IGNvbXByaXMgXApsZXMgZ2FyYW50aWVzIGRlIGNvbW1lcmNpYWxpc2F0aW9uIG91IGQnYWRhcHRhdGlvbiBkYW5zIHVuIGJ1dCBcCnNw6WNpZmlxdWUuIFJlcG9ydGV6LXZvdXMg4CBsYSBMaWNlbmNlIFB1YmxpcXVlIEfpbulyYWxlIEdOVSBcCkxpbWl06WUgcG91ciBwbHVzIGRlIGTpdGFpbHMuIgp9Cg==