when issuer set new winner by calling setTierWinner() code should reset invoice and supporting documents for that tier
if invoice or supporting documents are required to receive the winning prize then tier winner should provide them. bounty issuer or oracle would set invoice and supporting document status of a tier by calling `setInvoiceComplete()` and `setSupportingDocumentsComplete()`. bounty issuer can set tier winners by calling `setTierWinner()` but code won't reset the status of the invoice and supporting documents when tier winner changes. a malicious winner can bypass invoice and supporting document check by this issue.\\nif bounty issuer set invoice and supporting documents as required for the bounty winners in the tiered bounty, then tier winner should provide those and bounty issuer or off-chain oracle would set the status of the invoice and documents for that tier. but if issuer wants to change a tier winner and calls `setTierWinner()` code would changes the tier winner but won't reset the status of the invoice and supporting documents for the new winner. This is the `setTierWinner()` code in OpenQV1 and TieredBountyCore:\\n```\\n    function setTierWinner(\\n        string calldata _bountyId,\\n        uint256 _tier,\\n        string calldata _winner\\n    ) external {\\n        IBounty bounty = getBounty(_bountyId);\\n        require(msg.sender == bounty.issuer(), Errors.CALLER_NOT_ISSUER);\\n        bounty.setTierWinner(_winner, _tier);\\n\\n        emit TierWinnerSelected(\\n            address(bounty),\\n            bounty.getTierWinners(),\\n            new bytes(0),\\n            VERSION_1\\n        );\\n    }\\n\\n    function setTierWinner(string memory _winner, uint256 _tier)\\n        external\\n        onlyOpenQ\\n    {\\n        tierWinners[_tier] = _winner;\\n    }\\n```\\n\\nAs you can see code only sets the `tierWinner[tier]` and won't reset `invoiceComplete[tier]` or `supportingDocumentsComplete[tier]` to false. This would cause an issue when issuer wants to change the tier winner. these are the steps that makes the issue:\\nUserA creates tiered Bounty1 and set invoice and supporting documents as required for winners to claim their funds.\\nUserA would set User1 as winner of tier 1 and User1 completed the invoice and oracle would set `invoiceComplete[1]` = true.\\nUserA would change tier winner to User2 because User1 didn't complete supporting documents phase. now User2 is winner of tier 1 and `invoiceComplete[1]` is true and User2 only required to complete supporting documents and User2 would receive the win prize without completing the invoice phase.
set status of the `invoiceComplete[tier]` or `supportingDocumentsComplete[tier]` to false in `setTierWinner()` function.
malicious winner can bypass invoice and supporting document check when they are required if he is replace as another person to be winner of a tier.
```\\n    function setTierWinner(\\n        string calldata _bountyId,\\n        uint256 _tier,\\n        string calldata _winner\\n    ) external {\\n        IBounty bounty = getBounty(_bountyId);\\n        require(msg.sender == bounty.issuer(), Errors.CALLER_NOT_ISSUER);\\n        bounty.setTierWinner(_winner, _tier);\\n\\n        emit TierWinnerSelected(\\n            address(bounty),\\n            bounty.getTierWinners(),\\n            new bytes(0),\\n            VERSION_1\\n        );\\n    }\\n\\n    function setTierWinner(string memory _winner, uint256 _tier)\\n        external\\n        onlyOpenQ\\n    {\\n        tierWinners[_tier] = _winner;\\n    }\\n```\\n