LyoKICogQ29weXJpZ2h0IDIwMDEgRXJpYyBQb3VlY2gKICogQ29weXJpZ2h0IDIwMDUgWXVuU29uZyBId2FuZwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0tPUkVBTiwgU1VCTEFOR19ORVVUUkFMCgpTVFJJTkdUQUJMRQpCRUdJTgpJRFNfRURJVCwJCSLG7cH9KCZFKSIKSURTX0RFRkFVTFQsCQkiseK6u8C4t84gvLPBpCgmRCkiCklEU19QUk9QRVJUSUVTLAkJIrzTvLooJlApIgpJRFNfTUFSSywJCSImTWFyayIKSURTX0NPUFksCQkiurm75ygmQykiCklEU19QQVNURSwJCSK62b+ps9ax4igmUCkiCklEU19TRUxFQ1RBTEwsCQkiuPC1ziC8scXDKCZTKSIKSURTX1NDUk9MTCwJCSK9usWpt9EoJlIpIgpJRFNfU0VBUkNILAkJIsOjseIoJkUpIgpJRFNfRk5UX0RJU1BMQVksCSKworCiwMcgsdvA2rTCICVsZCAgx8i8vyCzyrrxv6EgJWxkIMfIvL8gs/TAzLimILChwf20z7TZIgpJRFNfRk5UX1BSRVZJRVdfMSwJIsDMsM3AuiDF1726xq7A1LTPtNkiCklEU19GTlRfUFJFVklFV18yLAkiIgpJRFNfRExHX1RJVF9ERUZBVUxULCAgICAivLPEoSAtILHiursgvLPBpCIKSURTX0RMR19USVRfQ1VSUkVOVCwgICAgIryzxKEgLSDH9sDnILyzwaQiCklEU19ETEdfVElUX0VSUk9SLAkivLPBpCC/obevIgpJRFNfRExHX0VSUl9TQldJTlNJWkUsIAkivbrFqbiwILn2xtsgxamx4rTCILndteW9wyDDorq4tNkgsLCwxbOqIMS/vt/H1bTPtNkuIgoKSURTX0NNRF9JTlZBTElEX0VWRU5UX0lEICAid2luZWNvbnNvbGU6IMDMuqXGriBpZLimILrZv6kgs9bAuyC89iC++L3AtM+02VxuIgpJRFNfQ01EX0lOVkFMSURfQkFDS0VORCAgICAid2luZWNvbnNvbGU6IL/Dudm4o8H2IL7KwLoguem/o7XlXG4iCklEU19DTURfSU5WQUxJRF9PUFRJT04gICAgIndpbmVjb25zb2xlOiDAzMfYx9K89iC++LTCILjtt8kgtvPAziC/ybzHXG4iCklEU19DTURfQUJPVVQgICAgICAgICAgICAgICJXaW5lIMTcvNa/obytIMfBt86x17elIL3DwNtcbiIKSURTX0NNRF9MQVVOQ0hfRkFJTEVEICAgICAgIndpbmVjb25zb2xlOiDHrrHXuLIgJXMgvcPA2yC9x8bQLlxuIlwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIsDMILjtt8nAuiC/w7nZuKPB9iC+yr3AtM+02S5cbiIKCklEU19VU0FHRV9IRUFERVIgICAgICAgICAgICJcbrvnv+u5/TpcbiAgd2luZWNvbnNvbGUgW7/JvMddIDy47bfJPlxuXG6/ybzHOlxuIgpJRFNfVVNBR0VfQkFDS0VORCAgICAgICAgICAiICAtLWJhY2tlbmQ9e3VzZXJ8Y3Vyc2VzfSAgu+e/68DasKEgu/Ugw6LAuyC/rSCwzcDOwfYsXG4iXAogICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNlc7ChIFdpbmUgxNy81sOzt7Mgx/bA5yDFzbnMs86/oSAgs6rFuLO+ILDNwM7B9iC8scXDXG4iCklEU19VU0FHRV9DT01NQU5EICAgICAgICAgICIgIDy47bfJPiAgICAgICAgICAgICAgICAgVGhlIFdpbmUgx8G3zrHXt6XAuiDE3LzWwLsgxevH2LytIL3DwNu1ylxuIgpJRFNfVVNBR0VfRk9PVEVSICAgICAgICAgICAiXG6/uTpcbiAgd2luZWNvbnNvbGUgY21kXG5XaW5lIMTcvNa/obytIFdpbmUguO23ySDHwbfSx8HGriC9w8DbXG5cbiIKCkVORAoKSUREX09QVElPTiBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDE0MCwgMTA1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiC/ybzHICIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglHUk9VUEJPWCAixL+8rSDFqbHiIiwgLTEsIDEwLCAxMSwgNjAsIDQ0LCBCU19HUk9VUEJPWAoJQVVUT1JBRElPQlVUVE9OICLA27DUKCZTKSIsIElEQ19PUFRfQ1VSU09SX1NNQUxMLCAxNCwgMjMsIDQ0LCAxMCwgV1NfVEFCU1RPUAoJQVVUT1JBRElPQlVUVE9OICLB37CjKCZNKSIsIElEQ19PUFRfQ1VSU09SX01FRElVTSwgMTQsIDMzLCA0NCwgMTAsIFdTX1RBQlNUT1AKCUFVVE9SQURJT0JVVFRPTiAixamw1CgmTCkiLCBJRENfT1BUX0NVUlNPUl9MQVJHRSwgMTQsIDQzLCA0NCwgMTAsIFdTX1RBQlNUT1AKCglHUk9VUEJPWCAixMHGrrfRIiwgLTEsIDc1LCAxMSwgMTI1LCA0NCwgQlNfR1JPVVBCT1gKCUxURVhUICLGy773ILjetLoiLCAtMSwgNzksIDIzLCA0MCwgMTAKCUFVVE9DSEVDS0JPWCAixMHGrrfRKCZDKSIsIElEQ19PUFRfQ09ORl9DVFJMLCAxMjksIDIzLCA2MCwgMTAsIFdTX1RBQlNUT1AKCUFVVE9DSEVDS0JPWCAivazHwcauKCZIKSIsIElEQ19PUFRfQ09ORl9TSElGVCwgMTI5LCAzMywgNjAsIDEwLCBXU19UQUJTVE9QCglMVEVYVCAiuvy4pSDG7cH9IiwgLTEsIDc5LCA0MywgNTAsIDEwCglBVVRPQ0hFQ0tCT1ggIrChtMkoJkUpIiwgSURDX09QVF9RVUlDS19FRElULCAxMjksIDQzLCA2MCwgMTAsIFdTX1RBQlNUT1AKCglHUk9VUEJPWCAiuO23ySDI9726xeS4riIsIC0xLCAxMCwgNTcsIDE5MCwgMzUsIEJTX0dST1VQQk9YCglMVEVYVCAitNm9wyC6zrijtMIguO23ycDHILC5vPYoJk4pIDoiLCAtMSwgMTQsIDY3LCA3OCwgMTgKCUVESVRURVhUIElEQ19PUFRfSElTVF9TSVpFLCA5MiwgNjksIDMxLCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfT1BUX0hJU1RfU0laRV9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCglBVVRPQ0hFQ0tCT1ggIrXOufggIMGmsMUoJlIpIiwgSURDX09QVF9ISVNUX05PRE9VQkxFLCAxMzAsIDY3LCA1MCwgMTgsIFdTX1RBQlNUT1B8QlNfTVVMVElMSU5FCn0KCklERF9GT05UIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMTQwLCAxMDUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiILHbssMgIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUxURVhUICKx27LDKCZGKSIsIC0xLCA1LCA1LCAyNCwgOAoJTElTVEJPWCBJRENfRk5UX0xJU1RfRk9OVCwgNSwgMTgsIDkwLCA0MiwgTEJTX1NPUlR8V1NfVlNDUk9MTAoJTFRFWFQgIrv2u/MoJkMpIiwgLTEsIDEwMCwgNSwgNTAsIDgKCUNPTlRST0wgIiIsIElEQ19GTlRfQ09MT1JfRkcsICJXaW5lQ29uQ29sb3JQcmV2aWV3IiwgMEwsIDEwMCwgMTgsIDQ4LCAxNgoJQ09OVFJPTCAiIiwgSURDX0ZOVF9DT0xPUl9CSywgIldpbmVDb25Db2xvclByZXZpZXciLCAwTCwgMTAwLCA0MCwgNDgsIDE2CglMVEVYVCAixamx4jsoJlMpIiwgLTEsIDE1OCwgNSwgNDAsIDgKCUxJU1RCT1ggSURDX0ZOVF9MSVNUX1NJWkUsIDE1OCwgMTgsIDQwLCA2MCwgV1NfVlNDUk9MTAoJQ09OVFJPTCAiIiwgSURDX0ZOVF9QUkVWSUVXLCAiV2luZUNvbkZvbnRQcmV2aWV3IiwgMEwsIDUsIDYwLCAxMDksIDQwCglMVEVYVCAiIiwgSURDX0ZOVF9GT05UX0lORk8sIDEyOCwgNzYsIDgwLCAxOAp9CgpJRERfQ09ORklHIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMTQwLCAxMDUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiILyzwaQgIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUdST1VQQk9YICK59sbbIMG4IiwgLTEsIDEwLCAxMSwgMTAwLCA0MiwgQlNfR1JPVVBCT1gKCUxURVhUICKzyrrxKCZXKSA6IiwgLTEsIDE0LCAyNSwgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfU0JfV0lEVEgsIDY4LCAyMywgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfU0JfV0lEVEhfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoJTFRFWFQgIrP0wMwoJkgpIDoiLCAtMSwgMTQsIDM5LCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9TQl9IRUlHSFQsIDY4LCAzNywgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfU0JfSEVJR0hUX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCglHUk9VUEJPWCAiw6Igxamx4iIsIC0xLCAxMCwgNTUsIDEwMCwgNDIKCUxURVhUICKzyrrxKCZJKSA6IiwgLTEsIDE0LCA2OSwgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfV0lOX1dJRFRILCA2OCwgNjcsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1dJTl9XSURUSF9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCglMVEVYVCAis/TAzCgmRSkgOiIsIC0xLCAxNCwgODMsIDU0LCA5CglFRElUVEVYVCBJRENfQ05GX1dJTl9IRUlHSFQsIDY4LCA4MSwgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfV0lOX0hFSUdIVF9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCgoJR1JPVVBCT1ggIseusde4ssDHILOhIiwgLTEsIDExNSwgMTEsIDgwLCA0MiwgQlNfR1JPVVBCT1gKCUFVVE9DSEVDS0JPWCAixNy81iC03bHiKCZDKSIsIElEQ19DTkZfQ0xPU0VfRVhJVCwgMTE5LCAyNSwgNzIsIDIwLCBXU19UQUJTVE9QCgoJR1JPVVBCT1ggIr+htfC8xyIsIC0xLCAxMTUsIDU1LCA4MCwgNDIKCUNPTUJPQk9YIElEQ19DTkZfRURJVElPTl9NT0RFLCAxMTksIDY5LCA3MiwgMjAsIENCU19EUk9QRE9XTkxJU1R8V1NfVlNDUk9MTHxXU19UQUJTVE9QCn0KCklERF9TQVZFX1NFVFRJTkdTIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDIwLCAyMCwgMTcwLCA2MApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OCkNBUFRJT04gIiDE3LzWILjFsLO6r7z2IgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUdST1VQQk9YICIiLCAtMSwgMTAsIDEwLCAxNTAsIDMxLCBCU19HUk9VUEJPWAoJQVVUT1JBRElPQlVUVE9OICKzqsHfwMcgvLy8x8C7IMCnx9ggvLPBpCC6uMG4IiwgSURDX1NBVl9TQVZFLCAxNCwgMTUsIDE0MCwgMTAsIFdTX1RBQlNUT1AKCUFVVE9SQURJT0JVVFRPTiAiv8DB9yDH9sDnwMcgvLy8x7i4ILqvsOYiLCBJRENfU0FWX1NFU1NJT04sIDE0LCAyNywgMTQwLCAxMCwgV1NfVEFCU1RPUAoKCVBVU0hCVVRUT04gIsiuwM4iLCBJRE9LLCAzNSwgNDUsIDM1LCAxMgoJUFVTSEJVVFRPTiAiw+u80iIsIElEQ0FOQ0VMLCA4MCwgNDUsIDM1LCAxMgp9Cg==