LyoKICogQ29weXJpZ2h0IDE5OTggSnVlcmdlbiBTY2htaWVkCiAqIENvcHlyaWdodCAyMDA0IEhlbm5pbmcgR2VyaGFyZHQKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19HRVJNQU4sIFNVQkxBTkdfREVGQVVMVAoKTUVOVV8wMDEgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJTUVOVUlURU0gIiZHcm/fZSBTeW1ib2xlIiwJRkNJRE1fU0hWSUVXX0JJR0lDT04KCU1FTlVJVEVNICImS2xlaW5lIFN5bWJvbGUiLAlGQ0lETV9TSFZJRVdfU01BTExJQ09OCglNRU5VSVRFTSAiJkxpc3RlIiwJCUZDSURNX1NIVklFV19MSVNUVklFVwoJTUVOVUlURU0gIiZEZXRhaWxzIiwJCUZDSURNX1NIVklFV19SRVBPUlRWSUVXCkVORAoKLyoKIHNoZWxsdmlldyBiYWNrZ3JvdW5kIG1lbnUKKi8KTUVOVV8wMDIgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJUE9QVVAgIiIKCUJFR0lOCgkgIFBPUFVQICImQW5zaWNodCIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiJkdyb99lIFN5bWJvbGUiLAlGQ0lETV9TSFZJRVdfQklHSUNPTgoJICAgIE1FTlVJVEVNICImS2xlaW5lIFN5bWJvbGUiLAlGQ0lETV9TSFZJRVdfU01BTExJQ09OCgkgICAgTUVOVUlURU0gIiZMaXN0ZSIsCQlGQ0lETV9TSFZJRVdfTElTVFZJRVcKCSAgICBNRU5VSVRFTSAiJkRldGFpbHMiLAlGQ0lETV9TSFZJRVdfUkVQT1JUVklFVwoJICBFTkQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICJTeW1ib2xlIGFub3JkbmVuIgoJICBCRUdJTgoJICAgIE1FTlVJVEVNICJOYWNoICZOYW1lIiwJMHgzMAkvKiBjb2x1bW4gMCAqLwoJICAgIE1FTlVJVEVNICJOYWNoICZUeXAiLAkweDMyCS8qIGNvbHVtbiAyICovCgkgICAgTUVOVUlURU0gIk5hY2ggJkdy9t9lIiwJMHgzMQkvKiAuLi4gKi8KCSAgICBNRU5VSVRFTSAiTmFjaCAmRGF0dW0iLAkweDMzCgkgICAgTUVOVUlURU0gU0VQQVJBVE9SCgkgICAgTUVOVUlURU0gIiZBdXRvbWF0aXNjaCBhbm9yZG5lbiIsCUZDSURNX1NIVklFV19BVVRPQVJSQU5HRQoJICBFTkQKCSAgTUVOVUlURU0gIkljb25zIGFub3JkbmVuIiwJRkNJRE1fU0hWSUVXX1NOQVBUT0dSSUQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJBa3R1YWxpc2llcmVuIiwJCUZDSURNX1NIVklFV19SRUZSRVNICgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiRWluZvxnZW4iLAkJRkNJRE1fU0hWSUVXX0lOU0VSVAoJICBNRU5VSVRFTSAiRWluZvxnZW4gYWxzIFZlcndlaXMiLAlGQ0lETV9TSFZJRVdfSU5TRVJUTElOSwoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgUE9QVVAgIk5ldSIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiTmV1ZXMgVmVyJnplaWNobmlzIiwJRkNJRE1fU0hWSUVXX05FV0ZPTERFUgoJICAgIE1FTlVJVEVNICJOZXVlciBWZXImd2VpcyIsCUZDSURNX1NIVklFV19ORVdMSU5LCgkgICAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIEVORAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIiZFaWdlbnNjaGFmdGVuIiwJRkNJRE1fU0hWSUVXX1BST1BFUlRJRVMKCUVORApFTkQKCi8qCiBzaGVsbHZpZXcgaXRlbSBtZW51CiovCk1FTlVfU0hWX0ZJTEUgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJUE9QVVAgIiIKCUJFR0lOCgkgIE1FTlVJVEVNICJFJnJrdW5kZW4iLAkJRkNJRE1fU0hWSUVXX0VYUExPUkUKCSAgTUVOVUlURU0gIibWZmZuZW4iLAkJRkNJRE1fU0hWSUVXX09QRU4KCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICImQXVzc2NobmVpZGVuIiwJCUZDSURNX1NIVklFV19DVVQKCSAgTUVOVUlURU0gIiZLb3BpZXJlbiIsCQlGQ0lETV9TSFZJRVdfQ09QWQoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIkVyc3RlbGxlIFZlciZ3ZWlzIiwJRkNJRE1fU0hWSUVXX0NSRUFURUxJTksKCSAgTUVOVUlURU0gIiZM9nNjaGVuIiwJCUZDSURNX1NIVklFV19ERUxFVEUKCSAgTUVOVUlURU0gIiZVbWJlbmVubmVuIiwJCUZDSURNX1NIVklFV19SRU5BTUUKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICImRWlnZW5zY2hhZnRlbiIsCUZDSURNX1NIVklFV19QUk9QRVJUSUVTCglFTkQKRU5ECgpTSEJSU0ZPUkZPTERFUl9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMTUsIDQwLCAxODgsIDE5MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBEU19NT0RBTEZSQU1FIHwgRFNfU0VURk9OVCB8IERTXzNETE9PSwpDQVBUSU9OICJOYWNoIFZlcnplaWNobmlzIGR1cmNoc3VjaGVuIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKIERFRlBVU0hCVVRUT04gIk9LIiwgMSwgODAsIDE3NiwgNTAsIDEyLCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICJBYmJyZWNoZW4iLCAyLCAxMzQsIDE3NiwgNTAsIDEyLCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIExURVhUICIiLCBJRERfVElUTEUsIDQsIDQsIDE4MCwgMTIKIExURVhUICIiLCBJRERfU1RBVFVTLCA0LCAyNSwgMTgwLCAxMgogQ09OVFJPTCAiIiwgSUREX1RSRUVWSUVXLCAiU3lzVHJlZVZpZXczMiIsCiAJVFZTX0hBU0JVVFRPTlMgfCBUVlNfSEFTTElORVMgfCBUVlNfTElORVNBVFJPT1QgfAoJV1NfQk9SREVSIHwgV1NfVEFCU1RPUCwKCTQsIDQwLCAxODAsIDEyMAp9CgpTSEVMTF9BQk9VVF9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMTUsIDQwLCAyMTAsIDE1MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiSW5mb3JtYXRpb25lbiD8YmVyICVzIgpGT05UIDEwLCAiTVMgU2hlbGwgRGxnIgp7CiBERUZQVVNIQlVUVE9OICJPSyIsIElET0ssIDE1MywgMTMzLCA1MCwgMTIsIFdTX1RBQlNUT1AKIExJU1RCT1ggOTksIDgsIDY1LCAxMzcsIDgyLCBMQlNfTk9USUZZIHwgV1NfVlNDUk9MTCB8IFdTX0JPUkRFUgogSUNPTiAiIiwgMTA4OCwgMTAsIDEwLCAxNCwgMTYKIExURVhUICIiLCAxMDAsIDMwLCAxMCwgMTM3LCAxMAogTFRFWFQgIiIsIDEwMSwgMzAsIDIyLCAxMzcsIDEwCiBMVEVYVCAiV0lORSB3dXJkZSBm/HIgU2llIGdla2VsdGVydCB2b246IiwgOTgsIDgsIDU1LCAxMzcsIDEwCn0KClNIRUxMX1JVTl9ETEcgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMCwgMCwgMjI3LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKIElDT04gIiIsIDEyMjk3LCA3LCAxMSwgMTgsIDIwLCBXU19WSVNJQkxFCiBMVEVYVCAiRGVuIE5hbWVuIGVpbmVzIFByb2dyYW1tZXMsIGVpbmVzIE9yZG5lcnMsIGVpbmVzIERva3VtZW50ZXMgb2RlciBlaW5lciBJbnRlcm5ldCBSZXNzb3VyY2UgZWluZ2ViZW4sIHVuZCBXaW5lIHdpcmQgZXMgZvxyIFNpZSD2ZmZuZW4iLCAxMjI4OSwgMzYsIDExLCAxODIsIDE4CiBMVEVYVCAiJtZmZm5lbjoiLCAxMjMwNSwgNywgMzksIDI0LCAxMAogQ09OVFJPTCAiIiwgMTIyOTgsICJDT01CT0JPWCIsIFdTX1RBQlNUT1AgfCBXU19HUk9VUCB8IFdTX1ZTQ1JPTEwgfCBXU19WSVNJQkxFIHwgQ0JTX0RJU0FCTEVOT1NDUk9MTCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19EUk9QRE9XTiwgMzYsIDM3LCAxODMsIDEwMAogREVGUFVTSEJVVFRPTiAiT0siLCBJRE9LLCA2MiwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAiQWJicmVjaGVuIiwgSURDQU5DRUwsIDExNiwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAiJkR1cmNoc3VjaGVuLi4uIiwgMTIyODgsIDE3MCwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICAgICAgLyogY29sdW1ucyBpbiB0aGUgc2hlbGx2aWV3ICovCglJRFNfU0hWX0NPTFVNTjEJCSJEYXRlaSIKCUlEU19TSFZfQ09MVU1OMgkJIkdy9t9lIgoJSURTX1NIVl9DT0xVTU4zCQkiVHlwIgoJSURTX1NIVl9DT0xVTU40CQkiR2XkbmRlcnQiCglJRFNfU0hWX0NPTFVNTjUJCSJBdHRyaWJ1dGUiCglJRFNfU0hWX0NPTFVNTjYJCSJHZXNhbXRncvbfZSIKCUlEU19TSFZfQ09MVU1ONwkJIkZyZWllciBTcGVpY2hlciIKCUlEU19TSFZfQ09MVU1OOAkJIk5hbWUiCglJRFNfU0hWX0NPTFVNTjkJCSJLb21tZW50YXIiCglJRFNfU0hWX0NPTFVNTjEwCSJCZXNpdHplciIKCUlEU19TSFZfQ09MVU1OMTEJIkdydXBwZSIKCiAgICAgICAgLyogc3BlY2lhbCBmb2xkZXJzICovCglJRFNfREVTS1RPUAkJIkRlc2t0b3AiCglJRFNfTVlDT01QVVRFUgkJIkFyYmVpdHNwbGF0eiIKCiAgICAgICAgLyogY29udGV4dCBtZW51cyAqLwoJSURTX1ZJRVdfTEFSR0UJCSImR3Jv32UgU3ltYm9sZSIKCUlEU19WSUVXX1NNQUxMCQkiJktsZWluZSBTeW1ib2xlIgoJSURTX1ZJRVdfTElTVAkJIiZMaXN0ZSIKCUlEU19WSUVXX0RFVEFJTFMJIiZEZXRhaWxzIgoJSURTX1NFTEVDVAkJIkF1c3fkaGxlbiIKCUlEU19PUEVOCQki1mZmbmVuIgoKCUlEU19DUkVBVEVGT0xERVJfREVOSUVEICJFcyBrb25udGUga2VpbiBuZXVlcyBWZXJ6ZWljaG5pcyBlcnN0ZWxsdCB3ZXJkZW46IFp1Z3JpZmYgdmVyd2VpZ2VydC4iCglJRFNfQ1JFQVRFRk9MREVSX0NBUFRJT04gIkVzIHRyYXQgZWluIEZlaGxlciBiZWltIEVyc3RlbGxlbiBlaW5lcyBuZXVlbiBWZXJ6ZWljaG5pc3NlcyBhdWYiCglJRFNfREVMRVRFSVRFTV9DQVBUSU9OICJCZXN05HRpZ3VuZzogRGF0ZWkgbPZzY2hlbiIKCUlEU19ERUxFVEVGT0xERVJfQ0FQVElPTiAiQmVzdOR0aWd1bmc6IFZlcnplaWNobmlzIGz2c2NoZW4iCglJRFNfREVMRVRFSVRFTV9URVhUICJTaW5kIFNpZSBzaWNoIHNpY2hlciwgZGFzcyBTaWUgZGllIERhdGVpICclMScgbPZzY2hlbiBt9mNodGVuID8iCglJRFNfREVMRVRFTVVMVElQTEVfVEVYVCAiU2luZCBTaWUgc2ljaCBzaWNoZXIsIGRhc3MgU2llIGRpZXNlICUxIERhdGVpZW4gbPZzY2hlbiBt9mNodGVuID8iCglJRFNfT1ZFUldSSVRFRklMRV9URVhUICJN9mNodGVuIFNpZSwgZGFzcyBkaWUgRGF0ZWkgJyUxJyD8YmVyc2NocmllYmVuIHdpcmQgPyIKCUlEU19PVkVSV1JJVEVGSUxFX0NBUFRJT04gIkJlc3TkdGlndW5nOiBEYXRlaSD8YmVyc2NocmVpYmVuIgoKICAgICAgICAvKiBtZXNzYWdlIGJveCBzdHJpbmdzICovCiAgICAgICAgSURTX1JFU1RBUlRfVElUTEUgICAgICAgIk5ldXN0YXJ0ZW4iCiAgICAgICAgSURTX1JFU1RBUlRfUFJPTVBUICAgICAgIk32Y2h0ZW4gU2llLCBkYXNzIGVpbiBzaW11bGllcnRlciBXaW5kb3dzIE5ldXN0YXJ0IGR1cmNoZ2Vm/GhydCB3aXJkID8iCiAgICAgICAgSURTX1NIVVRET1dOX1RJVExFICAgICAgIkFuaGFsdGVuIgogICAgICAgIElEU19TSFVURE9XTl9QUk9NUFQgICAgICJN9mNodGVuIFNpZSBkaWUgYWt0dWVsbGUgV2luZSBTaXR6dW5nIGJlZW5kZW4gPyIKCiAgICAgICAgLyogc2hlbGwgZm9sZGVyIHBhdGggZGVmYXVsdCB2YWx1ZXMgKi8KCUlEU19QUk9HUkFNUwkJIlN0YXJ0bWVu/FxcUHJvZ3JhbW1lIgoJSURTX1BFUlNPTkFMCQkiRWlnZW5lIERhdGVpZW4iCglJRFNfRkFWT1JJVEVTCQkiRmF2b3JpdGVuIgoJSURTX1NUQVJUVVAJCSJTdGFydG1lbvxcXFByb2dyYW1tZVxcQXV0b3N0YXJ0IgoJSURTX1JFQ0VOVAkJIlJlY2VudCIKCUlEU19TRU5EVE8JCSJTZW5kVG8iCglJRFNfU1RBUlRNRU5VCQkiU3RhcnRtZW78IgoJSURTX01ZTVVTSUMJCSJNZWluZSBNdXNpayIKCUlEU19NWVZJREVPCQkiTWVpbmUgVmlkZW9zIgoJSURTX0RFU0tUT1BESVJFQ1RPUlkJIkRlc2t0b3AiCglJRFNfTkVUSE9PRAkJIk5ldHp3ZXJrdW1nZWJ1bmciCglJRFNfVEVNUExBVEVTCQkiVm9ybGFnZW4iCglJRFNfQVBQREFUQQkJIkFud2VuZHVuZ3NkYXRlbiIKCUlEU19QUklOVEhPT0QJCSJEcnVja3VtZ2VidW5nIgoJSURTX0xPQ0FMX0FQUERBVEEJIkxva2FsZSBFaW5zdGVsbHVuZ2VuXFxBbndlbmR1bmdzZGF0ZW4iCglJRFNfSU5URVJORVRfQ0FDSEUJIkxva2FsZSBFaW5zdGVsbHVuZ2VuXFxUZW1wb3JhcnkgSW50ZXJuZXQgRmlsZXMiCglJRFNfQ09PS0lFUwkJIkNvb2tpZXMiCglJRFNfSElTVE9SWQkJIkxva2FsZSBFaW5zdGVsbHVuZ2VuXFxWZXJsYXVmIgoJSURTX1BST0dSQU1fRklMRVMJIlByb2dyYW1tZSIKCUlEU19NWVBJQ1RVUkVTCQkiRWlnZW5lIEJpbGRlciIKCUlEU19QUk9HUkFNX0ZJTEVTX0NPTU1PTiAiUHJvZ3JhbW1lXFxHZW1laW5zYW1lIERhdGVpZW4iCglJRFNfQ09NTU9OX0RPQ1VNRU5UUwkiRG9rdW1lbnRlIgoJSURTX0FETUlOVE9PTFMJCSJTdGFydG1lbvxcXFByb2dyYW1tZVxcVmVyd2FsdHVuZyIKCUlEU19DT01NT05fTVVTSUMJIkRva3VtZW50ZVxcRWlnZW5lIE11c2lrIgoJSURTX0NPTU1PTl9QSUNUVVJFUwkiRG9rdW1lbnRlXFxFaWdlbmUgQmlsZGVyIgoJSURTX0NPTU1PTl9WSURFTwkiRG9rdW1lbnRlXFxFaWdlbmUgVmlkZW9zIgoJSURTX0NEQlVSTl9BUkVBCQkiTG9rYWxlIEVpbnN0ZWxsdW5nZW5cXEFud2VuZHVuZ3NkYXRlblxcTWljcm9zb2Z0XFxDRCBCdXJuaW5nIgp9Cg==