LyoKICogQ29weXJpZ2h0IDE5OTggSnVlcmdlbiBTY2htaWVkCiAqIENvcHlyaWdodCAyMDAzLDIwMDQgSm9z6SBNYW51ZWwgRmVycmVyIE9ydGl6CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfU1BBTklTSCwgU1VCTEFOR19ORVVUUkFMCgpNRU5VXzAwMSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglNRU5VSVRFTSAiSWNvbm9zICZncmFuZGVzIiwJRkNJRE1fU0hWSUVXX0JJR0lDT04KCU1FTlVJVEVNICJJY29ub3MgJnBlcXVl8W9zIiwJRkNJRE1fU0hWSUVXX1NNQUxMSUNPTgoJTUVOVUlURU0gIiZMaXN0YSIsCQlGQ0lETV9TSFZJRVdfTElTVFZJRVcKCU1FTlVJVEVNICImRGV0YWxsZXMiLAkJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKRU5ECgovKgogc2hlbGx2aWV3IGJhY2tncm91bmQgbWVudQoqLwpNRU5VXzAwMiBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglQT1BVUCAiIgoJQkVHSU4KCSAgUE9QVVAgIiZWZXIiCgkgIEJFR0lOCgkgICAgTUVOVUlURU0gIkljb25vcyAmZ3JhbmRlcyIsICAgICBGQ0lETV9TSFZJRVdfQklHSUNPTgoJICAgIE1FTlVJVEVNICJJY29ub3MgJnBlcXVl8W9zIiwgICAgRkNJRE1fU0hWSUVXX1NNQUxMSUNPTgoJICAgIE1FTlVJVEVNICImTGlzdGEiLCAgICAgICAgICAgICAgRkNJRE1fU0hWSUVXX0xJU1RWSUVXCgkgICAgTUVOVUlURU0gIiZEZXRhbGxlcyIsICAgICAgICAgICBGQ0lETV9TSFZJRVdfUkVQT1JUVklFVwoJICBFTkQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICJPcmRlbmFyICZpY29ub3MiCgkgIEJFR0lOCgkgICAgTUVOVUlURU0gIlBvciAmbm9tYnJlIiwJMHgzMAkvKiBjb2x1bW4gMCAqLwoJICAgIE1FTlVJVEVNICJQb3IgJnRpcG8iLAkweDMyCS8qIGNvbHVtbiAyICovCgkgICAgTUVOVUlURU0gIlBvciB0JmFtYfFvIiwJMHgzMQkvKiAuLi4gKi8KCSAgICBNRU5VSVRFTSAiUG9yICZmZWNoYSIsCTB4MzMKCSAgICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgICBNRU5VSVRFTSAiJk9yZGVuYXIgYXV0b23hdGljYW1lbnRlIiwJRkNJRE1fU0hWSUVXX0FVVE9BUlJBTkdFCgkgIEVORAoJICBNRU5VSVRFTSAiQWxpbmVhciBpY29ub3MiLAkJRkNJRE1fU0hWSUVXX1NOQVBUT0dSSUQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJBY3R1YWxpemFyIiwJCUZDSURNX1NIVklFV19SRUZSRVNICgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiUGVnYXIiLAkJCUZDSURNX1NIVklFV19JTlNFUlQKCSAgTUVOVUlURU0gIlBlZ2FyIGFjY2VzbyBkaXJlY3RvIiwJRkNJRE1fU0hWSUVXX0lOU0VSVExJTksKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICJOdWV2byIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiTnVldmEgJmNhcnBldGEiLAkJRkNJRE1fU0hWSUVXX05FV0ZPTERFUgoJICAgIE1FTlVJVEVNICJOdWV2byAmYWNjZXNvIGRpcmVjdG8iLAlGQ0lETV9TSFZJRVdfTkVXTElOSwoJICAgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBFTkQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJQcm9waWVkYWRlcyIsCUZDSURNX1NIVklFV19QUk9QRVJUSUVTCglFTkQKRU5ECgovKgogc2hlbGx2aWV3IGl0ZW0gbWVudQoqLwpNRU5VX1NIVl9GSUxFIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KCVBPUFVQICIiCglCRUdJTgoJICBNRU5VSVRFTSAiRSZ4cGxvcmFyIiwJCQlGQ0lETV9TSFZJRVdfRVhQTE9SRQoJICBNRU5VSVRFTSAiJkFicmlyIiwJCQlGQ0lETV9TSFZJRVdfT1BFTgoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIkMmb3J0YXIiLAkJCUZDSURNX1NIVklFV19DVVQKCSAgTUVOVUlURU0gIiZDb3BpYXIiLAkJCUZDSURNX1NIVklFV19DT1BZCgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiQyZyZWFyIGFjY2VzbyBkaXJlY3RvIiwJRkNJRE1fU0hWSUVXX0NSRUFURUxJTksKCSAgTUVOVUlURU0gIiZFbGltaW5hciIsCQkJRkNJRE1fU0hWSUVXX0RFTEVURQoJICBNRU5VSVRFTSAiUmUmbm9tYnJhciIsCQlGQ0lETV9TSFZJRVdfUkVOQU1FCgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiJlByb3BpZWRhZGVzIiwJCUZDSURNX1NIVklFV19QUk9QRVJUSUVTCglFTkQKRU5ECgpTSEJSU0ZPUkZPTERFUl9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMTUsIDQwLCAxODgsIDE5MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBEU19NT0RBTEZSQU1FIHwgRFNfU0VURk9OVCB8IERTXzNETE9PSwpDQVBUSU9OICJFeHBsb3JhciBjYXJwZXRhIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKIERFRlBVU0hCVVRUT04gIkFjZXB0YXIiLCAxLCA4MCwgMTc2LCA1MCwgMTIsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIkNhbmNlbGFyIiwgMiwgMTM0LCAxNzYsIDUwLCAxMiwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiBMVEVYVCAiIiwgSUREX1RJVExFLCA0LCA0LCAxODAsIDEyCiBMVEVYVCAiIiwgSUREX1NUQVRVUywgNCwgMjUsIDE4MCwgMTIKIENPTlRST0wgIiIsIElERF9UUkVFVklFVywgIlN5c1RyZWVWaWV3MzIiLAogCVRWU19IQVNCVVRUT05TIHwgVFZTX0hBU0xJTkVTIHwgVFZTX0xJTkVTQVRST09UIHwKCVdTX0JPUkRFUiB8IFdTX1RBQlNUT1AsCgk0LCA0MCwgMTgwLCAxMjAKfQoKU0hFTExfQUJPVVRfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDE1LCA0MCwgMjEwLCAxNTIKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkFjZXJjYSBkZSAlcyIKRk9OVCAxMCwgIk1TIFNoZWxsIERsZyIKewogREVGUFVTSEJVVFRPTiAiQWNlcHRhciIsIElET0ssIDE1MywgMTMzLCA1MCwgMTIsIFdTX1RBQlNUT1AKIExJU1RCT1ggOTksIDgsIDY1LCAxMzcsIDgyLCBMQlNfTk9USUZZIHwgV1NfVlNDUk9MTCB8IFdTX0JPUkRFUgogSUNPTiAiIiwgMTA4OCwgMTAsIDEwLCAxNCwgMTYKIExURVhUICIiLCAxMDAsIDMwLCAxMCwgMTM3LCAxMAogTFRFWFQgIiIsIDEwMSwgMzAsIDIyLCAxMzcsIDEwCiBMVEVYVCAiV2luZSBlc3ThIGRpc3BvbmlibGUgZ3JhY2lhcyBhOiIsIDk4LCA4LCA1NSwgMTM3LCAxMAp9CgpTSEVMTF9SVU5fRExHIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDAsIDAsIDIyNywgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiBJQ09OICIiLCAxMjI5NywgNywgMTEsIDE4LCAyMCwgV1NfVklTSUJMRQogTFRFWFQgIkludHJvZHV6Y2EgZWwgbm9tYnJlIGRlIHVuIHByb2dyYW1hLCBjYXJwZXRhLCBkb2N1bWVudG8gbyByZWN1cnNvIGRlIEludGVybmV0LCB5IFdpbmUgbG8gYWJyaXLhIHBhcmEgdXN0ZWQuIiwgMTIyODksIDM2LCAxMSwgMTgyLCAxOAogTFRFWFQgIiZBYnJpcjoiLCAxMjMwNSwgNywgMzksIDI0LCAxMAogQ09OVFJPTCAiIiwgMTIyOTgsICJDT01CT0JPWCIsIFdTX1RBQlNUT1AgfCBXU19HUk9VUCB8IFdTX1ZTQ1JPTEwgfCBXU19WSVNJQkxFIHwgQ0JTX0RJU0FCTEVOT1NDUk9MTCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19EUk9QRE9XTiwgMzYsIDM3LCAxODMsIDEwMAogREVGUFVTSEJVVFRPTiAiQWNlcHRhciIsIElET0ssIDYyLCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICJDYW5jZWxhciIsIElEQ0FOQ0VMLCAxMTYsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIiZFeGFtaW5hci4uLiIsIDEyMjg4LCAxNzAsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKfQoKLyoKCXNwZWNpYWwgZm9sZGVycwoqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CglJRFNfREVTS1RPUAkJIkVzY3JpdG9yaW8iCglJRFNfTVlDT01QVVRFUgkJIk1pIFBDIgp9CgovKgoJY29udGV4dCBtZW51cwoqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CglJRFNfVklFV19MQVJHRQkJIkljb25vcyAmZ3JhbmRlcyIKCUlEU19WSUVXX1NNQUxMCQkiSWNvbm9zICZwZXF1ZfFvcyIKCUlEU19WSUVXX0xJU1QJCSImTGlzdGEiCglJRFNfVklFV19ERVRBSUxTCSImRGV0YWxsZXMiCglJRFNfU0VMRUNUCQkiU2VsZWNjaW9uYXIiCglJRFNfT1BFTgkJIkFicmlyIgp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CglJRFNfQ1JFQVRFRk9MREVSX0RFTklFRCAiTm8gc2UgcHVlZGUgY3JlYXIgbnVldmEgY2FycGV0YTogUGVybWlzbyBkZW5lZ2Fkby4iCglJRFNfQ1JFQVRFRk9MREVSX0NBUFRJT04gIkVycm9yIGR1cmFudGUgbGEgY3JlYWNp824gZGUgdW5hIG51ZXZhIGNhcnBldGEiCglJRFNfREVMRVRFSVRFTV9DQVBUSU9OICJDb25maXJtYXIgZWxpbWluYWNp824gZGUgYXJjaGl2byIKCUlEU19ERUxFVEVGT0xERVJfQ0FQVElPTiAiQ29uZmlybWFyIGVsaW1pbmFjafNuIGRlIGNhcnBldGEiCglJRFNfREVMRVRFSVRFTV9URVhUICK/U2VndXJvIHF1ZSBkZXNlYSBlbGltaW5hciAnJTEnPyIKCUlEU19ERUxFVEVNVUxUSVBMRV9URVhUICK/U2VndXJvIHF1ZSBkZXNlYSBlbGltaW5hciBlc3RvcyAlMSBlbGVtZW50b3M/IgoJSURTX09WRVJXUklURUZJTEVfVEVYVCAiv1NvYnJlZXNjcmliaXIgZWwgYXJjaGl2byAnJTEnPyIKCUlEU19PVkVSV1JJVEVGSUxFX0NBUFRJT04gIkNvbmZpcm1hciBzb2JyZWVzY3JpdHVyYSBkZSBhcmNoaXZvIgp9CgovKgljb2x1bW5zIGluIHRoZSBzaGVsbHZpZXcJKi8KU1RSSU5HVEFCTEUKQkVHSU4KCUlEU19TSFZfQ09MVU1OMSAgICAgICAgICJBcmNoaXZvIgoJSURTX1NIVl9DT0xVTU4yICAgICAgICAgIlRhbWHxbyIKCUlEU19TSFZfQ09MVU1OMyAgICAgICAgICJUaXBvIgoJSURTX1NIVl9DT0xVTU40ICAgICAgICAgIk1vZGlmaWNhZG8iCglJRFNfU0hWX0NPTFVNTjUgICAgICAgICAiQXRyaWJ1dG9zIgoJSURTX1NIVl9DT0xVTU42ICAgICAgICAgIlRhbWHxbyIKCUlEU19TSFZfQ09MVU1ONyAgICAgICAgICJUYW1h8W8gZGlzcG9uaWJsZSIKCUlEU19TSFZfQ09MVU1OOCAgICAgICAgICJOb21icmUiCglJRFNfU0hWX0NPTFVNTjkgICAgICAgICAiQ29tZW50YXJpb3MiCkVORAoKLyogbWVzc2FnZSBib3ggc3RyaW5ncyAqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CglJRFNfUkVTVEFSVF9USVRMRQkiUmVpbmljaWFyIgoJSURTX1JFU1RBUlRfUFJPTVBUCSK/RGVzZWEgc2ltdWxhciB1biByZWluaWNpbyBkZSBXaW5kb3dzPyIKCUlEU19TSFVURE9XTl9USVRMRQkiQXBhZ2FyIgoJSURTX1NIVVRET1dOX1BST01QVAkiv0Rlc2VhIHRlcm1pbmFyIHN1IHNlc2nzbiBXaW5lPyIKfQoKLyogc2hlbGwgZm9sZGVyIHBhdGggZGVmYXVsdCB2YWx1ZXMgKi8KU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewoJSURTX1BST0dSQU1TICAgICAgICAgICAgICAgICJNZW76IEluaWNpb1xcUHJvZ3JhbWFzIgoJSURTX1BFUlNPTkFMICAgICAgICAgICAgICAgICJNaXMgZG9jdW1lbnRvcyIKCUlEU19GQVZPUklURVMgICAgICAgICAgICAgICAiRmF2b3JpdG9zIgoJSURTX1NUQVJUVVAgICAgICAgICAgICAgICAgICJNZW76IEluaWNpb1xcUHJvZ3JhbWFzXFxJbmljaW8iCglJRFNfUkVDRU5UICAgICAgICAgICAgICAgICAgIlJlY2VudCIKCUlEU19TRU5EVE8gICAgICAgICAgICAgICAgICAiU2VuZFRvIgoJSURTX1NUQVJUTUVOVSAgICAgICAgICAgICAgICJNZW76IEluaWNpbyIKCUlEU19NWU1VU0lDICAgICAgICAgICAgICAgICAiTWkgbfpzaWNhIgoJSURTX01ZVklERU8gICAgICAgICAgICAgICAgICJNaXMgdu1kZW9zIgoJSURTX0RFU0tUT1BESVJFQ1RPUlkgICAgICAgICJFc2NyaXRvcmlvIgoJSURTX05FVEhPT0QgICAgICAgICAgICAgICAgICJFbnRvcm5vIGRlIHJlZCIKCUlEU19URU1QTEFURVMgICAgICAgICAgICAgICAiVGVtcGxhdGVzIgoJSURTX0FQUERBVEEgICAgICAgICAgICAgICAgICJBcHBsaWNhdGlvbiBEYXRhIgoJSURTX1BSSU5USE9PRCAgICAgICAgICAgICAgICJQcmludEhvb2QiCglJRFNfTE9DQUxfQVBQREFUQSAgICAgICAgICAgIkNvbmZpZ3VyYWNp824gbG9jYWxcXERhdG9zIGRlIHByb2dyYW1hIgoJSURTX0lOVEVSTkVUX0NBQ0hFICAgICAgICAgICJDb25maWd1cmFjafNuIGxvY2FsXFxBcmNoaXZvcyB0ZW1wb3JhbGVzIGRlIEludGVybmV0IgoJSURTX0NPT0tJRVMgICAgICAgICAgICAgICAgICJDb29raWVzIgoJSURTX0hJU1RPUlkgICAgICAgICAgICAgICAgICJDb25maWd1cmFjafNuIGxvY2FsXFxIaXN0b3JpYWwiCglJRFNfUFJPR1JBTV9GSUxFUyAgICAgICAgICAgIkFyY2hpdm9zIGRlIHByb2dyYW1hIgoJSURTX01ZUElDVFVSRVMgICAgICAgICAgICAgICJNaXMgaW3hZ2VuZXMiCglJRFNfUFJPR1JBTV9GSUxFU19DT01NT04gICAgIkFyY2hpdm9zIGRlIHByb2dyYW1hXFxBcmNoaXZvcyBjb211bmVzIgoJSURTX0NPTU1PTl9ET0NVTUVOVFMgICAgICAgICJEb2N1bWVudG9zIgoJSURTX0FETUlOVE9PTFMgICAgICAgICAgICAgICJNZW76IEluaWNpb1xcUHJvZ3JhbWFzXFxBY2Nlc29yaW9zXFxIZXJyYW1pZW50YXMgZGVsIHNpc3RlbWEiCglJRFNfQ09NTU9OX01VU0lDICAgICAgICAgICAgIkRvY3VtZW50b3NcXE1pIG36c2ljYSIKCUlEU19DT01NT05fUElDVFVSRVMgICAgICAgICAiRG9jdW1lbnRvc1xcTWlzIGlt4WdlbmVzIgoJSURTX0NPTU1PTl9WSURFTyAgICAgICAgICAgICJEb2N1bWVudG9zXFxNaXMgdu1kZW9zIgoJSURTX0NEQlVSTl9BUkVBICAgICAgICAgICAgICJDb25maWd1cmFjafNuIGxvY2FsXFxEYXRvcyBkZSBwcm9ncmFtYVxcTWljcm9zb2Z0XFxDRCBCdXJuaW5nIgp9Cg==