LyoKICogUG9saXNoIHJlc291cmNlcyBmb3Igb2xlYWNjCiAqCiAqIENvcHlyaWdodCAyMDA5IKN1a2FzeiBXb2puabNvd2ljegogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAib2xlYWNjLmgiCgpMQU5HVUFHRSBMQU5HX1BPTElTSCwgU1VCTEFOR19ORVVUUkFMCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICAwICJ1bmtub3duIG9iamVjdCIgLyogdW5kb2N1bWVudGVkICovCiAgICBST0xFX1NZU1RFTV9USVRMRUJBUiAgICAicGFzZWsgdHl0dbN1IgogICAgUk9MRV9TWVNURU1fTUVOVUJBUiAgICAgInBhc2VrIG1lbnUiCiAgICBST0xFX1NZU1RFTV9TQ1JPTExCQVIgICAicGFzZWsgcHJ6ZXdpamFuaWEiCiAgICBST0xFX1NZU1RFTV9HUklQICAgICAgICAidWNod3l0IgogICAgUk9MRV9TWVNURU1fU09VTkQgICAgICAgImSfd2nqayIKICAgIFJPTEVfU1lTVEVNX0NVUlNPUiAgICAgICJrdXJzb3IiCiAgICBST0xFX1NZU1RFTV9DQVJFVCAgICAgICAiZGFzemVrIgogICAgUk9MRV9TWVNURU1fQUxFUlQgICAgICAgIm9zdHJ6Zb9lbmllIgogICAgUk9MRV9TWVNURU1fV0lORE9XICAgICAgIm9rbm8iCiAgICBST0xFX1NZU1RFTV9DTElFTlQgICAgICAia2xpZW50IgogICAgUk9MRV9TWVNURU1fTUVOVVBPUFVQICAgIm1lbnUgcm96d2lqYW5lIgogICAgUk9MRV9TWVNURU1fTUVOVUlURU0gICAgImVsZW1lbnQgbWVudSIKICAgIFJPTEVfU1lTVEVNX1RPT0xUSVAgICAgICJwb2Rwb3dpZWSfIgogICAgUk9MRV9TWVNURU1fQVBQTElDQVRJT04gImFwbGlrYWNqYSIKICAgIFJPTEVfU1lTVEVNX0RPQ1VNRU5UICAgICJkb2t1bWVudCIKICAgIFJPTEVfU1lTVEVNX1BBTkUgICAgICAgICJ3eWNpbmVrIgogICAgUk9MRV9TWVNURU1fQ0hBUlQgICAgICAgInd5a3JlcyIKICAgIFJPTEVfU1lTVEVNX0RJQUxPRyAgICAgICJkaWFsb2ciCiAgICBST0xFX1NZU1RFTV9CT1JERVIgICAgICAib2JyYW1vd2FuaWUiCiAgICBST0xFX1NZU1RFTV9HUk9VUElORyAgICAiZ3J1cG93YW5pZSIKICAgIFJPTEVfU1lTVEVNX1NFUEFSQVRPUiAgICJzZXBhcmF0b3IiCiAgICBST0xFX1NZU1RFTV9UT09MQkFSICAgICAicGFzZWsgbmFyeupkemkiCiAgICBST0xFX1NZU1RFTV9TVEFUVVNCQVIgICAicGFzZWsgc3RhbnUiCiAgICBST0xFX1NZU1RFTV9UQUJMRSAgICAgICAgInRhYmVsYSIKICAgIFJPTEVfU1lTVEVNX0NPTFVNTkhFQURFUiAibmFns/N3ZWsga29sdW1ueSIKICAgIFJPTEVfU1lTVEVNX1JPV0hFQURFUiAgICAibmFns/N3ZWsgd2llcnN6YSIKICAgIFJPTEVfU1lTVEVNX0NPTFVNTiAgICAgICAia29sdW1uYSIKICAgIFJPTEVfU1lTVEVNX1JPVyAgICAgICAgICAid2llcnN6IgogICAgUk9MRV9TWVNURU1fQ0VMTCAgICAgICAgICJrb23zcmthIgogICAgUk9MRV9TWVNURU1fTElOSyAgICAgICAgICJkb3dpuXphbmllIgogICAgUk9MRV9TWVNURU1fSEVMUEJBTExPT04gICJkeW1layBwb21vY3kiCiAgICBST0xFX1NZU1RFTV9DSEFSQUNURVIgICAgInpuYWsiCiAgICBST0xFX1NZU1RFTV9MSVNUICAgICAgICAgImxpc3RhIgogICAgUk9MRV9TWVNURU1fTElTVElURU0gICAgICJlbGVtZW50IGxpc3R5IgogICAgUk9MRV9TWVNURU1fT1VUTElORSAgICAgICJ6YXJ5cyIKICAgIFJPTEVfU1lTVEVNX09VVExJTkVJVEVNICAiZWxlbWVudCB6YXJ5c3UiCiAgICBST0xFX1NZU1RFTV9QQUdFVEFCICAgICAgInpha7NhZGthIHN0cm9ueSIKICAgIFJPTEVfU1lTVEVNX1BST1BFUlRZUEFHRSAic3Ryb25hIHezYZxjaXdvnGNpIgogICAgUk9MRV9TWVNURU1fSU5ESUNBVE9SICAgICJ3c2thn25payIKICAgIFJPTEVfU1lTVEVNX0dSQVBISUMgICAgICAiZ3JhZmlrYSIKICAgIFJPTEVfU1lTVEVNX1NUQVRJQ1RFWFQgICAidGVrc3Qgc3RhdHljem55IgogICAgUk9MRV9TWVNURU1fVEVYVCAgICAgICAgICJ0ZWtzdCIKICAgIFJPTEVfU1lTVEVNX1BVU0hCVVRUT04gICAicHJ6eWNpc2siCiAgICBST0xFX1NZU1RFTV9DSEVDS0JVVFRPTiAgInByenljaXNrIHphem5hY3phbnkiCiAgICBST0xFX1NZU1RFTV9SQURJT0JVVFRPTiAgInByenljaXNrIG9wY2ppIgogICAgUk9MRV9TWVNURU1fQ09NQk9CT1ggICAgICJwb2xlIGtvbWJpIgogICAgUk9MRV9TWVNURU1fRFJPUExJU1QgICAgICJsaXN0YSByb3p3aWphbmEiCiAgICBST0xFX1NZU1RFTV9QUk9HUkVTU0JBUiAgInBhc2VrIHBvc3TqcHUiCiAgICBST0xFX1NZU1RFTV9ESUFMICAgICAgICAgInd5YmllcmFuaWUiCiAgICBST0xFX1NZU1RFTV9IT1RLRVlGSUVMRCAgInBvbGUgZ29yuWNlZ28ga2xhd2lzemEiCiAgICBST0xFX1NZU1RFTV9TTElERVIgICAgICAgInN1d2FrIgogICAgUk9MRV9TWVNURU1fU1BJTkJVVFRPTiAgICJwb2xlIHByemV3aWphbmUiCiAgICBST0xFX1NZU1RFTV9ESUFHUkFNICAgICAgImRpYWdyYW0iCiAgICBST0xFX1NZU1RFTV9BTklNQVRJT04gICAgImFuaW1hY2phIgogICAgUk9MRV9TWVNURU1fRVFVQVRJT04gICAgICJy83duYW5pZSIKICAgIFJPTEVfU1lTVEVNX0JVVFRPTkRST1BET1dOICJwcnp5Y2lzayByb3p3aWphbnkiCiAgICBST0xFX1NZU1RFTV9CVVRUT05NRU5VICAgInByenljaXNrIG1lbnUiCiAgICBST0xFX1NZU1RFTV9CVVRUT05EUk9QRE9XTkdSSUQgInNpYXRrYSBwcnp5Y2lza/N3IHJvendpamFueWNoIgogICAgUk9MRV9TWVNURU1fV0hJVEVTUEFDRSAgICJiaWGzYSBzcGFjamEiCiAgICBST0xFX1NZU1RFTV9QQUdFVEFCTElTVCAgImxpc3RhIHpha7NhZGVrIHN0cm9uIgogICAgUk9MRV9TWVNURU1fQ0xPQ0sgICAgICAgICJ6ZWdhciIKICAgIFJPTEVfU1lTVEVNX1NQTElUQlVUVE9OICAicHJ6eWNpc2sgcm96ZHppZWxhbmlhIgogICAgUk9MRV9TWVNURU1fSVBBRERSRVNTICAgICJhZHJlcyBJUCIKICAgIFJPTEVfU1lTVEVNX09VVExJTkVCVVRUT04gInByenljaXNrIHphcnlzdSIKfQo=