LyoKICogUmVnZWRpdCByZXNvdXJjZXMKICoKICogQ29weXJpZ2h0IDIwMDIgUm9iZXJ0IERpY2tlbnNvbgogKiBDb3B5cmlnaHQgMjAwMyBWaW5jZW50IELpcm9uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfRlJFTkNILCBTVUJMQU5HX05FVVRSQUwKCi8qCiAqIE1lbnUKICovCgpJRENfUkVHRURJVCBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiJkZpY2hpZXIiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImUXVpdHRlciIsICAgICAgICAgICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9FWElUCiAgICBFTkQKICAgIFBPUFVQICImQWlkZSIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZBIHByb3Bvcy4uLiIsICAgICAgICAgICAgICAgICAgSURfSEVMUF9BQk9VVAogICAgRU5ECkVORAoKSURSX1JFR0VESVRfTUVOVSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiJlJlZ2lzdHJlcyIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZJbXBvcnRlciB1biBmaWNoaWVyIGRlIHJlZ2lzdHJlcy4uLiIsICAgIElEX1JFR0lTVFJZX0lNUE9SVFJFR0lTVFJZRklMRQogICAgICAgIE1FTlVJVEVNICImRXhwb3J0ZXIgdW4gZmljaGllciBkZSByZWdpc3RyZXMuLi4iLCAgICBJRF9SRUdJU1RSWV9FWFBPUlRSRUdJU1RSWUZJTEUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkNvbm5lY3RlciDgIGRlcyByZWdpc3RyZXMgdmlhIGxlIHLpc2VhdS4uLiIsIElEX1JFR0lTVFJZX0NPTk5FQ1RORVRXT1JLUkVHSVNUUlksIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICImROljb25uZWN0ZXIgZGUgcmVnaXN0cmVzIHLpc2VhdS4uLiIsIElEX1JFR0lTVFJZX0RJU0NPTk5FQ1RORVRXT1JLUkVHSVNUUlksIEdSQVlFRAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJJbSZwcmltZXJcdEN0cmwrUCIsICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9QUklOVCwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZRdWl0dGVyIiwgICAgICAgICAgICAgICAgICAgICAgIElEX1JFR0lTVFJZX0VYSVQKICAgIEVORAogICAgUE9QVVAgIiZFZGl0aW9uIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJk1vZGlmaWVyIiwgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX01PRElGWQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIFBPUFVQICImTm91dmVsbGUiCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgTUVOVUlURU0gIiZDbOkiLCAgICAgICAgICAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0tFWQogICAgICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICAgICAgTUVOVUlURU0gIlZhbGV1ciBjJmhh7m5lIiwgICAgICAgICAgICAgICBJRF9FRElUX05FV19TVFJJTkdWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAiVmFsZXVyICZiaW5haXJlIiwgICAgICAgICAgICAgICBJRF9FRElUX05FV19CSU5BUllWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAiVmFsZXVyICZtb3QgZG91YmxlIiwgICAgICAgICAgICAgICAgSURfRURJVF9ORVdfRFdPUkRWQUxVRQogICAgICAgIEVORAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImU3VwcHJpbWVyXHREZWwiLCAgICAgICAgICAgICAgICBJRF9FRElUX0RFTEVURQogICAgICAgIE1FTlVJVEVNICJSZW4mb21tZXIiLCAgICAgICAgICAgICAgICAgICAgIElEX0VESVRfUkVOQU1FCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZDb3BpZXIgbGUgbm9tIGRlIGxhIGNs6SIsICAgICAgICAgICAgICBJRF9FRElUX0NPUFlLRVlOQU1FCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZSZWNoZXJjaGVyXHRDdHJsK0YiLCAgICAgICAgICAgICAgIElEX0VESVRfRklORCwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gIlN1aSZ2YW50XHRGMyIsICAgICAgICAgICAgICBJRF9FRElUX0ZJTkRORVhULCBHUkFZRUQKICAgIEVORAogICAgUE9QVVAgIiZBZmZpY2hhZ2UiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImQmFycmUgZCfpdGF0IiwgICAgICAgICAgICAgICAgIElEX1ZJRVdfU1RBVFVTQkFSCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZT6XBhcmF0ZXVyIiwgICAgICAgICAgICAgICAgICAgICAgSURfVklFV19TUExJVAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImUmFmcmHuY2hpclx0RjUiLCAgICAgICAgICAgICAgICBJRF9WSUVXX1JFRlJFU0gKICAgIEVORAogICAgUE9QVVAgIiZGYXZvcmlzIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJkFqb3V0ZXIgYXV4IEZhdm9yaXMiLCAgICAgICAgICBJRF9GQVZPVVJJVEVTX0FERFRPRkFWT1VSSVRFUwogICAgICAgICwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gIiZSZXRpcmVyIGRlcyBGYXZvcmlzIiwgICAgICAgICAgIElEX0ZBVk9VUklURVNfUkVNT1ZFRkFWT1VSSVRFCiAgICAgICAgLCBHUkFZRUQKICAgIEVORAogICAgUE9QVVAgIiZBaWRlIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJlN1amV0cyBkZSBsJ2FpZGUiLCAgICAgICAgICAgICAgICBJRF9IRUxQX0hFTFBUT1BJQ1MKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkEgcHJvcG9zIGRlIGwn6WRpdGV1ciBkZSByZWdpc3RyZXMiLCAgICAgIElEX0hFTFBfQUJPVVQKICAgIEVORApFTkQKCgovKgogKiBEaWFsb2cKICovCgpJRERfQUJPVVRCT1ggRElBTE9HIERJU0NBUkRBQkxFICAyMiwgMTcsIDIzMCwgNzUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIsAgcHJvcG9zIgpGT05UIDgsICJTeXN0ZW0iCkJFR0lOCiAgICBJQ09OICAgICAgICAgICAgSURJX1JFR0VESVQsSURJX1JFR0VESVQsMTQsOSwxNiwxNgogICAgTFRFWFQgICAgICAgICAgICJSZWdlZGl0IFJlYWN0T1MgVmVyc2lvbiAxLjAiLElEQ19TVEFUSUMsNDksMTAsMTE5LDgsCiAgICAgICAgICAgICAgICAgICAgU1NfTk9QUkVGSVgKICAgIExURVhUICAgICAgICAgICAiQ29weXJpZ2h0IChDKSAyMDAyIHBhciBsJ+lxdWlwZSBkZSBSZWFjdE9TIixJRENfU1RBVElDLDQ5LDIwLDExOSw4CiAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDE5NSw2LDMwLDExLFdTX0dST1VQCkVORAoKLyoKICogU3RyaW5nIFRhYmxlCiAqLwoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEU19MSVNUX0NPTFVNTl9OQU1FICAgICJOb20iCiAgICBJRFNfTElTVF9DT0xVTU5fVFlQRSAgICAiVHlwZSIKICAgIElEU19MSVNUX0NPTFVNTl9EQVRBICAgICJWYWxldXIiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEU19BUFBfVElUTEUgICAgICAgICAgICLJZGl0ZXVyIGRlIHJlZ2lzdHJlcyIKICAgIElEQ19SRUdFRElUICAgICAgICAgICAgICJSRUdFRElUIgogICAgSURDX1JFR0VESVRfRlJBTUUgICAgICAgIlJFR0VESVRfRlJBTUUiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX1JFR0lTVFJZX01FTlUgICAgICAgICJDb250aWVudCBkZXMgY29tbWFuZGVzIHBvdXIgdHJhdmFpbGxlciBzdXIgbGVzIHJlZ2lzdHJlcyBkZSBtYW5p6HJlIGdsb2JhbGUiCiAgICBJRF9FRElUX01FTlUgICAgICAgICAgICAiQ29udGllbnQgZGVzIGNvbW1hbmRlcyBwb3VyIOlkaXRlciBkZXMgdmFsZXVycyBvdSBkZXMgY2zpcyIKICAgIElEX1ZJRVdfTUVOVSAgICAgICAgICAgICJDb250aWVudCBkZXMgY29tbWFuZGVzIHBvdXIgcGVyc29ubmFsaXNlciBsYSBmZW7qdHJlIGRlcyByZWdpc3RyZXMiCiAgICBJRF9GQVZPVVJJVEVTX01FTlUgICAgICAiQ29udGllbnQgZGVzIGNvbW1hbmRlcyBwb3VyIGFjY+lkZXIgYXV4IGNs6XMgZnLpcXVlbW1lbnQgdXRpbGlz6WVzIgogICAgSURfSEVMUF9NRU5VICAgICAgICAgICAgIkNvbnRpZW50IGRlcyBjb21tYW5kZXMgcG91ciBhZmZpY2hlciBkZSBsJ2FpZGUgZXQgZGUgbCdpbmZvcm1hdGlvbiDgIHByb3BvcyBkZSBsJ+lkaXRldXIgZGUgcmVnaXN0cmVzIgogICAgSURfRURJVF9ORVdfTUVOVSAgICAgICAgIkNvbnRpZW50IGRlcyBjb21tYW5kZXMgcG91ciBjcullciBkZSBub3V2ZWxsZXMgY2zpcyBvdSB2YWxldXJzIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRF9FRElUX01PRElGWSAgICAgICAgICAiTW9kaWZpZSBsZXMgZG9ubullcyBkJ3VuZSB2YWxldXIiCiAgICBJRF9FRElUX05FV19LRVkgICAgICAgICAiQWpvdXRlIHVuZSBub3V2ZWxsZSBjbOkiCiAgICBJRF9FRElUX05FV19TVFJJTkdWQUxVRSAiQWpvdXRlIHVuZSBub3V2ZWxsZSB2YWxldXIgY2hh7m5lIgogICAgSURfRURJVF9ORVdfQklOQVJZVkFMVUUgIkFqb3V0ZSB1bmUgbm91dmVsbGUgdmFsZXVyIGJpbmFpcmUiCiAgICBJRF9FRElUX05FV19EV09SRFZBTFVFICAiQWpvdXRlIHVuZSBub3V2ZWxsZSB2YWxldXIgbW90IGRvdWJsZSIKICAgIElEX1JFR0lTVFJZX0lNUE9SVFJFR0lTVFJZRklMRSAiSW1wb3J0ZSB1biBmaWNoaWVyIHRleHRlIGRhbnMgbGVzIHJlZ2lzdHJlcyIKICAgIElEX1JFR0lTVFJZX0VYUE9SVFJFR0lTVFJZRklMRQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4cG9ydGUgdG91dCBvdSB1bmUgcGFydGllIGRlcyByZWdpc3RyZXMgZGFucyB1biBmaWNoaWVyIHRleHRlIgogICAgSURfUkVHSVNUUllfQ09OTkVDVE5FVFdPUktSRUdJU1RSWQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbm5lY3RlIGF1eCByZWdpc3RyZXMgZCd1biBvcmRpbmF0ZXVyIGRpc3RhbnQiCiAgICBJRF9SRUdJU1RSWV9ESVNDT05ORUNUTkVUV09SS1JFR0lTVFJZCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiROljb25uZWN0ZSBkZXMgcmVnaXN0cmVzIGQndW4gb3JkaW5hdGV1ciBkaXN0YW50IgogICAgSURfUkVHSVNUUllfUFJJTlQgICAgICAgIkltcHJpbWUgdG91dCBvdSB1bmUgcGFydGllIGRlcyByZWdpc3RyZXMiCi8qICAgIElEX0hFTFBfSEVMUFRPUElDUyAgICAgICJPdXZyZSBsJ2FpZGUgZGUgbCfpZGl0ZXVyIGRlIHJlZ2lzdHJlcyIgKi8KICAgIElEX0hFTFBfQUJPVVQgICAgICAgICAgICJBZmZpY2hlIGRlIGwnaW5mb3JtYXRpb24gc3VyIGxlIHByb2dyYW1tZSwgbGUgbnVt6XJvIGRlIHZlcnNpb24gZXQgbGUgY29weXJpZ2h0IgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRF9SRUdJU1RSWV9FWElUICAgICAgICAiUXVpdHRlIGwn6WRpdGV1ciBkZSByZWdpc3RyZXMiCiAgICBJRF9GQVZPVVJJVEVTX0FERFRPRkFWT1VSSVRFUyAiQWpvdXRlIGRlcyBjbOlzIOAgbGEgbGlzdGUgZGVzIEZhdm9yaXMiCiAgICBJRF9GQVZPVVJJVEVTX1JFTU9WRUZBVk9VUklURSAiUmV0aXJlIGRlcyBjbOlzIGRlIGxhIGxpc3RlIGRlcyBGYXZvcmlzIgogICAgSURfVklFV19TVEFUVVNCQVIgICAgICAgIk1vbnRyZSBvdSBjYWNoZSBsYSBiYXJyZSBkJ+l0YXQiCiAgICBJRF9WSUVXX1NQTElUICAgICAgICAgICAiQ2hhbmdlIGxhIHBvc2l0aW9uIGRlIGxhIHPpcGFyYXRpb24gZW50cmUgbGVzIGRldXggcGFubmVhdXgiCiAgICBJRF9WSUVXX1JFRlJFU0ggICAgICAgICAiUmFmcmHuY2hpdCBsYSBmZW7qdHJlIgogICAgSURfRURJVF9ERUxFVEUgICAgICAgICAgIlN1cHByaW1lIGxhIHPpbGVjdGlvbiIKICAgIElEX0VESVRfUkVOQU1FICAgICAgICAgICJSZW5vbW1lIGxhIHPpbGVjdGlvbiIKICAgIElEX0VESVRfQ09QWUtFWU5BTUUgICAgICJDb3BpZSBsZSBub20gZGUgbGEgY2zpIHPpbGVjdGlvbm7pZSB2ZXJzIGxlIHByZXNzZS1wYXBpZXIiCiAgICBJRF9FRElUX0ZJTkQgICAgICAgICAgICAiUmVjaGVyY2hlIGR1IHRleHRlIGRhbnMgdW5lIGNs6SwgdW5lIHZhbGV1ciBvdSBkZXMgZG9ubullcyIKICAgIElEX0VESVRfRklORE5FWFQgICAgICAgICJSZWNoZXJjaGUgbCdvY2N1cmVuY2Ugc3VpdmFudGUgZHUgdGV4dGUgZGUgbGEgZGVybmnocmUgcmVjaGVyY2hlIgpFTkQKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgovKgogKiBEaWFsb2cKICovCgpJRERfRElBTE9HMSBESUFMT0cgRElTQ0FSREFCTEUgIDUwLCA1MCwgMjY4LCA5OApTVFlMRSBEU18zRExPT0sgfCBEU19DT05UUk9MIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfQ0xJUFNJQkxJTkdTIHwKICAgIFdTX0JPUkRFUgpGT05UIDgsICJNUyBTYW5zIFNlcmlmIgpCRUdJTgpFTkQKCklERF9ESUFMT0cyIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMTg3LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJCb+50ZSBkZSBkaWFsb2d1ZSIKRk9OVCA4LCAiTVMgU2FucyBTZXJpZiIKQkVHSU4KICAgIERFRlBVU0hCVVRUT04gICAiT0siLElET0ssMTMwLDcsNTAsMTQKICAgIFBVU0hCVVRUT04gICAgICAiQW5udWxlciIsSURDQU5DRUwsMTMwLDI0LDUwLDE0CkVORAoKCi8qCiAqIFRFWFRJTkNMVURFCiAqLwoKMSBURVhUSU5DTFVERSBESVNDQVJEQUJMRQpCRUdJTgogICAgInJlc291cmNlLmhcMCIKRU5ECgoKCi8qCiAqIFN0cmluZyBUYWJsZQogKi8KCi8qCiAqU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKICpCRUdJTgogKiAgICBJRF9IRUxQX0hFTFBUT1BJQ1MgICAgICAiT3V2cmUgbCdhaWRlIGRlIGwn6WRpdGV1ciBkZSByZWdpc3RyZXMuIgogKiAgICBJRF9IRUxQX0FCT1VUICAgICAgICAgICAiQWZmaWNoZSBkZSBsJ2luZm9ybWF0aW9uIHN1ciBsZSBwcm9ncmFtbWUsIGxlIG51belybyBkZSB2ZXJzaW9uIGV0IGxlIGNvcHlyaWdodC4iCiAqRU5ECiAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwo=