LyoKICogQ29weXJpZ2h0IDE5OTggSnVlcmdlbiBTY2htaWVkCiAqIENvcHlyaWdodCAyMDA2IFZpdGFsaXkgTWFyZ29sZW4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19SVVNTSUFOLCBTVUJMQU5HX0RFRkFVTFQKCk1FTlVfMDAxIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KICAgIE1FTlVJVEVNICImwe7r/Pjo5SDn7eD36ugiLAlGQ0lETV9TSFZJRVdfQklHSUNPTgogICAgTUVOVUlURU0gIibM5evq6OUg5+3g9+roIiwJRkNJRE1fU0hWSUVXX1NNQUxMSUNPTgogICAgTUVOVUlURU0gIibR7+jx7uoiLAkJRkNJRE1fU0hWSUVXX0xJU1RWSUVXCiAgICBNRU5VSVRFTSAiJs/u5PDu4e3uIiwJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKRU5ECgovKgogc2hlbGx2aWV3IGJhY2tncm91bmQgbWVudQoqLwpNRU5VXzAwMiBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiIgogICAgQkVHSU4KICAgICAgICBQT1BVUCAiJs/w7vHs7vLwIgogICAgICAgIEJFR0lOCiAgICAgICAgICAgIE1FTlVJVEVNICImwe7r/Pjo5SDn7eD36ugiLAlGQ0lETV9TSFZJRVdfQklHSUNPTgogICAgICAgICAgICBNRU5VSVRFTSAiJszl6+ro5SDn7eD36ugiLAlGQ0lETV9TSFZJRVdfU01BTExJQ09OCiAgICAgICAgICAgIE1FTlVJVEVNICIm0e/o8e7qIiwJCUZDSURNX1NIVklFV19MSVNUVklFVwogICAgICAgICAgICBNRU5VSVRFTSAiJs/u5PDu4e3uIiwJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKICAgICAgICBFTkQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBQT1BVUCAi0+/u8P/k7vfo8vwgJuft4Pfq6CIKICAgICAgICBCRUdJTgogICAgICAgICAgICBNRU5VSVRFTSAiz+4gJujs5e3oIiwJMHgzMAkvKiBjb2x1bW4gMCAqLwogICAgICAgICAgICBNRU5VSVRFTSAiz+4gJvLo7/MiLAkweDMyCS8qIGNvbHVtbiAyICovCiAgICAgICAgICAgIE1FTlVJVEVNICLP7iAm8ODn7OXw8yIsCTB4MzEJLyogLi4uICovCiAgICAgICAgICAgIE1FTlVJVEVNICLP7iAm5ODy5SIsCTB4MzMKICAgICAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgICAgIE1FTlVJVEVNICImwOLy7uzg8uj35fHq6CIsCUZDSURNX1NIVklFV19BVVRPQVJSQU5HRQogICAgICAgIEVORAogICAgICAgIE1FTlVJVEVNICLCJvvw7uLt//L8IOft4Pfq6CIsCUZDSURNX1NIVklFV19TTkFQVE9HUklECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIs4m4e3u4ujy/CIsCQlGQ0lETV9TSFZJRVdfUkVGUkVTSAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImwvHy4OLo8vwiLAkJRkNJRE1fU0hWSUVXX0lOU0VSVAogICAgICAgIE1FTlVJVEVNICLC8fLg4ujy/CAm//Dr++oiLAlGQ0lETV9TSFZJRVdfSU5TRVJUTElOSwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIFBPUFVQICLR7ufk4PL8IgogICAgICAgIEJFR0lOCiAgICAgICAgICAgIE1FTlVJVEVNICImz+Dv6uAiLAkJRkNJRE1fU0hWSUVXX05FV0ZPTERFUgogICAgICAgICAgICBNRU5VSVRFTSAiJt/w6/vqIiwJCUZDSURNX1NIVklFV19ORVdMSU5LCiAgICAgICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIEVORAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICLR4u4m6fHy4uAiLAkJRkNJRE1fU0hWSUVXX1BST1BFUlRJRVMKICAgIEVORApFTkQKCi8qCiBzaGVsbHZpZXcgaXRlbSBtZW51CiovCk1FTlVfU0hWX0ZJTEUgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgogICAgUE9QVVAgIiIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIibC++Hw4PL8IgkJRkNJRE1fU0hWSUVXX09QRU4KICAgICAgICBNRU5VSVRFTSAiJs/w7uLu5O3o6iIsCQlGQ0lETV9TSFZJRVdfRVhQTE9SRQogICAgICAgIE1FTlVJVEVNICImzvLq8Pvy/CIsCQlGQ0lETV9TSFZJRVdfT1BFTgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImwvvw5efg8vwiLAkJRkNJRE1fU0hWSUVXX0NVVAogICAgICAgIE1FTlVJVEVNICImyu7v6PDu4uDy/CIsCQlGQ0lETV9TSFZJRVdfQ09QWQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICLR7ufk4PL8ICb/8Ov76iIsCUZDSURNX1NIVklFV19DUkVBVEVMSU5LCiAgICAgICAgTUVOVUlURU0gIibT5ODr6PL8IiwJCUZDSURNX1NIVklFV19ERUxFVEUKICAgICAgICBNRU5VSVRFTSAiz+Xw5egm7OXt7uLg8vwiLAlGQ0lETV9TSFZJRVdfUkVOQU1FCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gItHi7ibp8fLi4CIsCQlGQ0lETV9TSFZJRVdfUFJPUEVSVElFUwogICAgRU5ECkVORAoKU0hCUlNGT1JGT0xERVJfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDE1LCA0MCwgMTg4LCAxOTIKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgRFNfTU9EQUxGUkFNRSB8IERTX1NFVEZPTlQgfCBEU18zRExPT0sKQ0FQVElPTiAizuHn7vAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogICAgREVGUFVTSEJVVFRPTiAixOAiLCAxLCA4MCwgMTc2LCA1MCwgMTIsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKICAgIFBVU0hCVVRUT04gIs7y7OXt6PL8IiwgMiwgMTM0LCAxNzYsIDUwLCAxMiwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiAgICBMVEVYVCAiIiwgSUREX1RJVExFLCA0LCA0LCAxODAsIDEyCiAgICBMVEVYVCAiIiwgSUREX1NUQVRVUywgNCwgMjUsIDE4MCwgMTIKICAgIENPTlRST0wgIiIsIElERF9UUkVFVklFVywgIlN5c1RyZWVWaWV3MzIiLAoJICAgICAgICBUVlNfSEFTQlVUVE9OUyB8IFRWU19IQVNMSU5FUyB8IFRWU19MSU5FU0FUUk9PVCB8CgkgICAgICAgIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AsCgkgICAgICAgIDQsIDQwLCAxODAsIDEyMAp9CgpTSEVMTF9BQk9VVF9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMTUsIDQwLCAyMTAsIDE1MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiziAlcyIKRk9OVCAxMCwgIk1TIFNoZWxsIERsZyIKewogREVGUFVTSEJVVFRPTiAiT0siLCBJRE9LLCAxNTMsIDEzMywgNTAsIDEyLCBXU19UQUJTVE9QCiBMSVNUQk9YIDk5LCA4LCA2NSwgMTM3LCA4MiwgTEJTX05PVElGWSB8IFdTX1ZTQ1JPTEwgfCBXU19CT1JERVIKIElDT04gIiIsIDEwODgsIDEwLCAxMCwgMTQsIDE2CiBMVEVYVCAiIiwgMTAwLCAzMCwgMTAsIDEzNywgMTAKIExURVhUICIiLCAxMDEsIDMwLCAyMiwgMTM3LCAxMAogTFRFWFQgItDg5/Dg4e7y9+jq6CBXaW5lOiIsIDk4LCA4LCA1NSwgMTM3LCAxMAp9CgpTSEVMTF9SVU5fRExHIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDAsIDAsIDIyNywgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiBJQ09OICIiLCAxMjI5NywgNywgMTEsIDE4LCAyMCwgV1NfVklTSUJMRQogTFRFWFQgIsLi5eTo8uUg6Oz/IO/w7uPw4Ozs+ywg7+Dv6ugsIOTu6vPs5e3y4CDo6+gg8OXx8/DxIMjt8uXw7eXy4Cwg6CBXaW5lIO7y6vDu5fIg6PUuIiwgMTIyODksIDM2LCAxMSwgMTgyLCAxOAogTFRFWFQgIibO8urw+/L8OiIsIDEyMzA1LCA3LCAzOSwgMjQsIDEwCiBDT05UUk9MICIiLCAxMjI5OCwgIkNPTUJPQk9YIiwgV1NfVEFCU1RPUCB8IFdTX0dST1VQIHwgV1NfVlNDUk9MTCB8IFdTX1ZJU0lCTEUgfCBDQlNfRElTQUJMRU5PU0NST0xMIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX0RST1BET1dOLCAzNiwgMzcsIDE4MywgMTAwCiBERUZQVVNIQlVUVE9OICJPSyIsIElET0ssIDYyLCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICLO8uzl7eAiLCBJRENBTkNFTCwgMTE2LCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICLO4Sbn7vAuLi4iLCAxMjI4OCwgMTcwLCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCn0KClNUUklOR1RBQkxFCnsKICAgIC8qIGNvbHVtbnMgaW4gdGhlIHNoZWxsdmlldyAqLwogICAgSURTX1NIVl9DT0xVTU4xCQkiyOz/IgogICAgSURTX1NIVl9DT0xVTU4yCQki0ODn7OXwIgogICAgSURTX1NIVl9DT0xVTU4zCQki0ujvIgogICAgSURTX1NIVl9DT0xVTU40CQkiyOfs5e247SIKICAgIElEU19TSFZfQ09MVU1ONQkJIsDy8Ojh8/L7IgogICAgSURTX1NIVl9DT0xVTU42CQkiz+7r7fvpIO7h+rjsIgogICAgSURTX1NIVl9DT0xVTU43CQki0eLu4e7k7e4iCiAgICBJRFNfU0hWX0NPTFVNTjgJCSLI7P8iCiAgICBJRFNfU0hWX0NPTFVNTjkJCSLK7uzs5e3y4PDo6SIKICAgIElEU19TSFZfQ09MVU1OMTAJCSLC6+Dk5evl9iIKICAgIElEU19TSFZfQ09MVU1OMTEJCSLD8PPv7+AiCgogICAgLyogc3BlY2lhbCBmb2xkZXJzICovCiAgICBJRFNfREVTS1RPUAkJCSLQ4OHu9+jpIPHy7usiCiAgICBJRFNfTVlDT01QVVRFUgkJIszu6SDq7uzv/P7y5fAiCgogICAgLyogY29udGV4dCBtZW51cyAqLwogICAgSURTX1ZJRVdfTEFSR0UJCSImwe7r/Pjo5SDn7eD36ugiCiAgICBJRFNfVklFV19TTUFMTAkJIibM5evq6OUg5+3g9+roIgogICAgSURTX1ZJRVdfTElTVAkJIibR7+jx7uoiCiAgICBJRFNfVklFV19ERVRBSUxTCQkiJs/u5PDu4e3uIgogICAgSURTX1NFTEVDVAkJCSImwvvh8ODy/CIKICAgIElEU19PUEVOCQkJIibO8urw+/L8IgoKICAgIElEU19DUkVBVEVGT0xERVJfREVOSUVECSLN5eLu5+zu5u3uIPHu5+Tg8vwg7+Dv6vMgLSDt5fIg7+7r7e7s7vfo6S4iCiAgICBJRFNfQ1JFQVRFRk9MREVSX0NBUFRJT04JIs746OHq4CDi7iDi8OXs/yDx7ufk4O3o/yDv4O/q6CIKICAgIElEU19ERUxFVEVJVEVNX0NBUFRJT04JIs/u5PLi5fDm5OXt6OUg8+Tg6+Xt6P8g9ODp6+AiCiAgICBJRFNfREVMRVRFRk9MREVSX0NBUFRJT04JIs/u5PLi5fDm5OXt6OUg8+Tg6+Xt6P8g7+Dv6ugiCiAgICBJRFNfREVMRVRFSVRFTV9URVhUCQki0+Tg6+jy/CAnJTEnPyIKICAgIElEU19ERUxFVEVNVUxUSVBMRV9URVhUCSLT5ODr6PL8IP3y6CDu4fzl6vL7ICglMSk/IgogICAgSURTX09WRVJXUklURUZJTEVfVEVYVCAiz+Dv6uAg8+blIPHu5OXw5ujyIPTg6esgJyUxJy5cblxuwvsg9e7y6PLlIOfg7OXt6PL8IOXj7j8iCiAgICBJRFNfT1ZFUldSSVRFRklMRV9DQVBUSU9OCSLP7uTy4uXw5uTl7ejlIOfg7OXt+yD04Onr4CIKICAgIElEU19PVkVSV1JJVEVGT0xERVJfVEVYVCAi3fLgIO/g7+rgIPPm5SDx7uTl8Obo8iDv4O/q8yAnJTEnLlxuXG4iXAoJICAgICLF8evoIPTg6ev7IOIg6u7t5fft7ukg7+Dv6uUg6Ozl/vIg8uUg5uUg6Ozl7eAsIPfy7iDoIPTg6ev7IOIg4vvh8ODt7e7pXG4iXAoJICAgICLv4O/q5Swg7u3oIOHz5PPyIOfg7OXt5e37LiDC+yDi8bgg5fm4IPXu8ujy5SDv5fDl7OXx8ujy/CDo6+gg8eru7+jw7uLg8vxcbiJcCgkgICAgIu/g7+rzPyIKCiAgICAvKiBtZXNzYWdlIGJveCBzdHJpbmdzICovCiAgICBJRFNfUkVTVEFSVF9USVRMRQkJIs/l8OXn4OPw8+fo8vwiCiAgICBJRFNfUkVTVEFSVF9QUk9NUFQJCSLC+yD17vLo8uUg8ejs8+vo8O7i4PL8IO/l8OXn4O/z8eogV2luZG93cz8iCiAgICBJRFNfU0hVVERPV05fVElUTEUJCSLC++rr/vfo8vwg7+jy4O3o5SIKICAgIElEU19TSFVURE9XTl9QUk9NUFQJCSLH4Oru7ffo8vwg8ODh7vLzIPEgV2luZT8iCgogICAgLyogc2hlbGwgZm9sZGVyIHBhdGggZGVmYXVsdCB2YWx1ZXMgKi8KICAgIElEU19QUk9HUkFNUyAgICAgICAgICAgICAgICAiw+vg4u3u5SDs5e3+XFzP8O7j8ODs7PsiCiAgICBJRFNfUEVSU09OQUwgICAgICAgICAgICAgICAgIszu6CDk7urz7OXt8vsiCiAgICBJRFNfRkFWT1JJVEVTICAgICAgICAgICAgICAgIsjn4fDg7e3u5SIKICAgIElEU19TVEFSVFVQICAgICAgICAgICAgICAgICAiw+vg4u3u5SDs5e3+XFzP8O7j8ODs7PtcXMDi8u7n4OPw8+fq4CIKICAgIElEU19SRUNFTlQgICAgICAgICAgICAgICAgICAizeXk4OLt5eUiCiAgICBJRFNfU0VORFRPICAgICAgICAgICAgICAgICAgIs7y7/Dg4ujy/CIKICAgIElEU19TVEFSVE1FTlUgICAgICAgICAgICAgICAiw+vg4u3u5SDs5e3+IgogICAgSURTX01ZTVVTSUMgICAgICAgICAgICAgICAgICLM7v8g7PPn++rgIgogICAgSURTX01ZVklERU8gICAgICAgICAgICAgICAgICLM7ugg9Ojr/Oz7IgogICAgSURTX0RFU0tUT1BESVJFQ1RPUlkgICAgICAgICLQ4OHu9+jpIPHy7usiCiAgICBJRFNfTkVUSE9PRCAgICAgICAgICAgICAgICAgItHl8uXi7uUg7urw8+bl7ejlIgogICAgSURTX1RFTVBMQVRFUyAgICAgICAgICAgICAgICLY4OHr7u37IgogICAgSURTX0FQUERBVEEgICAgICAgICAgICAgICAgICJBcHBsaWNhdGlvbiBEYXRhIgogICAgSURTX1BSSU5USE9PRCAgICAgICAgICAgICAgICLP8Ojt8uXw+yIKICAgIElEU19MT0NBTF9BUFBEQVRBICAgICAgICAgICAiTG9jYWwgU2V0dGluZ3NcXEFwcGxpY2F0aW9uIERhdGEiCiAgICBJRFNfSU5URVJORVRfQ0FDSEUgICAgICAgICAgIkxvY2FsIFNldHRpbmdzXFxUZW1wb3JhcnkgSW50ZXJuZXQgRmlsZXMiCiAgICBJRFNfQ09PS0lFUyAgICAgICAgICAgICAgICAgIkNvb2tpZXMiCiAgICBJRFNfSElTVE9SWSAgICAgICAgICAgICAgICAgIkxvY2FsIFNldHRpbmdzXFxIaXN0b3J5IgogICAgSURTX1BST0dSQU1fRklMRVMgICAgICAgICAgICJQcm9ncmFtIEZpbGVzIgogICAgSURTX01ZUElDVFVSRVMgICAgICAgICAgICAgICLM7ugg8Ojx8+3q6CIKICAgIElEU19QUk9HUkFNX0ZJTEVTX0NPTU1PTiAgICAiUHJvZ3JhbSBGaWxlc1xcQ29tbW9uIEZpbGVzIgogICAgSURTX0NPTU1PTl9ET0NVTUVOVFMgICAgICAgICLO4fno5SDk7urz7OXt8vsiCiAgICBJRFNfQURNSU5UT09MUyAgICAgICAgICAgICAgIsPr4OLt7uUg7OXt/lxcz/Du4/Dg7Oz7XFxBZG1pbmlzdHJhdGl2ZSBUb29scyIKICAgIElEU19DT01NT05fTVVTSUMgICAgICAgICAgICAizuH56OUg5O7q8+zl7fL7XFzM7v8g7PPn++rgIgogICAgSURTX0NPTU1PTl9QSUNUVVJFUyAgICAgICAgICLO4fno5SDk7urz7OXt8vtcXMzu6CDw6PHz7eroIgogICAgSURTX0NPTU1PTl9WSURFTyAgICAgICAgICAgICLO4fno5SDk7urz7OXt8vtcXMzu6CD06Ov87PsiCiAgICBJRFNfQ0RCVVJOX0FSRUEgICAgICAgICAgICAgIkxvY2FsIFNldHRpbmdzXFxBcHBsaWNhdGlvbiBEYXRhXFxNaWNyb3NvZnRcXENEIEJ1cm5pbmciCgogICAgSURTX05FV0ZPTERFUgkJIk5ldyBGb2xkZXIiCn0K