LyoKICogUmVnZWRpdCByZXNvdXJjZXMKICoKICogQ29weXJpZ2h0IDIwMDMsMjAwNCBKb3PpIE1hbnVlbCBGZXJyZXIgT3J0aXoKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19TUEFOSVNILCBTVUJMQU5HX05FVVRSQUwKCi8qCiAqIE1lbnUKICovCgpJRENfUkVHRURJVCBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiJkFyY2hpdm8iCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImU2FsaXIiLCAgICAgICAgICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9FWElUCiAgICBFTkQKICAgIFBPUFVQICJBJnl1ZGEiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImQWNlcmNhIGRlLi4uIiwgICAgICAgICAgICAgICBJRF9IRUxQX0FCT1VUCiAgICBFTkQKRU5ECgpJRFJfUkVHRURJVF9NRU5VIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KICAgIFBPUFVQICImUmVnaXN0cm8iCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImSW1wb3J0YXIgYXJjaGl2byBkZSByZWdpc3Ryby4uLiIsIElEX1JFR0lTVFJZX0lNUE9SVFJFR0lTVFJZRklMRQogICAgICAgIE1FTlVJVEVNICImRXhwb3J0YXIgYXJjaGl2byBkZSByZWdpc3Ryby4uLiIsIElEX1JFR0lTVFJZX0VYUE9SVFJFR0lTVFJZRklMRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImQ29uZWN0YXIgcmVnaXN0cm8gZGUgcmVkLi4uIiwgSURfUkVHSVNUUllfQ09OTkVDVE5FVFdPUktSRUdJU1RSWSwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gIiZEZXNjb25lY3RhciByZWdpc3RybyBkZSByZWQuLi4iLCBJRF9SRUdJU1RSWV9ESVNDT05ORUNUTkVUV09SS1JFR0lTVFJZLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiSW0mcHJpbWlyXHRDdHJsK1AiLCAgICAgICAgICAgSURfUkVHSVNUUllfUFJJTlQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJTJmFsaXIiLCAgICAgICAgICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9FWElUCiAgICBFTkQKICAgIFBPUFVQICImRWRpdGFyIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJk1vZGlmaWNhciIsICAgICAgICAgICAgICAgICAgSURfRURJVF9NT0RJRlkKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBQT1BVUCAiJk51ZXZvIgogICAgICAgIEJFR0lOCiAgICAgICAgICAgIE1FTlVJVEVNICImQ2xhdmUiLCAgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX05FV19LRVkKICAgICAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgICAgIE1FTlVJVEVNICJWYWxvciBkZSBjJmFkZW5hIiwgICAgICAgICAgICBJRF9FRElUX05FV19TVFJJTkdWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAiVmFsb3IgJmJpbmFyaW8iLCAgICAgICAgICAgICAgSURfRURJVF9ORVdfQklOQVJZVkFMVUUKICAgICAgICAgICAgTUVOVUlURU0gIlZhbG9yICZEV09SRCIsICAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0RXT1JEVkFMVUUKICAgICAgICBFTkQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkVsaW1pbmFyXHREZWwiLCAgICAgICAgICAgICAgSURfRURJVF9ERUxFVEUKICAgICAgICBNRU5VSVRFTSAiJlJlbm9tYnJhclx0RjIiLCAgICAgICAgICAgICAgSURfRURJVF9SRU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkNvcGlhciB2YWxvciBkZSBsYSBjbGF2ZSIsICAgSURfRURJVF9DT1BZS0VZTkFNRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImQnVzY2FyXHRDdHJsK0YiLCAgICAgICAgICAgICBJRF9FRElUX0ZJTkQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICJCdXNjYXIgJnNpZ3VpZW50ZVx0RjMiLCAgICAgICBJRF9FRElUX0ZJTkRORVhULCBHUkFZRUQKICAgIEVORAogICAgUE9QVVAgIiZWZXIiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImQmFycmEgZGUgZXN0YWRvIiwgICAgICAgICAgICBJRF9WSUVXX1NUQVRVU0JBUgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImU2VwYXJhciIsICAgICAgICAgICAgICAgICAgICBJRF9WSUVXX1NQTElUCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZBY3R1YWxpemFyXHRGNSIsICAgICAgICAgICAgIElEX1ZJRVdfUkVGUkVTSAogICAgRU5ECiAgICBQT1BVUCAiJkZhdm9yaXRvcyIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZB8WFkaXIgYSBGYXZvcml0b3MiLCAgICAgICAgIElEX0ZBVk9SSVRFU19BRERUT0ZBVk9SSVRFUwogICAgICAgIE1FTlVJVEVNICImRWxpbWluYXIgRmF2b3JpdG8iLCAgICAgICAgICBJRF9GQVZPUklURVNfUkVNT1ZFRkFWT1JJVEUKICAgIEVORAogICAgUE9QVVAgIkEmeXVkYSIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZUZW1hcyBkZSBheXVkYVx0RjEiLCAgICAgICAgIElEX0hFTFBfSEVMUFRPUElDUwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImQWNlcmNhIGRlbCBFZGl0b3IgZGUgcmVnaXN0cm8iLCBJRF9IRUxQX0FCT1VUCiAgICBFTkQKRU5ECgpJRFJfUE9QVVBfTUVOVVMgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgogIFBPUFVQICIiCiAgQkVHSU4KCU1FTlVJVEVNICImTW9kaWZpY2FyIiAgICAgICAgICAgICAgICAgICBJRF9FRElUX01PRElGWQoJTUVOVUlURU0gIk1vZGlmaWNhciBkYXRvcyBiaW5hcmlvcyIsICAgIElEX0VESVRfTU9ESUZZX0JJTgoJTUVOVUlURU0gU0VQQVJBVE9SCglNRU5VSVRFTSAiJkVsaW1pbmFyXHREZWwiLCAgICAgICAgICAgICAgSURfRURJVF9ERUxFVEUKCU1FTlVJVEVNICImUmVub21icmFyIiwgICAgICAgICAgICAgICAgICBJRF9FRElUX1JFTkFNRQogIEVORAogIFBPUFVQICIiCiAgQkVHSU4KCVBPUFVQICImTnVldm8iCglCRUdJTgoJCU1FTlVJVEVNICImQ2xhdmUiLCAgICAgICAgICAgICAgSURfRURJVF9ORVdfS0VZCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIlZhbG9yIGRlICZjYWRlbmEiLCAgICBJRF9FRElUX05FV19TVFJJTkdWQUxVRQoJCU1FTlVJVEVNICJWYWxvciAmYmluYXJpbyIsICAgICAgSURfRURJVF9ORVdfQklOQVJZVkFMVUUKCQlNRU5VSVRFTSAiVmFsb3IgJkRXT1JEIiwgICAgICAgIElEX0VESVRfTkVXX0RXT1JEVkFMVUUKCUVORAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImRWxpbWluYXJcdERlbCIsICAgICAgICAgICAgICBJRF9FRElUX0RFTEVURQogICAgICAgIE1FTlVJVEVNICImUmVub21icmFyXHRGMiIsICAgICAgICAgICAgICBJRF9FRElUX1JFTkFNRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImQ29waWFyIHZhbG9yIGRlIGxhIGNsYXZlIiwgICBJRF9FRElUX0NPUFlLRVlOQU1FCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZCdXNjYXJcdEN0cmwrRiIsICAgICAgICAgICAgIElEX0VESVRfRklORCwgR1JBWUVECiAgRU5ECkVORAoKLyoKICogRGlhbG9nCiAqLwoKSUREX0VESVRfU1RSSU5HIERJQUxPRyBESVNDQVJEQUJMRSAgMjIsIDE3LCAyMTAsIDc1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJFZGl0YXIgY2FkZW5hIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBMVEVYVCAgICAgICAgICAgIk5vbWJyZSBkZWwgdmFsb3I6IixJRENfU1RBVElDLDUsNSwxMTksOAogICAgRURJVFRFWFQgICAgICAgIElEQ19WQUxVRV9OQU1FLDUsMTUsMjAwLDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QIHwgV1NfRElTQUJMRUQKICAgIExURVhUICAgICAgICAgICAiRGF0b3MgZGVsIHZhbG9yOiIsSURDX1NUQVRJQyw1LDMwLDExOSw4CiAgICBFRElUVEVYVCAgICAgICAgSURDX1ZBTFVFX0RBVEEsNSw0MCwyMDAsMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AgfCBFU19BVVRPSFNDUk9MTAogICAgREVGUFVTSEJVVFRPTiAgICJBY2VwdGFyIixJRE9LLDE0MCw2MCwzMCwxMSxXU19HUk9VUAogICAgUFVTSEJVVFRPTiAgICJDYW5jZWxhciIsSURDQU5DRUwsMTc1LDYwLDMwLDExLFdTX0dST1VQCkVORAoKSUREX0VESVRfRFdPUkQgRElBTE9HIERJU0NBUkRBQkxFICAyMiwgMTcsIDIxMCwgMTAwClNUWUxFIERTX01PREFMRlJBTUUgfCBEU19OT0lETEVNU0cgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJFZGl0YXIgY2FkZW5hIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBMVEVYVCAgICAgICAgICAgIk5vbWJyZSBkZWwgdmFsb3I6IixJRENfU1RBVElDLDUsNSwxMTksOAogICAgRURJVFRFWFQgICAgICAgIElEQ19WQUxVRV9OQU1FLDUsMTUsMjAwLDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QIHwgV1NfRElTQUJMRUQKICAgIExURVhUICAgICAgICAgICAiRGF0b3MgZGVsIHZhbG9yOiIsSURDX1NUQVRJQyw1LDMwLDkwLDgKICAgIEVESVRURVhUICAgICAgICBJRENfVkFMVUVfREFUQSw1LDQwLDkwLDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCiAgICBHUk9VUEJPWCAgICAgICAgIkJhc2UiLCBJRENfRFdPUkRfQkFTRSwgMTIwLCAzMCwgODUsIDM3LCBCU19HUk9VUEJPWAogICAgQVVUT1JBRElPQlVUVE9OICJIZXhhZGVjaW1hbCIsIElEQ19EV09SRF9IRVgsIDEzMCwgNDAsIDYwLCAxMCwgV1NfVEFCU1RPUAogICAgQVVUT1JBRElPQlVUVE9OICJEZWNpbWFsIiwgSURDX0RXT1JEX0RFQywgMTMwLCA1MiwgNjAsIDEwLCBXU19UQUJTVE9QCiAgICBERUZQVVNIQlVUVE9OICAgIkFjZXB0YXIiLElET0ssMTQwLDgwLDMwLDExLFdTX0dST1VQCiAgICBQVVNIQlVUVE9OICAgIkNhbmNlbGFyIixJRENBTkNFTCwxNzUsODAsMzAsMTEsV1NfR1JPVVAKRU5ECgovKgogKiBTdHJpbmcgVGFibGUKICovCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURTX0xJU1RfQ09MVU1OX05BTUUgICAgIk5vbWJyZSIKICAgIElEU19MSVNUX0NPTFVNTl9UWVBFICAgICJUaXBvIgogICAgSURTX0xJU1RfQ09MVU1OX0RBVEEgICAgIkRhdG9zIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRFNfQVBQX1RJVExFICAgICAgICAgICAiRWRpdG9yIGRlbCByZWdpc3RybyIKICAgIElEQ19SRUdFRElUICAgICAgICAgICAgICJSRUdFRElUIgogICAgSURDX1JFR0VESVRfRlJBTUUgICAgICAgIlJFR0VESVRfRlJBTUUiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX1JFR0lTVFJZX01FTlUgICAgICAgICJDb250aWVuZSBjb21hbmRvcyBwYXJhIHRyYWJhamFyIGNvbiBlbCByZWdpc3RybyBjb21wbGV0byIKICAgIElEX0VESVRfTUVOVSAgICAgICAgICAgICJDb250aWVuZSBjb21hbmRvcyBwYXJhIGVkaXRhciB2YWxvcmVzIG8gY2xhdmVzIgogICAgSURfVklFV19NRU5VICAgICAgICAgICAgIkNvbnRpZW5lIGNvbWFuZG9zIHBhcmEgcGVyc29uYWxpemFyIGxhIHZlbnRhbmEgZGUgcmVnaXN0cm8iCiAgICBJRF9GQVZPUklURVNfTUVOVSAgICAgICAiQ29udGllbmUgY29tYW5kb3MgcGFyYSBhY2NlZGVyIGEgY2xhdmVzIHVzYWRhcyBmcmVjdWVudGVtZW50ZSIKICAgIElEX0hFTFBfTUVOVSAgICAgICAgICAgICJDb250aWVuZSBjb21hbmRvcyBwYXJhIG1vc3RyYXIgYXl1ZGEgZSBpbmZvcm1hY2nzbiBzb2JyZSBlbCBlZGl0b3IgZGUgcmVnaXN0cm8iCiAgICBJRF9FRElUX05FV19NRU5VICAgICAgICAiQ29udGllbmUgY29tYW5kb3MgcGFyYSBjcmVhciBudWV2YXMgY2xhdmVzIG8gdmFsb3JlcyIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURfRURJVF9NT0RJRlkgICAgICAgICAgIk1vZGlmaWNhIGxvcyBkYXRvcyBkZWwgdmFsb3IiCiAgICBJRF9FRElUX05FV19LRVkgICAgICAgICAiQfFhZGUgdW5hIG51ZXZhIGNsYXZlIgogICAgSURfRURJVF9ORVdfU1RSSU5HVkFMVUUgIkHxYWRlIHVuIG51ZXZvIHZhbG9yIGRlIGNhZGVuYSIKICAgIElEX0VESVRfTkVXX0JJTkFSWVZBTFVFICJB8WFkZSB1biBudWV2byB2YWxvciBiaW5hcmlvIgogICAgSURfRURJVF9ORVdfRFdPUkRWQUxVRSAgIkHxYWRlIHVuIG51ZXZvIHZhbG9yIGRlIGRvYmxlIHBhbGFicmEiCiAgICBJRF9SRUdJU1RSWV9JTVBPUlRSRUdJU1RSWUZJTEUgIkltcG9ydGEgdW4gYXJjaGl2byBkZSB0ZXh0byBhbCByZWdpc3RybyIKICAgIElEX1JFR0lTVFJZX0VYUE9SVFJFR0lTVFJZRklMRQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4cG9ydGEgdG9kbyBvIHBhcnRlIGRlbCByZWdpc3RybyBhIHVuIGFyY2hpdm8gZGUgdGV4dG8iCiAgICBJRF9SRUdJU1RSWV9DT05ORUNUTkVUV09SS1JFR0lTVFJZCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2UgY29uZWN0YSBhbCByZWdpc3RybyBkZSB1biBvcmRlbmFkb3IgcmVtb3RvIgogICAgSURfUkVHSVNUUllfRElTQ09OTkVDVE5FVFdPUktSRUdJU1RSWQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlIGRlc2NvbmVjdGEgZGVsIHJlZ2lzdHJvIGRlIHVuIG9yZGVuYWRvciByZW1vdG8iCiAgICBJRF9SRUdJU1RSWV9QUklOVCAgICAgICAiSW1wcmltZSB0b2RvIG8gcGFydGUgZGVsIHJlZ2lzdHJvIgovKiAgICBJRF9IRUxQX0hFTFBUT1BJQ1MgICAgICAiT3BlbnMgcmVnaXN0cnkgZWRpdG9yIGhlbHAiICovCiAgICBJRF9IRUxQX0FCT1VUICAgICAgICAgICAiTXVlc3RyYSBpbmZvcm1hY2nzbiBkZWwgcHJvZ3JhbWEsIG76bWVybyBkZSB2ZXJzafNuIHkgZGVyZWNob3MgZGUgYXV0b3IiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX1JFR0lTVFJZX0VYSVQgICAgICAgICJTYWxlIGRlbCBlZGl0b3IgZGUgcmVnaXN0cm8iCiAgICBJRF9GQVZPUklURVNfQUREVE9GQVZPUklURVMgIkHxYWRlIGNsYXZlcyBhIGxhIGxpc3RhIGRlIGZhdm9yaXRvcyIKICAgIElEX0ZBVk9SSVRFU19SRU1PVkVGQVZPUklURSAiRWxpbWluYSBjbGF2ZXMgZGUgbGEgbGlzdGEgZGUgZmF2b3JpdG9zIgogICAgSURfVklFV19TVEFUVVNCQVIgICAgICAgIk11ZXN0cmEgdSBvY3VsdGEgbGEgYmFycmEgZGUgZXN0YWRvIgogICAgSURfVklFV19TUExJVCAgICAgICAgICAgIkNhbWJpYSBsYSBwb3NpY2nzbiBkZWwgc2VwYXJhZG9yIGVudHJlIGRvcyBwYW5lbGVzIgogICAgSURfVklFV19SRUZSRVNIICAgICAgICAgIkFjdHVhbGl6YSBsYSB2ZW50YW5hIgogICAgSURfRURJVF9ERUxFVEUgICAgICAgICAgIkVsaW1pbmEgbGEgc2VsZWNjafNuIgogICAgSURfRURJVF9SRU5BTUUgICAgICAgICAgIlJlbm9tYnJhIGxhIHNlbGVjY2nzbiIKICAgIElEX0VESVRfQ09QWUtFWU5BTUUgICAgICJDb3BpYSBlbCBub21icmUgZGUgbGEgY2xhdmUgc2VsZWNjaW9uYWRhIGFsIHBvcnRhcGFwZWxlcyIKICAgIElEX0VESVRfRklORCAgICAgICAgICAgICJCdXNjYSB1bmEgY2FkZW5hIGRlIHRleHRvIGVuIHVuYSBjbGF2ZSwgdmFsb3IgbyBkYXRvcyIKICAgIElEX0VESVRfRklORE5FWFQgICAgICAgICJCdXNjYSBsYSBzaWd1aWVudGUgb2N1cnJlbmNpYSBkZWwgdGV4dG8gZXNwZWNpZmljYWRvIGVuIGxhIGL6c3F1ZWRhIGFudGVyaW9yIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRFNfRVJST1IgICAgICAgICAgICAgICAiRXJyb3IiCiAgICBJRFNfQkFEX0tFWSAgICAgICAgICAgICAiTm8gc2UgcHVlZGUgY29uc3VsdGFyIGxhIGNsYXZlICclcyciCiAgICBJRFNfQkFEX1ZBTFVFICAgICAgICAgICAiTm8gc2UgcHVlZGUgY29uc3VsdGFyIGVsIHZhbG9yICclcyciCiAgICBJRFNfVU5TVVBQT1JURURfVFlQRSAgICAiTm8gc2UgcHVlZGVuIGVkaXRhciBjbGF2ZXMgZGUgZXN0ZSB0aXBvICglbGQpIgogICAgSURTX1RPT19CSUdfVkFMVUUgICAgICAgIkVsIHZhbG9yIGVzIGRlbWFzaWFkbyBncmFuZGUgKCVsZCkiCiAgICBJRFNfREVMRVRFX0JPWF9USVRMRSAgICAiQ29uZmlybWFyIGVsaW1pbmFjafNuIGRlIHZhbG9yIgogICAgSURTX0RFTEVURV9CT1hfVEVYVCAgICAgIr9TZWd1cm8gcXVlIGRlc2VhIGVsaW1pbmFyIGVsIHZhbG9yICclcyc/IgogICAgSURTX05FV0tFWSAgICAgICAgICAgICAgIk51ZXZhIGNsYXZlICMlZCIKICAgIElEU19ORVdWQUxVRSAgICAgICAgICAgICJOdWV2byB2YWxvciAjJWQiCkVORAoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyoKICogVEVYVElOQ0xVREUKICovCgoxIFRFWFRJTkNMVURFIERJU0NBUkRBQkxFCkJFR0lOCiAgICAicmVzb3VyY2UuaFwwIgpFTkQKCgoKLyoKICogU3RyaW5nIFRhYmxlCiAqLwoKLyoKICpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQogKkJFR0lOCiAqICAgIElEX0hFTFBfSEVMUFRPUElDUyAgICAgICJPcGVucyBSZWdpc3RyeSBFZGl0b3IgSGVscC4iCiAqICAgIElEX0hFTFBfQUJPVVQgICAgICAgICAgICJEaXNwbGF5cyBwcm9ncmFtIGluZm9ybWF0aW9uLCB2ZXJzaW9uIG51bWJlciwgYW5kIGNvcHlyaWdodC4iCiAqRU5ECiAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwo=