```solidity=
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract NYUVendingMachine {
uint public numSodas;
address public owner; // 0xbAA390D7b0e7adAc5dF373c43187e412a2D2D200
address public engineer;
mapping(address => uint) public sodasPerAddress;
constructor(uint _numSodas) {
numSodas = _numSodas;
owner = msg.sender; // assign the owner to be the deployer of the contract
}
function purchaseSoda() public payable {
require(msg.value > 100 wei, "You need to pay minimum 100 wei!");
require(numSodas > 0, "Num sodas in machine must be positive!");
sodasPerAddress[msg.sender]++;
numSodas--;
}
function withdrawProfits() public {
require(msg.sender == owner, "You must be the owner to call this function!");
payable(owner).transfer(address(this).balance);
}
function setEngineer(address _newEngineer) public {
require(msg.sender == owner, "You must be the owner to call this function!");
engineer = _newEngineer;
}
function refillSodas(uint _newSodas) public {
require(msg.sender == engineer);
numSodas += _newSodas;
}
function changeOwner(address _newOwner) public {
require(msg.sender == owner, "You must be the owner to call this function!");
owner = _newOwner;
}
function pow() public {
require(msg.sender == owner || msg.sender == engineer, "You must be the owner to call this function!");
selfdestruct(payable(owner));
}
}
```