LyoKICogQ29weXJpZ2h0IDIwMDQgSWx5YSBLb3JuaXlrbwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX1VLUkFJTklBTiwgU1VCTEFOR19ERUZBVUxUCgpNRU5VXzAwMSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglNRU5VSVRFTSAiJvfFzMnLJiMxMTEwOyAmIzEwMzA7y8/Oy8kiLAlGQ0lETV9TSFZJRVdfQklHSUNPTgoJTUVOVUlURU0gIibtwcwmIzExMTA7ICYjMTAzMDvLz87LySIsCUZDSURNX1NIVklFV19TTUFMTElDT04KCU1FTlVJVEVNICIm89DJ08/LIiwJCUZDSURNX1NIVklFV19MSVNUVklFVwoJTUVOVUlURU0gIibwz8TSz8LJwyYjMTExMDsiLAkJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKRU5ECgovKgogc2hlbGx2aWV3IGJhY2tncm91bmQgbWVudQoqLwpNRU5VXzAwMiBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglQT1BVUCIiCglCRUdJTgoJICBQT1BVUCAiJvfJx8zRxCIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiJvfFzMnLJiMxMTEwOyAmIzEwMzA7y8/Oy8kiLAlGQ0lETV9TSFZJRVdfQklHSUNPTgoJICAgIE1FTlVJVEVNICIm7cHMJiMxMTEwOyAmIzEwMzA7y8/Oy8kiLAlGQ0lETV9TSFZJRVdfU01BTExJQ09OCgkgICAgTUVOVUlURU0gIibz0MnTz8siLAkJRkNJRE1fU0hWSUVXX0xJU1RWSUVXCgkgICAgTUVOVUlURU0gIibwz8TSz8LJwyYjMTExMDsiLAlGQ0lETV9TSFZJRVdfUkVQT1JUVklFVwoJICBFTkQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICL30M/S0cTL1dfB1MkgJiYjMTAzMDvLz87LySIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAi+sEgJu7B2tfPwCIsCTB4MzAJLyogY29sdW1uIDAgKi8KCSAgICBNRU5VSVRFTSAi+sEgJvTJ0M/NIiwJMHgzMgkvKiBjb2x1bW4gMiAqLwoJICAgIE1FTlVJVEVNICL6wSAm8s/azSYjMTExMDvSz80iLAkweDMxCS8qIC4uLiAqLwoJICAgIE1FTlVJVEVNICL6wSAm5MHUz8AiLAkweDMzCgkgICAgTUVOVUlURU0gU0VQQVJBVE9SCgkgICAgTUVOVUlURU0gIibh19TPzcHUyd7OzyIsCUZDSURNX1NIVklFV19BVVRPQVJSQU5HRQoJICBFTkQKCSAgTUVOVUlURU0gIvfJ0iYjMTExMDvXztHUySAmIzEwMzA7y8/Oy8kiLAlGQ0lETV9TSFZJRVdfU05BUFRPR1JJRAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIu/Oz9fJ1MkiLAkJRkNJRE1fU0hWSUVXX1JFRlJFU0gKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICL309TB18nUySIsCQlGQ0lETV9TSFZJRVdfSU5TRVJUCgkgIE1FTlVJVEVNICL309TB18nUySDwz9PJzMHOztEiLAlGQ0lETV9TSFZJRVdfSU5TRVJUTElOSwoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgUE9QVVAgIvPU18/SydTJIgoJICBCRUdJTgoJICAgIE1FTlVJVEVNICLuz9fBICb0xcvBIiwJRkNJRE1fU0hWSUVXX05FV0ZPTERFUgoJICAgIE1FTlVJVEVNICLuz9fFICbwz9PJzMHOztEiLAlGQ0lETV9TSFZJRVdfTkVXTElOSwoJICAgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBFTkQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICL3zMHT1MnXz9PUJiMxMTEwOyIsCUZDSURNX1NIVklFV19QUk9QRVJUSUVTCglFTkQKRU5ECgovKgogc2hlbGx2aWV3IGl0ZW0gbWVudQoqLwpNRU5VX1NIVl9GSUxFIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KCVBPUFVQIiIKCUJFR0lOCgkgIE1FTlVJVEVNICIm8NLP1yYjMTExMDvEzsnLIiwJCUZDSURNX1NIVklFV19DVVQKCSAgTUVOVUlURU0gIib3JiMxMTEwO8TL0snUySIsCQlGQ0lETV9TSFZJRVdfQ09QWQoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIvfJJtImIzExMTA72sHUySIsCQlGQ0lETV9TSFZJRVdfQ1VUCgkgIE1FTlVJVEVNICIm68/QJiMxMTEwO9EiLAkJRkNJRE1fU0hWSUVXX0NPUFkKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICIm89TXz9LJ1Mkg8M/TyczBzs7RIiwJRkNJRE1fU0hWSUVXX0NSRUFURUxJTksKCSAgTUVOVUlURU0gIvfJJsTBzMnUySIsCQlGQ0lETV9TSFZJRVdfREVMRVRFCgkgIE1FTlVJVEVNICLwxdLFJsrNxc7V18HUySIsCQlGQ0lETV9TSFZJRVdfUkVOQU1FCgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiJvfMwdPUydfP09QmIzExMTA7IiwJRkNJRE1fU0hWSUVXX1BST1BFUlRJRVMKCUVORApFTkQKClNIQlJTRk9SRk9MREVSX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAxNSwgNDAsIDE4OCwgMTkyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IERTX01PREFMRlJBTUUgfCBEU19TRVRGT05UIHwgRFNfM0RMT09LCkNBUFRJT04gIu/HzNHEIMTPINTFy8kiCkZPTlQgOCwgIkhlbHYiCnsKIERFRlBVU0hCVVRUT04gIk9LIiwgMSwgODAsIDE3NiwgNTAsIDEyLCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICL3JiMxMTEwO8TNJiMxMTEwO87BIiwgMiwgMTM0LCAxNzYsIDUwLCAxMiwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiBMVEVYVCAiIiwgSUREX1RJVExFLCA0LCA0LCAxODAsIDEyCiBMVEVYVCAiIiwgSUREX1NUQVRVUywgNCwgMjUsIDE4MCwgMTIKIENPTlRST0wgIiIsIElERF9UUkVFVklFVywgIlN5c1RyZWVWaWV3MzIiLAogCVRWU19IQVNCVVRUT05TIHwgVFZTX0hBU0xJTkVTIHwgVFZTX0xJTkVTQVRST09UIHwKCVdTX0JPUkRFUiB8IFdTX1RBQlNUT1AsCgk0LCA0MCwgMTgwLCAxMjAKfQoKU0hFTExfQUJPVVRfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDE1LCA0MCwgMjEwLCAxNTIKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIu8gJXMiCkZPTlQgMTAsICJIZWx2Igp7CiBERUZQVVNIQlVUVE9OICJPSyIsIElET0ssIDE1MywgMTMwLCA1MCwgMTIsIFdTX1RBQlNUT1AKIExJU1RCT1ggOTksIDgsIDY1LCAxMzcsIDgyLCBMQlNfTk9USUZZIHwgV1NfVlNDUk9MTCB8IFdTX0JPUkRFUgogSUNPTiAiIiwgMTA4OCwgMTg5LCAxMCwgMTQsIDE2CiBMVEVYVCAiIiwgMTAwLCA4LCAxMCwgMTM3LCAzMwogTFRFWFQgIvLP2tLPws7Jy8kgV2luZToiLCA5OCwgOCwgNTUsIDEzNywgMTAKfQoKU0hFTExfUlVOX0RMRyBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAwLCAwLCAyMjcsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIiCkZPTlQgOCwgIkhlbHYiCnsKIElDT04gIiIsIDEyMjk3LCA3LCAxMSwgMTgsIDIwLCBXU19WSVNJQkxFCiBMVEVYVCAi99fFxCYjMTExMDvU2CAmIzExMTA7zSfRINDSz8fSwc3JLCDUxcvJLCDEz8vVzcXO1NUg3skg0sXT1dLTICYjMTAzMDvO1MXSzsXU1SwgJiMxMTEwOyBXaW5lINcmIzExMTA7xMvSySYjMTEwODsgJiMxMTExO8guIiwgMTIyODksIDM2LCAxMSwgMTgyLCAxOAogTFRFWFQgIib3JiMxMTEwO8TL0snUyToiLCAxMjMwNSwgNywgMzksIDI0LCAxMAogQ09OVFJPTCAiIiwgMTIyOTgsICJDT01CT0JPWCIsIFdTX0dST1VQIHwgV1NfVlNDUk9MTCB8IFdTX1ZJU0lCTEUgfCBDQlNfRElTQUJMRU5PU0NST0xMIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX0RST1BET1dOLCAzNiwgMzcsIDE4MywgMTAwCiBERUZQVVNIQlVUVE9OICJPSyIsIElET0ssIDYyLCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICL3JiMxMTEwO8TNJiMxMTEwO87BIiwgSURDQU5DRUwsIDExNiwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAiJu/HzNHELi4uIiwgMTIyODgsIDE3MCwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAp9CgovKgoJc3BlY2lhbCBmb2xkZXJzCiovClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKCUlEU19ERVNLVE9QCQki89QmIzExMTA7zNjOycPRIgoJSURTX01ZQ09NUFVURVIJCSLtJiMxMTEwO8og68/N0CfA1MXSIgp9CgovKgoJY29udGV4dCBtZW51cwoqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CglJRFNfVklFV19MQVJHRQkJIib3xczJyyYjMTExMDsgJiMxMDMwO8vPzsvJIgoJSURTX1ZJRVdfU01BTEwJCSIm7cHMJiMxMTEwOyAmIzEwMzA7y8/Oy8kiCglJRFNfVklFV19MSVNUCQkiJvPQydPPyyIKCUlEU19WSUVXX0RFVEFJTFMJIibwz8TSz8LJwyYjMTExMDsiCglJRFNfU0VMRUNUCQki98kmwtLB1MkiCglJRFNfT1BFTgkJIvcmIzExMTA7JsTL0snUySIKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewoJSURTX0NSRUFURUZPTERFUl9ERU5JRUQgIu7FINfEwczP09Eg09TXz9LJ1Mkgzs/X1SDUxcvVOiD3JiMxMTEwO8TNz9fBINUgxM/T1NXQJiMxMTEwOy4iCglJRFNfQ1JFQVRFRk9MREVSX0NBUFRJT04gIvDPzcnMy8Eg0NLJINPU18/Sxc7OJiMxMTEwOyDOz9fPJiMxMTExOyDUxcvJIgoJSURTX0RFTEVURUlURU1fQ0FQVElPTiAi8CYjMTExMDvE1NfF0sTWxc7O0SDXyczV3sXOztEgxsHKzNUiCglJRFNfREVMRVRFRk9MREVSX0NBUFRJT04gIvAmIzExMTA7xNTXxdLE1sXOztEg18nM1d7Fzs7RINTFy8kiCglJRFNfREVMRVRFSVRFTV9URVhUICL3ySDX0MXXzsXOJiMxMTEwOywg3c8gyM/exdTFINfJzNXeydTJICclMSc/IgoJSURTX0RFTEVURU1VTFRJUExFX1RFWFQgIvfJINfQxdfOxc4mIzExMTA7LCDdzyDIz97F1MUg18nM1d7J1MkgwyYjMTExMDsgJTEgxczFzcXO1MkoJiMxMTEwO9cpPyIKCUlEU19PVkVSV1JJVEVGSUxFX1RFWFQgIvDF0sXQydPB1Mkg5sHKzCAlMT8iCglJRFNfT1ZFUldSSVRFRklMRV9DQVBUSU9OICLwJiMxMTEwO8TU18XSxNbFzs7RIPDF0sXawdDJ09Ug5sHKzNUiCn0KCi8qCWNvbHVtbnMgaW4gdGhlIHNoZWxsdmlldwkqLwpTVFJJTkdUQUJMRQpCRUdJTgoJSURTX1NIVl9DT0xVTU4xCQki5sHKzCIKCUlEU19TSFZfQ09MVU1OMgkJIvLP2s0mIzExMTA70iIKCUlEU19TSFZfQ09MVU1OMwkJIvTJ0CIKCUlEU19TSFZfQ09MVU1ONAkJIvrNJiMxMTEwO87Fzs8iCglJRFNfU0hWX0NPTFVNTjUJCSLh1NLJwtXUySIKCUlEU19TSFZfQ09MVU1ONgkJIvLP2s0mIzExMTA70iIKCUlEU19TSFZfQ09MVU1ONwkJIvcmIzExMTA7zNjOycog8s/azSYjMTExMDvSIgpFTkQK