LyoKICogQ29weXJpZ2h0IDIwMDcgRGFuaWVsIE55bGFuZGVyCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCiNpbmNsdWRlICJyZXNvdXJjZS5oIgoKTEFOR1VBR0UgTEFOR19TV0VESVNILCBTVUJMQU5HX05FVVRSQUwKCklERF9QUk9YWURMRyBESUFMT0cgMzYsIDI0LCAyNTAsIDE1NApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJBbmdlIG7kdHZlcmtzbPZzZW5vcmQiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogTFRFWFQgIkFuZ2UgZGl0dCBhbnbkbmRhcm5hbW4gb2NoIGz2c2Vub3JkOiIsIC0xLCA0MCwgNiwgMTUwLCAxNQogTFRFWFQgIlByb3h5IiwgLTEsIDQwLCAyNiwgNTAsIDEwCiBMVEVYVCAiRG9t5G4iLCAtMSwgNDAsIDQ2LCA1MCwgMTAKIExURVhUICJBbnbkbmRhcmUiLCAtMSwgNDAsIDY2LCA1MCwgMTAKIExURVhUICJM9nNlbm9yZCIsIC0xLCA0MCwgODYsIDUwLCAxMAogTFRFWFQgIiIgSURDX1BST1hZLCA4MCwgMjYsIDE1MCwgMTQsIDAKIExURVhUICIiIElEQ19SRUFMTSwgODAsIDQ2LCAxNTAsIDE0LCAwCiBFRElUVEVYVCBJRENfVVNFUk5BTUUsIDgwLCA2NiwgMTUwLCAxNCwgRVNfQVVUT0hTQ1JPTEwgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCiBFRElUVEVYVCBJRENfUEFTU1dPUkQsIDgwLCA4NiwgMTUwLCAxNCwgRVNfQVVUT0hTQ1JPTEwgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QIHwgRVNfUEFTU1dPUkQKIENIRUNLQk9YICImU3BhcmEgZGV0dGEgbPZzZW5vcmQgKG9z5GtlcnQpIiwgSURDX1NBVkVQQVNTV09SRCwKICAgICAgICAgICA4MCwgMTA2LCAxNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIk9LIiwgSURPSywgOTgsIDEyNiwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AgfCBCU19ERUZQVVNIQlVUVE9OCiBQVVNIQlVUVE9OICJBdmJyeXQiLCBJRENBTkNFTCwgMTU4LCAxMjYsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCn0KCklERF9BVVRIRExHIERJQUxPRyAzNiwgMjQsIDI1MCwgMTU0ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkF1dGVudGlzZXJpbmcga3LkdnMiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogTFRFWFQgIkFuZ2UgZGl0dCBhbnbkbmRhcm5hbW4gb2NoIGz2c2Vub3JkOiIsIC0xLCA0MCwgNiwgMTUwLCAxNQogTFRFWFQgIlNlcnZlciIsIC0xLCA0MCwgMjYsIDUwLCAxMAogTFRFWFQgIkRvbeRuIiwgLTEsIDQwLCA0NiwgNTAsIDEwCiBMVEVYVCAiQW525G5kYXJlIiwgLTEsIDQwLCA2NiwgNTAsIDEwCiBMVEVYVCAiTPZzZW5vcmQiLCAtMSwgNDAsIDg2LCA1MCwgMTAKIExURVhUICIiIElEQ19TRVJWRVIsIDgwLCAyNiwgMTUwLCAxNCwgMAogTFRFWFQgIiIgSURDX1JFQUxNLCA4MCwgNDYsIDE1MCwgMTQsIDAKIEVESVRURVhUIElEQ19VU0VSTkFNRSwgODAsIDY2LCAxNTAsIDE0LCBFU19BVVRPSFNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKIEVESVRURVhUIElEQ19QQVNTV09SRCwgODAsIDg2LCAxNTAsIDE0LCBFU19BVVRPSFNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AgfCBFU19QQVNTV09SRAogQ0hFQ0tCT1ggIiZTcGFyYSBkZXR0YSBs9nNlbm9yZCAob3Pka2VydCkiLCBJRENfU0FWRVBBU1NXT1JELAogICAgICAgICAgIDgwLCAxMDYsIDE1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAiT0siLCBJRE9LLCA5OCwgMTI2LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUCB8IEJTX0RFRlBVU0hCVVRUT04KIFBVU0hCVVRUT04gIkF2YnJ5dCIsIElEQ0FOQ0VMLCAxNTgsIDEyNiwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKfQoKSUREX0lOVkNFUlRETEcgRElBTE9HIDMsIDI0LCAyNTAsIDg2ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIlPka2VyaGV0c3Zhcm5pbmciCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogTFRFWFQgIkV0dCBwcm9ibGVtIHVwcHTkY2t0ZXMgbWVkIGNlcnRpZmlrYXRldCBm9nIgZGVubmEgc2l0ZS4iLCAtMSwgNDAsIDYsIDIwMCwgMjAKIExURVhUICIiLCBJRENfQ0VSVF9FUlJPUiwgNDAsIDI2LCAyMDAsIDIwCiBMVEVYVCAiVmlsbCBkdSBmb3J0c+R0dGEg5G5k5T8iLCAtMSwgNDAsIDQ2LCAyMDAsIDIwCiBQVVNIQlVUVE9OICJKYSIsIElET0ssIDQwLCA2NiwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AgfCBCU19ERUZQVVNIQlVUVE9OCiBQVVNIQlVUVE9OICJOZWoiLCBJRENBTkNFTCwgMTAwLCA2NiwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKfQoKU1RSSU5HVEFCTEUKewogIElEU19MQU5DT05ORUNUSU9OICJMQU4tYW5zbHV0bmluZyIKICBJRFNfQ0VSVF9DQV9JTlZBTElEICAgIkNlcnRpZmlrYXRldCDkciB1dGbkcmRhdCBhdiBlbiBva+RuZCBlbGxlciBlaiBiZXRyb2RkIHV0Z2l2YXJlLiIKICBJRFNfQ0VSVF9EQVRFX0lOVkFMSUQgIkNlcnRpZmlrYXRldHMgZGF0dW0g5HIgb2dpbHRpZ3QuIgogIElEU19DRVJUX0NOX0lOVkFMSUQgICAiTmFtbmV0IHDlIGNlcnRpZmlrYXRldCBtYXRjaGFyIGludGUgc2l0ZW5zIG5hbW4uIgogIElEU19DRVJUX0VSUk9SUyAgICAgICAiQ2VydGlmaWthdGV0IGhhciBtaW5zdCBldHQgb3NwZWNpZmljZXJhdCBz5GtlcmhldHNwcm9ibGVtLiIKfQo=