LyoKICogV2luZU1pbmUKICogUG9ydHVndWVzZSBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDAzIE1hcmNlbG8gRHVhcnRlCiAqIENvcHlyaWdodCAyMDA0IEFt6XJpY28gSm9z6SBNZWxvCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCiNpbmNsdWRlICJyZXNvdXJjZS5oIgoKTEFOR1VBR0UgTEFOR19QT1JUVUdVRVNFLCBTVUJMQU5HX1BPUlRVR1VFU0VfQlJBWklMSUFOCgpTVFJJTkdUQUJMRSB7CiAgICAgSURTX0FQUE5BTUUsICJXaW5lTWluZSIKICAgICBJRFNfTk9CT0RZLCAgIk5pbmd16W0iCiAgICAgSURTX0FCT1VULCAgICJDb3B5cmlnaHQgMjAwMCBKb3NodWEgVGhpZWxlbiIKfQoKTUVOVV9XSU5FTUlORSBNRU5VIERJU0NBUkRBQkxFCnsKICAgIFBPUFVQICImT3Dn9WVzIiB7CiAgICAgICAgTUVOVUlURU0gIiZOb3ZvXHRGMiIsICAgICAgICAgICBJRE1fTkVXCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZNYXJjYXMiLCBJRE1fTUFSS1EKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlByaW5jaXBpYW50ZSIsICAgICAgSURNX0JFR0lOTkVSCiAgICAgICAgTUVOVUlURU0gIiZJbnRlcm1lZGnhcmlvIiwgICAgICBJRE1fQURWQU5DRUQKICAgICAgICBNRU5VSVRFTSAiJkV4cGVyaWVudGUiLCAgICAgICAgSURNX0VYUEVSVAogICAgICAgIE1FTlVJVEVNICJQZXJzb25hbGkmemFyLi4uIiwgICAgICAgIElETV9DVVNUT00KICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiU2FpJnJcdEFsdCtYIiwgICAgICAgSURNX0VYSVQKICAgIH0KICAgIFBPUFVQICJBaiZ1ZGEiIHsKICAgICAgICBNRU5VSVRFTSAiJk1lbGhvcmVzIHRlbXBvcyIsICAgIElETV9USU1FUwogICAgICAgIE1FTlVJVEVNICImU29icmUiLCAgICAgICAgIElETV9BQk9VVAogICAgfQp9CgpMQU5HVUFHRSBMQU5HX1BPUlRVR1VFU0UsIFNVQkxBTkdfUE9SVFVHVUVTRQoKU1RSSU5HVEFCTEUgewogICAgIElEU19BUFBOQU1FLCAiV2luZU1pbmUiCiAgICAgSURTX05PQk9EWSwgICJOaW5ndeltIgogICAgIElEU19BQk9VVCwgICAiRGlyZWl0b3MgZGUgYXV0b3IgMjAwMCwgSm9zaHVhIFRoaWVsZW4iCn0KCk1FTlVfV0lORU1JTkUgTUVOVSBESVNDQVJEQUJMRQp7CiAgICBQT1BVUCAiJk9w5/VlcyIgewogICAgICAgIE1FTlVJVEVNICImTm92b1x0RjIiLCAgICAgICAgICAgSURNX05FVwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImTWFyY2FzIiwgSURNX01BUktRCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZQcmluY2lwaWFudGUiLCAgICAgIElETV9CRUdJTk5FUgogICAgICAgIE1FTlVJVEVNICImSW50ZXJtZWRp4XJpbyIsICAgICAgSURNX0FEVkFOQ0VECiAgICAgICAgTUVOVUlURU0gIiZFeHBlcmllbnRlIiwgICAgICAgIElETV9FWFBFUlQKICAgICAgICBNRU5VSVRFTSAiUGVyc29uYWxpJnphci4uLiIsICAgICAgICBJRE1fQ1VTVE9NCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIlNhaSZyXHRBbHQrWCIsICAgICAgIElETV9FWElUCiAgICB9CiAgICBQT1BVUCAiQWomdWRhIiB7CiAgICAgICAgTUVOVUlURU0gIiZNZWxob3JlcyB0ZW1wb3MiLCAgICBJRE1fVElNRVMKICAgICAgICBNRU5VSVRFTSAiJkFjZXJjYSIsICAgICAgICAgSURNX0FCT1VUCiAgICB9Cn0KCgpMQU5HVUFHRSBMQU5HX1BPUlRVR1VFU0UsIFNVQkxBTkdfTkVVVFJBTAoKRExHX1RJTUVTIERJQUxPRyBESVNDQVJEQUJMRSAwLCAwLCAxNjAsIDgwClNUWUxFICBEU19NT0RBTEZSQU1FIHwgRFNfM0RMT09LIHwKICAgIFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IFdTX1BPUFVQCkNBUFRJT04gIk1lbGhvcmVzIHRlbXBvcyIKewogICAgR1JPVVBCT1ggICAgICAgICJNZWxob3JlcyB0ZW1wb3MiLCAtMSwgIDEwLCAgMTAsIDE0MCwgIDQ1CiAgICBMVEVYVCAgICAgICAgICAgIlByaW5jaXBpYW50ZSIsICAgICAgLTEsICAyMCwgIDIwLCAgNDAsICAgOAogICAgTFRFWFQgICAgICAgICAgICJJbnRlcm1lZGnhcmlvIiwgICAgICAtMSwgIDIwLCAgMzAsICA0MCwgICA4CiAgICBMVEVYVCAgICAgICAgICAgIkV4cGVyaWVudGUiLCAgICAgICAgLTEsICAyMCwgIDQwLCAgNDAsICAgOAogICAgTFRFWFQgICAgICAgICAgICI5OTkiLCAgICAgICAgICBJRENfVElNRTEsICA3MCwgIDIwLCAgMTUsICAgOAogICAgTFRFWFQgICAgICAgICAgICI5OTkiLCAgICAgICAgICBJRENfVElNRTIsICA3MCwgIDMwLCAgMTUsICAgOAogICAgTFRFWFQgICAgICAgICAgICI5OTkiLCAgICAgICAgICBJRENfVElNRTMsICA3MCwgIDQwLCAgMTUsICAgOAogICAgTFRFWFQgICAgICAgICAgICIiLCAgICAgICAgICAgICBJRENfTkFNRTEsICA5MCwgIDIwLCAgNTUsICAgOAogICAgTFRFWFQgICAgICAgICAgICIiLCAgICAgICAgICAgICBJRENfTkFNRTIsICA5MCwgIDMwLCAgNTUsICAgOAogICAgTFRFWFQgICAgICAgICAgICIiLCAgICAgICAgICAgICBJRENfTkFNRTMsICA5MCwgIDQwLCAgNTUsICAgOAogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsICAgICAgICAgICAgICAgIElET0ssICA1NSwgIDYwLCAgNTAsICAxNQp9CgoKTEFOR1VBR0UgTEFOR19QT1JUVUdVRVNFLCBTVUJMQU5HX1BPUlRVR1VFU0VfQlJBWklMSUFOCgpETEdfQ09OR1JBVFMgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAxNjAsIDYwClNUWUxFICBEU19NT0RBTEZSQU1FIHwgRFNfM0RMT09LIHwKICAgIFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IFdTX1BPUFVQCkNBUFRJT04gIkNvbmdyYXR1bGHn9WVzISIKewogICAgTFRFWFQgICAgICAgICAgICJQb3IgZmF2b3IsIGVudHJlIG8gc2V1IG5vbWUiLCAtMSwgIDEwLCAgMTAsIDE1MCwgIDEwCiAgICBFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEQ19FRElUTkFNRSwgIDI1LCAgMjAsIDExMCwgIDEyCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIiwgICAgICAgICAgICAgICAgICAgICAgICAgSURPSywgIDYwLCAgNDAsICA0MCwgIDE1Cn0KCkxBTkdVQUdFIExBTkdfUE9SVFVHVUVTRSwgU1VCTEFOR19QT1JUVUdVRVNFCgpETEdfQ09OR1JBVFMgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAxNjAsIDYwClNUWUxFICBEU19NT0RBTEZSQU1FIHwgRFNfM0RMT09LIHwKICAgIFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IFdTX1BPUFVQCkNBUFRJT04gIlBhcmFiZW5zISIKewogICAgTFRFWFQgICAgICAgICAgICJQb3IgZmF2b3IsIGluZGlxdWUgbyBzZXUgbm9tZSIsIC0xLCAgMTAsICAxMCwgMTUwLCAgMTAKICAgIEVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURDX0VESVROQU1FLCAgMjUsICAyMCwgMTEwLCAgMTIKICAgIERFRlBVU0hCVVRUT04gICAiT0siLCAgICAgICAgICAgICAgICAgICAgICAgICBJRE9LLCAgNjAsICA0MCwgIDQwLCAgMTUKfQoKCkxBTkdVQUdFIExBTkdfUE9SVFVHVUVTRSwgU1VCTEFOR19ORVVUUkFMCgpETEdfQ1VTVE9NIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMTAwLCAxMDAKU1RZTEUgIERTX01PREFMRlJBTUUgfCBEU18zRExPT0sgfAogICAgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgV1NfUE9QVVAKQ0FQVElPTiAiSm9nbyBwZXJzb25hbGl6YWRvIgp7CiAgICBMVEVYVCAgICAgICAgICAgIkxpbmhhcyIsICAgLTEsICAgNSwgICA1LCAgMzAsICAxMAogICAgTFRFWFQgICAgICAgICAgICJDb2x1bmFzIiwgICAtMSwgICA1LCAgMzUsICAzMCwgIDEwCiAgICBMVEVYVCAgICAgICAgICAgIk1pbmFzIiwgIC0xLCAgIDUsICA2NSwgIDMwLCAgMTAKICAgIEVESVRURVhUICAgICAgICAgICAgICBJRENfRURJVFJPV1MsICAgNSwgIDE1LCAgMjAsICAxMiwgRVNfTlVNQkVSCiAgICBFRElUVEVYVCAgICAgICAgICAgICAgSURDX0VESVRDT0xTLCAgIDUsICA0NSwgIDIwLCAgMTIsIEVTX05VTUJFUgogICAgRURJVFRFWFQgICAgICAgICAgICAgSURDX0VESVRNSU5FUywgICA1LCAgNzUsICAyMCwgIDEyLCBFU19OVU1CRVIKICAgIERFRlBVU0hCVVRUT04gICAiT0siLCAgICAgSURPSywgICAgICA0MCwgIDMwLCAgNTAsICAxNQogICAgUFVTSEJVVFRPTiAgICAgICJDYW5jZWxhciIsIElEQ0FOQ0VMLCAgNDAsICA1MCwgIDUwLCAgMTUKfQo=