LyoKICogQ29weXJpZ2h0IDE5OTggSnVlcmdlbiBTY2htaWVkCiAqIENvcHlyaWdodCAyMDAzLTIwMDQgUHVvdGkKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19JVEFMSUFOLCBTVUJMQU5HX0RFRkFVTFQKCk1FTlVfMDAxIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KCU1FTlVJVEVNICImSWNvbmUgR3JhbmRpIiwJRkNJRE1fU0hWSUVXX0JJR0lDT04KCU1FTlVJVEVNICImSWNvbmUgUGljY29sZSIsCUZDSURNX1NIVklFV19TTUFMTElDT04KCU1FTlVJVEVNICImTGlzdGEiLAkJRkNJRE1fU0hWSUVXX0xJU1RWSUVXCglNRU5VSVRFTSAiJkRldHRhZ2xpIiwJCUZDSURNX1NIVklFV19SRVBPUlRWSUVXCkVORAoKLyoKIHNoZWxsdmlldyBiYWNrZ3JvdW5kIG1lbnUKKi8KTUVOVV8wMDIgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJUE9QVVAgIiIKCUJFR0lOCgkgIFBPUFVQICImVmlzdWFsaXp6YSIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiJkljb25lIEdyYW5kaSIsCUZDSURNX1NIVklFV19CSUdJQ09OCgkgICAgTUVOVUlURU0gIiZJY29uZSBQaWNjb2xlIiwJRkNJRE1fU0hWSUVXX1NNQUxMSUNPTgoJICAgIE1FTlVJVEVNICImTGlzdGEiLAkJRkNJRE1fU0hWSUVXX0xJU1RWSUVXCgkgICAgTUVOVUlURU0gIiZEZXR0YWdsaSIsCUZDSURNX1NIVklFV19SRVBPUlRWSUVXCgkgIEVORAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgUE9QVVAgIkRpc3BvbmkgJkljb25lIgoJICBCRUdJTgoJICAgIE1FTlVJVEVNICJQZXIgJk5vbWUiLAkweDMwCS8qIGNvbHVtbiAwICovCgkgICAgTUVOVUlURU0gIlBlciAmVGlwbyIsCTB4MzIJLyogY29sdW1uIDIgKi8KCSAgICBNRU5VSVRFTSAiUGVyICZEaW1lbnNpb25lIiwJMHgzMQkvKiAuLi4gKi8KCSAgICBNRU5VSVRFTSAiUGVyICZEYXRhIiwJMHgzMwoJICAgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICAgIE1FTlVJVEVNICImRGlzcG9uaSBBdXRvbWF0aWNhbWVudGUiLAlGQ0lETV9TSFZJRVdfQVVUT0FSUkFOR0UKCSAgRU5ECgkgIE1FTlVJVEVNICJBbGxpbmVhIEljb25lIiwJRkNJRE1fU0hWSUVXX1NOQVBUT0dSSUQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJBZ2dpb3JuYSIsCQlGQ0lETV9TSFZJRVdfUkVGUkVTSAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIkluY29sbGEiLAkJRkNJRE1fU0hWSUVXX0lOU0VSVAoJICBNRU5VSVRFTSAiQ3JlYSBDb2xsZWdhbWVudG8iLAlGQ0lETV9TSFZJRVdfSU5TRVJUTElOSwoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgUE9QVVAgIk51b3ZvIgoJICBCRUdJTgoJICAgIE1FTlVJVEVNICJOdW92YSAmQ2FydGVsbGEiLAlGQ0lETV9TSFZJRVdfTkVXRk9MREVSCgkgICAgTUVOVUlURU0gIk51b3ZvICZDb2xsZWdhbWVudG8iLAlGQ0lETV9TSFZJRVdfTkVXTElOSwoJICAgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBFTkQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJQcm9wcmlldOAiLAlGQ0lETV9TSFZJRVdfUFJPUEVSVElFUwoJRU5ECkVORAoKLyoKIHNoZWxsdmlldyBpdGVtIG1lbnUKKi8KTUVOVV9TSFZfRklMRSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglQT1BVUCAiIgoJQkVHSU4KCSAgTUVOVUlURU0gIkUmc3Bsb3JhIiwJCUZDSURNX1NIVklFV19FWFBMT1JFCgkgIE1FTlVJVEVNICImQXByaSIsCQlGQ0lETV9TSFZJRVdfT1BFTgoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIiZUYWdsaWEiLAkJRkNJRE1fU0hWSUVXX0NVVAoJICBNRU5VSVRFTSAiJkNvcGlhIiwJCUZDSURNX1NIVklFV19DT1BZCgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiJkNyZWEgQ29sbGVnYW1lbnRvIiwJRkNJRE1fU0hWSUVXX0NSRUFURUxJTksKCSAgTUVOVUlURU0gIiZDYW5jZWxsYSIsCQlGQ0lETV9TSFZJRVdfREVMRVRFCgkgIE1FTlVJVEVNICImUmlub21pbmEiLAkJRkNJRE1fU0hWSUVXX1JFTkFNRQoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIiZQcm9wcmlldOAiLAlGQ0lETV9TSFZJRVdfUFJPUEVSVElFUwoJRU5ECkVORAoKU0hCUlNGT1JGT0xERVJfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDE1LCA0MCwgMTg4LCAxOTIKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgRFNfTU9EQUxGUkFNRSB8IERTX1NFVEZPTlQgfCBEU18zRExPT0sKQ0FQVElPTiAiU2ZvZ2xpYSBDYXJ0ZWxsYSIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiBERUZQVVNIQlVUVE9OICJPSyIsIDEsIDgwLCAxNzYsIDUwLCAxMiwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAiQW5udWxsYSIsIDIsIDEzNCwgMTc2LCA1MCwgMTIsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAogTFRFWFQgIiIsIElERF9USVRMRSwgNCwgNCwgMTgwLCAxMgogTFRFWFQgIiIsIElERF9TVEFUVVMsIDQsIDI1LCAxODAsIDEyCiBDT05UUk9MICIiLCBJRERfVFJFRVZJRVcsICJTeXNUcmVlVmlldzMyIiwKIAlUVlNfSEFTQlVUVE9OUyB8IFRWU19IQVNMSU5FUyB8IFRWU19MSU5FU0FUUk9PVCB8CglXU19CT1JERVIgfCBXU19UQUJTVE9QLAoJNCwgNDAsIDE4MCwgMTIwCn0KClNIRUxMX0FCT1VUX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAxNSwgNDAsIDIxMCwgMTUyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJJbmZvcm1hemlvbmkgc3UgJXMiCkZPTlQgMTAsICJNUyBTaGVsbCBEbGciCnsKIERFRlBVU0hCVVRUT04gIk9LIiwgSURPSywgMTUzLCAxMzAsIDUwLCAxMiwgV1NfVEFCU1RPUAogTElTVEJPWCA5OSwgOCwgNjUsIDEzNywgODIsIExCU19OT1RJRlkgfCBXU19WU0NST0xMIHwgV1NfQk9SREVSCiBJQ09OICIiLCAxMDg4LCAxODksIDEwLCAxNCwgMTYKIExURVhUICIiLCAxMDAsIDgsIDEwLCAxMzcsIDMzCiBMVEVYVCAiV2luZSDoIGRpc3BvbmliaWxlIGdyYXppZSBhOiIsIDk4LCA4LCA1NSwgMTM3LCAxMAp9CgpTSEVMTF9SVU5fRExHIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDAsIDAsIDIyNywgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiBJQ09OICIiLCAxMjI5NywgNywgMTEsIDE4LCAyMCwgV1NfVklTSUJMRQogTFRFWFQgIkRpZ2l0YXJlIGlsIG5vbWUgZGVsIHByb2dyYW1tYSwgZGVsbGEgY2FydGVsbGEsIGRlbCBkb2N1bWVudG8gbyBkZWxsYSByaXNvcnNhIGludGVybmV0LCBlIFdpbmUgbGEgYXByaXLgLiIsIDEyMjg5LCAzNiwgMTEsIDE4MiwgMTgKIExURVhUICImQXByaToiLCAxMjMwNSwgNywgMzksIDI0LCAxMAogQ09OVFJPTCAiIiwgMTIyOTgsICJDT01CT0JPWCIsIFdTX1RBQlNUT1AgfCBXU19HUk9VUCB8IFdTX1ZTQ1JPTEwgfCBXU19WSVNJQkxFIHwgQ0JTX0RJU0FCTEVOT1NDUk9MTCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19EUk9QRE9XTiwgMzYsIDM3LCAxODMsIDEwMAogREVGUFVTSEJVVFRPTiAiT0siLCBJRE9LLCA2MiwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAiQW5udWxsYSIsIElEQ0FOQ0VMLCAxMTYsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIiZFc3Bsb3JhLi4uIiwgMTIyODgsIDE3MCwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAp9CgovKgoJc3BlY2lhbCBmb2xkZXJzCiovClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKCUlEU19ERVNLVE9QCQkiRGVza3RvcCIKCUlEU19NWUNPTVBVVEVSCQkiUmlzb3JzZSBkZWwgQ29tcHV0ZXIiCn0KCi8qCgljb250ZXh0IG1lbnVzCiovClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKCUlEU19WSUVXX0xBUkdFCQkiJkljb25lIEdyYW5kaSIKCUlEU19WSUVXX1NNQUxMCQkiSSZjb25lIFBpY2NvbGUiCglJRFNfVklFV19MSVNUCQkiJkxpc3RhIgoJSURTX1ZJRVdfREVUQUlMUwkiJkRldHRhZ2xpIgoJSURTX1NFTEVDVAkJIlNlbGV6aW9uZSIKCUlEU19PUEVOCQkiQXByaSIKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewoJSURTX0NSRUFURUZPTERFUl9ERU5JRUQgIkltcG9zc2liaWxlIGNyZWFyZSBsYSBjYXJ0ZWxsYTogQWNjZXNzbyBuZWdhdG8uIgoJSURTX0NSRUFURUZPTERFUl9DQVBUSU9OICJFcnJvcmUgZHVyYW50ZSBsYSBjcmVhemlvbmUgZGVsbGEgY2FydGVsbGEiCglJRFNfREVMRVRFSVRFTV9DQVBUSU9OICJDb25mZXJtYXJlIGxhIGNhbmNhbGxhemlvbmUgZGVsIGZpbGUiCglJRFNfREVMRVRFRk9MREVSX0NBUFRJT04gIkNvbmZlcm1hcmUgbGEgY2FuY2VsbGF6aW9uZSBkZWxsYSBjYXJ0ZWxsYSIKCUlEU19ERUxFVEVJVEVNX1RFWFQgIlNlaSBzaWN1cm8gZGkgdm9sZXIgY2FuY2VsbGFyZSAnJTEnPyIKCUlEU19ERUxFVEVNVUxUSVBMRV9URVhUICJTZWkgc2ljdXJvIGRpIHZvbGVyIGNhbmNlbGxhcmUgcXVlc3RpICUxIGVsZW1lbnRpPyIKCUlEU19PVkVSV1JJVEVGSUxFX1RFWFQgIlNvdnJhc2NyaXZlcmUgaWwgRmlsZSAlMT8iCglJRFNfT1ZFUldSSVRFRklMRV9DQVBUSU9OICJDb25mZXJtYXJlIGxhIHNvdnJhc2NyaXppb25lIGRlbCBGaWxlIgp9CgovKgljb2x1bW5zIGluIHRoZSBzaGVsbHZpZXcJKi8KU1RSSU5HVEFCTEUKQkVHSU4KCUlEU19TSFZfQ09MVU1OMQkJIkZpbGUiCglJRFNfU0hWX0NPTFVNTjIJCSJEaW1lbnNpb25lIgoJSURTX1NIVl9DT0xVTU4zCQkiVGlwbyIKCUlEU19TSFZfQ09MVU1ONAkJIk1vZGlmaWNhdG8iCglJRFNfU0hWX0NPTFVNTjUJCSJBdHRyaWJ1dGkiCglJRFNfU0hWX0NPTFVNTjYJCSJEaW1lbnNpb25lIgoJSURTX1NIVl9DT0xVTU43CQkiRGltZW5zaW9uZSBkaXNwb25pYmlsZSIKCUlEU19TSFZfQ09MVU1OOAkJIk5vbWUiCglJRFNfU0hWX0NPTFVNTjkJCSJDb21tZW50aSIKRU5ECgoKLyogbWVzc2FnZSBib3ggc3RyaW5ncyAqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICAgICBJRFNfUkVTVEFSVF9USVRMRSAgICAgICAiUmlhdnZpYSIKICAgICAgIElEU19SRVNUQVJUX1BST01QVCAgICAgICJWdW9pIHNpbXVsYXJlIHVuIHJpYXZ2aW8gZG8gV2luZG93cz8iCiAgICAgICBJRFNfU0hVVERPV05fVElUTEUgICAgICAiVGVybWluYSBzZXNzaW9uZSIKICAgICAgIElEU19TSFVURE9XTl9QUk9NUFQgICAgICJWdW9pIHRlcm1pbmFyZSBsYSBzZXNzaW9uZSBkaSBXaW5lPyIKfQo=