LyoKICogQ29weXJpZ2h0IDE5OTggSnVlcmdlbiBTY2htaWVkCiAqIENvcHlyaWdodCAyMDA0IEhlbm5pbmcgR2VyaGFyZHQKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19HRVJNQU4sIFNVQkxBTkdfREVGQVVMVAoKTUVOVV8wMDEgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJTUVOVUlURU0gIiZHcm/fZSBTeW1ib2xlIiwJRkNJRE1fU0hWSUVXX0JJR0lDT04KCU1FTlVJVEVNICImS2xlaW5lIFN5bWJvbGUiLAlGQ0lETV9TSFZJRVdfU01BTExJQ09OCglNRU5VSVRFTSAiJkxpc3RlIiwJCUZDSURNX1NIVklFV19MSVNUVklFVwoJTUVOVUlURU0gIiZEZXRhaWxzIiwJCUZDSURNX1NIVklFV19SRVBPUlRWSUVXCkVORAoKLyoKIHNoZWxsdmlldyBiYWNrZ3JvdW5kIG1lbnUKKi8KTUVOVV8wMDIgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJUE9QVVAgIiIKCUJFR0lOCgkgIFBPUFVQICImQW5zaWNodCIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiJkdyb99lIFN5bWJvbGUiLAlGQ0lETV9TSFZJRVdfQklHSUNPTgoJICAgIE1FTlVJVEVNICImS2xlaW5lIFN5bWJvbGUiLAlGQ0lETV9TSFZJRVdfU01BTExJQ09OCgkgICAgTUVOVUlURU0gIiZMaXN0ZSIsCQlGQ0lETV9TSFZJRVdfTElTVFZJRVcKCSAgICBNRU5VSVRFTSAiJkRldGFpbHMiLAlGQ0lETV9TSFZJRVdfUkVQT1JUVklFVwoJICBFTkQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICJTeW1ib2xlIGFub3JkbmVuIgoJICBCRUdJTgoJICAgIE1FTlVJVEVNICJOYWNoICZOYW1lIiwJMHgzMAkvKiBjb2x1bW4gMCAqLwoJICAgIE1FTlVJVEVNICJOYWNoICZUeXAiLAkweDMyCS8qIGNvbHVtbiAyICovCgkgICAgTUVOVUlURU0gIk5hY2ggJkdy9t9lIiwJMHgzMQkvKiAuLi4gKi8KCSAgICBNRU5VSVRFTSAiTmFjaCAmRGF0dW0iLAkweDMzCgkgICAgTUVOVUlURU0gU0VQQVJBVE9SCgkgICAgTUVOVUlURU0gIiZBdXRvbWF0aXNjaCBhbm9yZG5lbiIsCUZDSURNX1NIVklFV19BVVRPQVJSQU5HRQoJICBFTkQKCSAgTUVOVUlURU0gIkljb25zIGFub3JkbmVuIiwJRkNJRE1fU0hWSUVXX1NOQVBUT0dSSUQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJBa3R1YWxpc2llcmVuIiwJCUZDSURNX1NIVklFV19SRUZSRVNICgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiRWluZvxnZW4iLAkJRkNJRE1fU0hWSUVXX0lOU0VSVAoJICBNRU5VSVRFTSAiRWluZvxnZW4gYWxzIFZlcndlaXMiLAlGQ0lETV9TSFZJRVdfSU5TRVJUTElOSwoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgUE9QVVAgIk5ldSIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiTmV1ZXMgVmVyJnplaWNobmlzIiwJRkNJRE1fU0hWSUVXX05FV0ZPTERFUgoJICAgIE1FTlVJVEVNICJOZXVlciBWZXImd2VpcyIsCUZDSURNX1NIVklFV19ORVdMSU5LCgkgICAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIEVORAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIiZFaWdlbnNjaGFmdGVuIiwJRkNJRE1fU0hWSUVXX1BST1BFUlRJRVMKCUVORApFTkQKCi8qCiBzaGVsbHZpZXcgaXRlbSBtZW51CiovCk1FTlVfU0hWX0ZJTEUgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJUE9QVVAgIiIKCUJFR0lOCgkgIE1FTlVJVEVNICJFJnJrdW5kZW4iLAkJRkNJRE1fU0hWSUVXX0VYUExPUkUKCSAgTUVOVUlURU0gIibWZmZuZW4iLAkJRkNJRE1fU0hWSUVXX09QRU4KCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICImQXVzc2NobmVpZGVuIiwJCUZDSURNX1NIVklFV19DVVQKCSAgTUVOVUlURU0gIiZLb3BpZXJlbiIsCQlGQ0lETV9TSFZJRVdfQ09QWQoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIkVyc3RlbGxlIFZlciZ3ZWlzIiwJRkNJRE1fU0hWSUVXX0NSRUFURUxJTksKCSAgTUVOVUlURU0gIiZM9nNjaGVuIiwJCUZDSURNX1NIVklFV19ERUxFVEUKCSAgTUVOVUlURU0gIiZVbWJlbmVubmVuIiwJCUZDSURNX1NIVklFV19SRU5BTUUKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICImRWlnZW5zY2hhZnRlbiIsCUZDSURNX1NIVklFV19QUk9QRVJUSUVTCglFTkQKRU5ECgpTSEJSU0ZPUkZPTERFUl9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMTUsIDQwLCAxODgsIDE5MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBEU19NT0RBTEZSQU1FIHwgRFNfU0VURk9OVCB8IERTXzNETE9PSwpDQVBUSU9OICJWZXJ6ZWljaG5pcyBhdXN35GhsZW4iCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogREVGUFVTSEJVVFRPTiAiT0siLCAxLCA4MCwgMTc2LCA1MCwgMTIsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIkFiYnJlY2hlbiIsIDIsIDEzNCwgMTc2LCA1MCwgMTIsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAogTFRFWFQgIiIsIElERF9USVRMRSwgNCwgNCwgMTgwLCAxMgogTFRFWFQgIiIsIElERF9TVEFUVVMsIDQsIDI1LCAxODAsIDEyCiBDT05UUk9MICIiLCBJRERfVFJFRVZJRVcsICJTeXNUcmVlVmlldzMyIiwKIAlUVlNfSEFTQlVUVE9OUyB8IFRWU19IQVNMSU5FUyB8IFRWU19MSU5FU0FUUk9PVCB8CglXU19CT1JERVIgfCBXU19UQUJTVE9QLAoJNCwgNDAsIDE4MCwgMTIwCn0KClNIRUxMX0FCT1VUX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAxNSwgNDAsIDIxMCwgMTUyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJJbmZvcm1hdGlvbmVuIPxiZXIgJXMiCkZPTlQgMTAsICJNUyBTaGVsbCBEbGciCnsKIERFRlBVU0hCVVRUT04gIk9LIiwgSURPSywgMTUzLCAxMzMsIDUwLCAxMiwgV1NfVEFCU1RPUAogTElTVEJPWCA5OSwgOCwgNjUsIDEzNywgODIsIExCU19OT1RJRlkgfCBXU19WU0NST0xMIHwgV1NfQk9SREVSCiBJQ09OICIiLCAxMDg4LCAxMCwgMTAsIDE0LCAxNgogTFRFWFQgIiIsIDEwMCwgMzAsIDEwLCAxMzcsIDEwCiBMVEVYVCAiIiwgMTAxLCAzMCwgMjIsIDEzNywgMTAKIExURVhUICJXSU5FIHd1cmRlIGb8ciBTaWUgZ2VrZWx0ZXJ0IHZvbjoiLCA5OCwgOCwgNTUsIDEzNywgMTAKfQoKU0hFTExfUlVOX0RMRyBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAwLCAwLCAyMjcsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogSUNPTiAiIiwgMTIyOTcsIDcsIDExLCAxOCwgMjAsIFdTX1ZJU0lCTEUKIExURVhUICJHZWJlbiBzaWUgZGVuIE5hbWVuIGVpbmVzIFByb2dyYW1tZXMsIGVpbmVzIE9yZG5lcnMsIGVpbmVzIERva3VtZW50ZXMgb2RlciBlaW5lciBJbnRlcm5ldC1SZXNzb3VyY2UgZWluLCBkZWkgZ2X2ZmZuZXQgd2VyZGVuIHNvbGwiLCAxMjI4OSwgMzYsIDExLCAxODIsIDE4CiBMVEVYVCAi1iZmZm5lbjoiLCAxMjMwNSwgNywgMzksIDI0LCAxMAogQ09OVFJPTCAiIiwgMTIyOTgsICJDT01CT0JPWCIsIFdTX1RBQlNUT1AgfCBXU19HUk9VUCB8IFdTX1ZTQ1JPTEwgfCBXU19WSVNJQkxFIHwgQ0JTX0RJU0FCTEVOT1NDUk9MTCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19EUk9QRE9XTiwgMzYsIDM3LCAxODMsIDEwMAogREVGUFVTSEJVVFRPTiAiT0siLCBJRE9LLCA2MiwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAiQWJicmVjaGVuIiwgSURDQU5DRUwsIDExNiwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAiJkR1cmNoc3VjaGVuLi4uIiwgMTIyODgsIDE3MCwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICAgICAgLyogY29sdW1ucyBpbiB0aGUgc2hlbGx2aWV3ICovCglJRFNfU0hWX0NPTFVNTjEJCSJEYXRlaSIKCUlEU19TSFZfQ09MVU1OMgkJIkdy9t9lIgoJSURTX1NIVl9DT0xVTU4zCQkiVHlwIgoJSURTX1NIVl9DT0xVTU40CQkiR2XkbmRlcnQiCglJRFNfU0hWX0NPTFVNTjUJCSJBdHRyaWJ1dGUiCglJRFNfU0hWX0NPTFVNTjYJCSJHZXNhbXRncvbfZSIKCUlEU19TSFZfQ09MVU1ONwkJIkZyZWllciBTcGVpY2hlciIKCUlEU19TSFZfQ09MVU1OOAkJIk5hbWUiCglJRFNfU0hWX0NPTFVNTjkJCSJLb21tZW50YXIiCglJRFNfU0hWX0NPTFVNTjEwCSJCZXNpdHplciIKCUlEU19TSFZfQ09MVU1OMTEJIkdydXBwZSIKCUlEU19TSFZfQ09MVU1OX0RFTEZST00JIlVyc3BydW5nIgoJSURTX1NIVl9DT0xVTU5fREVMREFURQkiR2Vs9nNjaHQgYW0iCgogICAgICAgIC8qIHNwZWNpYWwgZm9sZGVycyAqLwoJSURTX0RFU0tUT1AJCSJEZXNrdG9wIgoJSURTX01ZQ09NUFVURVIJCSJBcmJlaXRzcGxhdHoiCglJRFNfUkVDWUNMRUJJTl9GT0xERVJfTkFNRSAgICAgICJN/GxsIgoKICAgICAgICAvKiBjb250ZXh0IG1lbnVzICovCglJRFNfVklFV19MQVJHRQkJIiZHcm/fZSBTeW1ib2xlIgoJSURTX1ZJRVdfU01BTEwJCSImS2xlaW5lIFN5bWJvbGUiCglJRFNfVklFV19MSVNUCQkiJkxpc3RlIgoJSURTX1ZJRVdfREVUQUlMUwkiJkRldGFpbHMiCglJRFNfU0VMRUNUCQkiQXVzd+RobGVuIgoJSURTX09QRU4JCSLWZmZuZW4iCgoJSURTX0NSRUFURUZPTERFUl9ERU5JRUQgIkVzIGtvbm50ZSBrZWluIG5ldWVzIFZlcnplaWNobmlzIGVyc3RlbGx0IHdlcmRlbjogWnVncmlmZiB2ZXJ3ZWlnZXJ0LiIKCUlEU19DUkVBVEVGT0xERVJfQ0FQVElPTiAiRXMgdHJhdCBlaW4gRmVobGVyIGJlaW0gRXJzdGVsbGVuIGVpbmVzIG5ldWVuIFZlcnplaWNobmlzc2VzIGF1ZiIKCUlEU19ERUxFVEVJVEVNX0NBUFRJT04gIkJlc3TkdGlndW5nOiBPYmpla3QgbPZzY2hlbiIKCUlEU19ERUxFVEVGT0xERVJfQ0FQVElPTiAiQmVzdOR0aWd1bmc6IFZlcnplaWNobmlzIGz2c2NoZW4iCglJRFNfREVMRVRFSVRFTV9URVhUICJTaW5kIFNpZSBzaWNoIHNpY2hlciwgZGFzcyBTaWUgJyUxJyBs9nNjaGVuIG32Y2h0ZW4/IgoJSURTX0RFTEVURU1VTFRJUExFX1RFWFQgIlNpbmQgU2llIHNpY2ggc2ljaGVyLCBkYXNzIFNpZSBkaWVzZSAlMSBPYmpla3RlIGz2c2NoZW4gbfZjaHRlbj8iCglJRFNfREVMRVRFU0VMRUNURURfVEVYVCAiU2luZCBTaWUgc2ljaCBzaWNoZXIsIGRhc3MgU2llIGRpZSBhdXNnZXfkaGx0ZW4gT2JqZWt0ZSBs9nNjaGVuIG32Y2h0ZW4/IgoJSURTX1RSQVNISVRFTV9URVhUICJTaW5kIFNpZSBzaWNoIHNpY2hlciwgZGFzcyBTaWUgJyUxJyBpbiBN/GxsIHZlcnNjaGllYmVuIG32Y2h0ZW4/IgoJSURTX1RSQVNIRk9MREVSX1RFWFQgIlNpbmQgU2llIHNpY2ggc2ljaGVyLCBkYXNzIFNpZSAnJTEnIHVuZCBzZWluZW4gSW5oYWx0IGluIGRlbiBN/GxsIHZlcnNjaGllYmVuIG32Y2h0ZW4/IgoJSURTX1RSQVNITVVMVElQTEVfVEVYVCAiU2luZCBTaWUgc2ljaCBzaWNoZXIsIGRhc3MgU2llIGRpZXNlICUxIERhdGVpZW4gaW4gZGVuIE38bGwgdmVyc2NoaWViZW4gbfZjaHRlbj8iCglJRFNfQ0FOVFRSQVNIX1RFWFQgIkRhcyBPYmpla3QgJyUxJyBrYW5uIG5pY2h0IGluIGRlbiBN/GxsIHZlcnNjaG9iZW4gd2VyZGVuLiBN9mNodGVuIFNpZSBlcyBzdGF0dGRlc3NlbiBs9nNjaGVuPyIKCUlEU19PVkVSV1JJVEVGSUxFX1RFWFQgIk32Y2h0ZW4gU2llLCBkYXNzIGRpZSBEYXRlaSAnJTEnIPxiZXJzY2hyaWViZW4gd2lyZCA/IgoJSURTX09WRVJXUklURUZJTEVfQ0FQVElPTiAiQmVzdOR0aWd1bmc6IERhdGVpIPxiZXJzY2hyZWliZW4iCgogICAgICAgIC8qIG1lc3NhZ2UgYm94IHN0cmluZ3MgKi8KICAgICAgICBJRFNfUkVTVEFSVF9USVRMRSAgICAgICAiTmV1c3RhcnRlbiIKICAgICAgICBJRFNfUkVTVEFSVF9QUk9NUFQgICAgICAiTfZjaHRlbiBTaWUsIGRhc3MgZWluIHNpbXVsaWVydGVyIFdpbmRvd3MgTmV1c3RhcnQgZHVyY2hnZWb8aHJ0IHdpcmQgPyIKICAgICAgICBJRFNfU0hVVERPV05fVElUTEUgICAgICAiQW5oYWx0ZW4iCiAgICAgICAgSURTX1NIVVRET1dOX1BST01QVCAgICAgIk32Y2h0ZW4gU2llIGRpZSBha3R1ZWxsZSBXaW5lIFNpdHp1bmcgYmVlbmRlbiA/IgoKICAgICAgICAvKiBzaGVsbCBmb2xkZXIgcGF0aCBkZWZhdWx0IHZhbHVlcyAqLwoJSURTX1BST0dSQU1TCQkiU3RhcnRtZW78XFxQcm9ncmFtbWUiCglJRFNfUEVSU09OQUwJCSJFaWdlbmUgRGF0ZWllbiIKCUlEU19GQVZPUklURVMJCSJGYXZvcml0ZW4iCglJRFNfU1RBUlRVUAkJIlN0YXJ0bWVu/FxcUHJvZ3JhbW1lXFxBdXRvc3RhcnQiCglJRFNfUkVDRU5UCQkiUmVjZW50IgoJSURTX1NFTkRUTwkJIlNlbmRUbyIKCUlEU19TVEFSVE1FTlUJCSJTdGFydG1lbvwiCglJRFNfTVlNVVNJQwkJIk1laW5lIE11c2lrIgoJSURTX01ZVklERU8JCSJNZWluZSBWaWRlb3MiCglJRFNfREVTS1RPUERJUkVDVE9SWQkiRGVza3RvcCIKCUlEU19ORVRIT09ECQkiTmV0endlcmt1bWdlYnVuZyIKCUlEU19URU1QTEFURVMJCSJWb3JsYWdlbiIKCUlEU19BUFBEQVRBCQkiQW53ZW5kdW5nc2RhdGVuIgoJSURTX1BSSU5USE9PRAkJIkRydWNrdW1nZWJ1bmciCglJRFNfTE9DQUxfQVBQREFUQQkiTG9rYWxlIEVpbnN0ZWxsdW5nZW5cXEFud2VuZHVuZ3NkYXRlbiIKCUlEU19JTlRFUk5FVF9DQUNIRQkiTG9rYWxlIEVpbnN0ZWxsdW5nZW5cXFRlbXBvcmFyeSBJbnRlcm5ldCBGaWxlcyIKCUlEU19DT09LSUVTCQkiQ29va2llcyIKCUlEU19ISVNUT1JZCQkiTG9rYWxlIEVpbnN0ZWxsdW5nZW5cXFZlcmxhdWYiCglJRFNfUFJPR1JBTV9GSUxFUwkiUHJvZ3JhbW1lIgoJSURTX01ZUElDVFVSRVMJCSJFaWdlbmUgQmlsZGVyIgoJSURTX1BST0dSQU1fRklMRVNfQ09NTU9OICJQcm9ncmFtbWVcXEdlbWVpbnNhbWUgRGF0ZWllbiIKCUlEU19DT01NT05fRE9DVU1FTlRTCSJEb2t1bWVudGUiCglJRFNfQURNSU5UT09MUwkJIlN0YXJ0bWVu/FxcUHJvZ3JhbW1lXFxWZXJ3YWx0dW5nIgoJSURTX0NPTU1PTl9NVVNJQwkiRG9rdW1lbnRlXFxFaWdlbmUgTXVzaWsiCglJRFNfQ09NTU9OX1BJQ1RVUkVTCSJEb2t1bWVudGVcXEVpZ2VuZSBCaWxkZXIiCglJRFNfQ09NTU9OX1ZJREVPCSJEb2t1bWVudGVcXEVpZ2VuZSBWaWRlb3MiCglJRFNfQ0RCVVJOX0FSRUEJCSJMb2thbGUgRWluc3RlbGx1bmdlblxcQW53ZW5kdW5nc2RhdGVuXFxNaWNyb3NvZnRcXENEIEJ1cm5pbmciCn0K