LyoKICogUmVnZWRpdCByZXNvdXJjZXMKICoKICogQ29weXJpZ2h0IDIwMDIgUm9iZXJ0IERpY2tlbnNvbgogKiBDb3B5cmlnaHQgMjAwMyBWaW5jZW50IELpcm9uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfRlJFTkNILCBTVUJMQU5HX05FVVRSQUwKCi8qCiAqIE1lbnUKICovCgpJRENfUkVHRURJVCBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiJkZpY2hpZXIiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImUXVpdHRlciIsICAgICAgICAgICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9FWElUCiAgICBFTkQKICAgIFBPUFVQICImQWlkZSIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZBIHByb3Bvcy4uLiIsICAgICAgICAgICAgICAgICAgSURfSEVMUF9BQk9VVAogICAgRU5ECkVORAoKSURSX1JFR0VESVRfTUVOVSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiJlJlZ2lzdHJlcyIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZJbXBvcnRlciB1biBmaWNoaWVyIGRlIHJlZ2lzdHJlcy4uLiIsICAgIElEX1JFR0lTVFJZX0lNUE9SVFJFR0lTVFJZRklMRQogICAgICAgIE1FTlVJVEVNICImRXhwb3J0ZXIgdW4gZmljaGllciBkZSByZWdpc3RyZXMuLi4iLCAgICBJRF9SRUdJU1RSWV9FWFBPUlRSRUdJU1RSWUZJTEUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkNvbm5lY3RlciDgIGRlcyByZWdpc3RyZXMgdmlhIGxlIHLpc2VhdS4uLiIsIElEX1JFR0lTVFJZX0NPTk5FQ1RORVRXT1JLUkVHSVNUUlksIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICImROljb25uZWN0ZXIgZGUgcmVnaXN0cmVzIHLpc2VhdS4uLiIsIElEX1JFR0lTVFJZX0RJU0NPTk5FQ1RORVRXT1JLUkVHSVNUUlksIEdSQVlFRAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJJbSZwcmltZXJcdEN0cmwrUCIsICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9QUklOVCwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZRdWl0dGVyIiwgICAgICAgICAgICAgICAgICAgICAgIElEX1JFR0lTVFJZX0VYSVQKICAgIEVORAogICAgUE9QVVAgIiZFZGl0aW9uIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJk1vZGlmaWVyIiwgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX01PRElGWQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIFBPUFVQICImTm91dmVsbGUiCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgTUVOVUlURU0gIiZDbOkiLCAgICAgICAgICAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0tFWQogICAgICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICAgICAgTUVOVUlURU0gIlZhbGV1ciBjJmhh7m5lIiwgICAgICAgICAgICAgICBJRF9FRElUX05FV19TVFJJTkdWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAiVmFsZXVyICZiaW5haXJlIiwgICAgICAgICAgICAgICBJRF9FRElUX05FV19CSU5BUllWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAiVmFsZXVyICZtb3QgZG91YmxlIiwgICAgICAgICAgICAgICAgSURfRURJVF9ORVdfRFdPUkRWQUxVRQogICAgICAgIEVORAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImU3VwcHJpbWVyXHREZWwiLCAgICAgICAgICAgICAgICBJRF9FRElUX0RFTEVURQogICAgICAgIE1FTlVJVEVNICJSZW4mb21tZXJcdEYyIiwgICAgICAgICAgICAgICAgICBJRF9FRElUX1JFTkFNRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImQ29waWVyIGxlIG5vbSBkZSBsYSBjbOkiLCAgICAgICAgICAgICAgSURfRURJVF9DT1BZS0VZTkFNRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImUmVjaGVyY2hlclx0Q3RybCtGIiwgICAgICAgICAgICAgICBJRF9FRElUX0ZJTkQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICJTdWkmdmFudFx0RjMiLCAgICAgICAgICAgICAgSURfRURJVF9GSU5ETkVYVCwgR1JBWUVECiAgICBFTkQKICAgIFBPUFVQICImQWZmaWNoYWdlIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJkJhcnJlIGQn6XRhdCIsICAgICAgICAgICAgICAgICBJRF9WSUVXX1NUQVRVU0JBUgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImU+lwYXJhdGV1ciIsICAgICAgICAgICAgICAgICAgICAgIElEX1ZJRVdfU1BMSVQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlJhZnJh7mNoaXJcdEY1IiwgICAgICAgICAgICAgICAgSURfVklFV19SRUZSRVNICiAgICBFTkQKICAgIFBPUFVQICImRmF2b3JpcyIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZBam91dGVyIGF1eCBGYXZvcmlzIiwgICAgICAgICAgSURfRkFWT1VSSVRFU19BRERUT0ZBVk9VUklURVMKICAgICAgICAsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICImUmV0aXJlciBkZXMgRmF2b3JpcyIsICAgICAgICAgICBJRF9GQVZPVVJJVEVTX1JFTU9WRUZBVk9VUklURQogICAgICAgICwgR1JBWUVECiAgICBFTkQKICAgIFBPUFVQICImQWlkZSIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZTdWpldHMgZGUgbCdhaWRlIiwgICAgICAgICAgICAgICAgSURfSEVMUF9IRUxQVE9QSUNTCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZBIHByb3BvcyBkZSBsJ+lkaXRldXIgZGUgcmVnaXN0cmVzIiwgICAgICBJRF9IRUxQX0FCT1VUCiAgICBFTkQKRU5ECgoKLyoKICogRGlhbG9nCiAqLwoKSUREX0FCT1VUQk9YIERJQUxPRyBESVNDQVJEQUJMRSAgMjIsIDE3LCAyMzAsIDc1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICLAIHByb3BvcyIKRk9OVCA4LCAiU3lzdGVtIgpCRUdJTgogICAgSUNPTiAgICAgICAgICAgIElESV9SRUdFRElULElESV9SRUdFRElULDE0LDksMTYsMTYKICAgIExURVhUICAgICAgICAgICAiUmVnZWRpdCBSZWFjdE9TIFZlcnNpb24gMS4wIixJRENfU1RBVElDLDQ5LDEwLDExOSw4LAogICAgICAgICAgICAgICAgICAgIFNTX05PUFJFRklYCiAgICBMVEVYVCAgICAgICAgICAgIkNvcHlyaWdodCAoQykgMjAwMiBwYXIgbCfpcXVpcGUgZGUgUmVhY3RPUyIsSURDX1NUQVRJQyw0OSwyMCwxMTksOAogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsSURPSywxOTUsNiwzMCwxMSxXU19HUk9VUApFTkQKCi8qCiAqIFN0cmluZyBUYWJsZQogKi8KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRFNfTElTVF9DT0xVTU5fTkFNRSAgICAiTm9tIgogICAgSURTX0xJU1RfQ09MVU1OX1RZUEUgICAgIlR5cGUiCiAgICBJRFNfTElTVF9DT0xVTU5fREFUQSAgICAiVmFsZXVyIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRFNfQVBQX1RJVExFICAgICAgICAgICAiyWRpdGV1ciBkZSByZWdpc3RyZXMiCiAgICBJRENfUkVHRURJVCAgICAgICAgICAgICAiUkVHRURJVCIKICAgIElEQ19SRUdFRElUX0ZSQU1FICAgICAgICJSRUdFRElUX0ZSQU1FIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRF9SRUdJU1RSWV9NRU5VICAgICAgICAiQ29udGllbnQgZGVzIGNvbW1hbmRlcyBwb3VyIHRyYXZhaWxsZXIgc3VyIGxlcyByZWdpc3RyZXMgZGUgbWFuaehyZSBnbG9iYWxlIgogICAgSURfRURJVF9NRU5VICAgICAgICAgICAgIkNvbnRpZW50IGRlcyBjb21tYW5kZXMgcG91ciDpZGl0ZXIgZGVzIHZhbGV1cnMgb3UgZGVzIGNs6XMiCiAgICBJRF9WSUVXX01FTlUgICAgICAgICAgICAiQ29udGllbnQgZGVzIGNvbW1hbmRlcyBwb3VyIHBlcnNvbm5hbGlzZXIgbGEgZmVu6nRyZSBkZXMgcmVnaXN0cmVzIgogICAgSURfRkFWT1VSSVRFU19NRU5VICAgICAgIkNvbnRpZW50IGRlcyBjb21tYW5kZXMgcG91ciBhY2PpZGVyIGF1eCBjbOlzIGZy6XF1ZW1tZW50IHV0aWxpc+llcyIKICAgIElEX0hFTFBfTUVOVSAgICAgICAgICAgICJDb250aWVudCBkZXMgY29tbWFuZGVzIHBvdXIgYWZmaWNoZXIgZGUgbCdhaWRlIGV0IGRlIGwnaW5mb3JtYXRpb24g4CBwcm9wb3MgZGUgbCfpZGl0ZXVyIGRlIHJlZ2lzdHJlcyIKICAgIElEX0VESVRfTkVXX01FTlUgICAgICAgICJDb250aWVudCBkZXMgY29tbWFuZGVzIHBvdXIgY3LpZXIgZGUgbm91dmVsbGVzIGNs6XMgb3UgdmFsZXVycyIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURfRURJVF9NT0RJRlkgICAgICAgICAgIk1vZGlmaWUgbGVzIGRvbm7pZXMgZCd1bmUgdmFsZXVyIgogICAgSURfRURJVF9ORVdfS0VZICAgICAgICAgIkFqb3V0ZSB1bmUgbm91dmVsbGUgY2zpIgogICAgSURfRURJVF9ORVdfU1RSSU5HVkFMVUUgIkFqb3V0ZSB1bmUgbm91dmVsbGUgdmFsZXVyIGNoYe5uZSIKICAgIElEX0VESVRfTkVXX0JJTkFSWVZBTFVFICJBam91dGUgdW5lIG5vdXZlbGxlIHZhbGV1ciBiaW5haXJlIgogICAgSURfRURJVF9ORVdfRFdPUkRWQUxVRSAgIkFqb3V0ZSB1bmUgbm91dmVsbGUgdmFsZXVyIG1vdCBkb3VibGUiCiAgICBJRF9SRUdJU1RSWV9JTVBPUlRSRUdJU1RSWUZJTEUgIkltcG9ydGUgdW4gZmljaGllciB0ZXh0ZSBkYW5zIGxlcyByZWdpc3RyZXMiCiAgICBJRF9SRUdJU1RSWV9FWFBPUlRSRUdJU1RSWUZJTEUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeHBvcnRlIHRvdXQgb3UgdW5lIHBhcnRpZSBkZXMgcmVnaXN0cmVzIGRhbnMgdW4gZmljaGllciB0ZXh0ZSIKICAgIElEX1JFR0lTVFJZX0NPTk5FQ1RORVRXT1JLUkVHSVNUUlkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb25uZWN0ZSBhdXggcmVnaXN0cmVzIGQndW4gb3JkaW5hdGV1ciBkaXN0YW50IgogICAgSURfUkVHSVNUUllfRElTQ09OTkVDVE5FVFdPUktSRUdJU1RSWQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkTpY29ubmVjdGUgZGVzIHJlZ2lzdHJlcyBkJ3VuIG9yZGluYXRldXIgZGlzdGFudCIKICAgIElEX1JFR0lTVFJZX1BSSU5UICAgICAgICJJbXByaW1lIHRvdXQgb3UgdW5lIHBhcnRpZSBkZXMgcmVnaXN0cmVzIgovKiAgICBJRF9IRUxQX0hFTFBUT1BJQ1MgICAgICAiT3V2cmUgbCdhaWRlIGRlIGwn6WRpdGV1ciBkZSByZWdpc3RyZXMiICovCiAgICBJRF9IRUxQX0FCT1VUICAgICAgICAgICAiQWZmaWNoZSBkZSBsJ2luZm9ybWF0aW9uIHN1ciBsZSBwcm9ncmFtbWUsIGxlIG51belybyBkZSB2ZXJzaW9uIGV0IGxlIGNvcHlyaWdodCIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURfUkVHSVNUUllfRVhJVCAgICAgICAgIlF1aXR0ZSBsJ+lkaXRldXIgZGUgcmVnaXN0cmVzIgogICAgSURfRkFWT1VSSVRFU19BRERUT0ZBVk9VUklURVMgIkFqb3V0ZSBkZXMgY2zpcyDgIGxhIGxpc3RlIGRlcyBGYXZvcmlzIgogICAgSURfRkFWT1VSSVRFU19SRU1PVkVGQVZPVVJJVEUgIlJldGlyZSBkZXMgY2zpcyBkZSBsYSBsaXN0ZSBkZXMgRmF2b3JpcyIKICAgIElEX1ZJRVdfU1RBVFVTQkFSICAgICAgICJNb250cmUgb3UgY2FjaGUgbGEgYmFycmUgZCfpdGF0IgogICAgSURfVklFV19TUExJVCAgICAgICAgICAgIkNoYW5nZSBsYSBwb3NpdGlvbiBkZSBsYSBz6XBhcmF0aW9uIGVudHJlIGxlcyBkZXV4IHBhbm5lYXV4IgogICAgSURfVklFV19SRUZSRVNIICAgICAgICAgIlJhZnJh7mNoaXQgbGEgZmVu6nRyZSIKICAgIElEX0VESVRfREVMRVRFICAgICAgICAgICJTdXBwcmltZSBsYSBz6WxlY3Rpb24iCiAgICBJRF9FRElUX1JFTkFNRSAgICAgICAgICAiUmVub21tZSBsYSBz6WxlY3Rpb24iCiAgICBJRF9FRElUX0NPUFlLRVlOQU1FICAgICAiQ29waWUgbGUgbm9tIGRlIGxhIGNs6SBz6WxlY3Rpb25u6WUgdmVycyBsZSBwcmVzc2UtcGFwaWVyIgogICAgSURfRURJVF9GSU5EICAgICAgICAgICAgIlJlY2hlcmNoZSBkdSB0ZXh0ZSBkYW5zIHVuZSBjbOksIHVuZSB2YWxldXIgb3UgZGVzIGRvbm7pZXMiCiAgICBJRF9FRElUX0ZJTkRORVhUICAgICAgICAiUmVjaGVyY2hlIGwnb2NjdXJlbmNlIHN1aXZhbnRlIGR1IHRleHRlIGRlIGxhIGRlcm5p6HJlIHJlY2hlcmNoZSIKRU5ECgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKLyoKICogRGlhbG9nCiAqLwoKSUREX0RJQUxPRzEgRElBTE9HIERJU0NBUkRBQkxFICA1MCwgNTAsIDI2OCwgOTgKU1RZTEUgRFNfM0RMT09LIHwgRFNfQ09OVFJPTCB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0NMSVBTSUJMSU5HUyB8CiAgICBXU19CT1JERVIKRk9OVCA4LCAiTVMgU2FucyBTZXJpZiIKQkVHSU4KRU5ECgpJRERfRElBTE9HMiBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDE4NywgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiQm/udGUgZGUgZGlhbG9ndWUiCkZPTlQgOCwgIk1TIFNhbnMgU2VyaWYiCkJFR0lOCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDEzMCw3LDUwLDE0CiAgICBQVVNIQlVUVE9OICAgICAgIkFubnVsZXIiLElEQ0FOQ0VMLDEzMCwyNCw1MCwxNApFTkQKCgovKgogKiBURVhUSU5DTFVERQogKi8KCjEgVEVYVElOQ0xVREUgRElTQ0FSREFCTEUKQkVHSU4KICAgICJyZXNvdXJjZS5oXDAiCkVORAoKCgovKgogKiBTdHJpbmcgVGFibGUKICovCgovKgogKlNUUklOR1RBQkxFIERJU0NBUkRBQkxFCiAqQkVHSU4KICogICAgSURfSEVMUF9IRUxQVE9QSUNTICAgICAgIk91dnJlIGwnYWlkZSBkZSBsJ+lkaXRldXIgZGUgcmVnaXN0cmVzLiIKICogICAgSURfSEVMUF9BQk9VVCAgICAgICAgICAgIkFmZmljaGUgZGUgbCdpbmZvcm1hdGlvbiBzdXIgbGUgcHJvZ3JhbW1lLCBsZSBudW3pcm8gZGUgdmVyc2lvbiBldCBsZSBjb3B5cmlnaHQuIgogKkVORAogKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K