diff --git a/contracts/ERC20Interface.sol b/contracts/ERC20Interface.sol new file mode 100644 index 0000000..3435f78 --- /dev/null +++ b/contracts/ERC20Interface.sol @@ -0,0 +1,37 @@ +pragma solidity 0.5.2; + +/** + * @title ERC20 interface + * @dev see https://github.com/ethereum/EIPs/issues/20 + * @notice interface contract from Zeppelin token erc20; + */ +interface ERC20Interface { + function totalSupply() external view returns (uint256); + + function decimals() external view returns (uint256); + + function balanceOf(address who) external view returns (uint256); + + function allowance(address owner, address spender) + external view returns (uint256); + + function transfer(address to, uint256 value) external returns (bool); + + function approve(address spender, uint256 value) + external returns (bool); + + function transferFrom(address from, address to, uint256 value) + external returns (bool); + + event Transfer( + address indexed from, + address indexed to, + uint256 value + ); + + event Approval( + address indexed owner, + address indexed spender, + uint256 value + ); +} diff --git a/contracts/Migrations.sol b/contracts/Migrations.sol index cffe8b9..a5df4c0 100644 --- a/contracts/Migrations.sol +++ b/contracts/Migrations.sol @@ -1,4 +1,4 @@ -pragma solidity 0.4.24; +pragma solidity 0.5.2; contract Migrations { address public owner; diff --git a/contracts/Ownable.sol b/contracts/Ownable.sol index bfec508..e1be45d 100644 --- a/contracts/Ownable.sol +++ b/contracts/Ownable.sol @@ -1,4 +1,4 @@ -pragma solidity 0.4.24; +pragma solidity 0.5.2; diff --git a/contracts/SafeMath.sol b/contracts/SafeMath.sol index b9385d8..c2929ce 100644 --- a/contracts/SafeMath.sol +++ b/contracts/SafeMath.sol @@ -1,4 +1,4 @@ -pragma solidity 0.4.24; +pragma solidity 0.5.2; /** diff --git a/contracts/TokenIOAuthority.sol b/contracts/TokenIOAuthority.sol index e54fa59..4f1a736 100644 --- a/contracts/TokenIOAuthority.sol +++ b/contracts/TokenIOAuthority.sol @@ -1,4 +1,4 @@ -pragma solidity 0.4.24; +pragma solidity 0.5.2; /* COPYRIGHT 2018 Token, Inc. @@ -31,6 +31,8 @@ contract TokenIOAuthority is Ownable { using TokenIOLib for TokenIOLib.Data; TokenIOLib.Data lib; + address public proxyInstance; + /** * @notice Constructor method for Authority contract * @param _storageContract Ethereum Address of TokenIOStorage contract @@ -48,13 +50,20 @@ contract TokenIOAuthority is Ownable { owner[msg.sender] = true; } + function initProxy(address _proxy) public onlyOwner { + require(_proxy != address(0)); + + proxyInstance = _proxy; + lib.proxyInstance = _proxy; + } + /** * @notice Registers a firm as authorized true/false * @param firmName Name of firm * @param _authorized Authorization status * @return {"success" : "Returns true if lib.setRegisteredFirm succeeds"} */ - function setRegisteredFirm(string firmName, bool _authorized) public onlyAuthority(firmName, msg.sender) returns (bool success) { + function setRegisteredFirm(string memory firmName, bool _authorized, address sender) public onlyAuthority(firmName, sender) returns (bool success) { /// @notice set firm registration status require( lib.setRegisteredFirm(firmName, _authorized), @@ -70,7 +79,7 @@ contract TokenIOAuthority is Ownable { * @param _authorized Authorization status * @return {"success" : "Returns true if lib.setRegisteredAuthority succeeds"} */ - function setRegisteredAuthority(string firmName, address authority, bool _authorized) public onlyAuthority(firmName, msg.sender) returns (bool success) { + function setRegisteredAuthority(string memory firmName, address authority, bool _authorized, address sender) public onlyAuthority(firmName, sender) returns (bool success) { /// @notice set authority of firm to given status require( lib.setRegisteredAuthority(firmName, authority, _authorized), @@ -84,7 +93,7 @@ contract TokenIOAuthority is Ownable { * @param authority Address of authority account * @return {"firm" : "name of firm"} */ - function getFirmFromAuthority(address authority) public view returns (string firm) { + function getFirmFromAuthority(address authority) public view returns (string memory firm) { return lib.getFirmFromAuthority(authority); } @@ -93,7 +102,7 @@ contract TokenIOAuthority is Ownable { * @param firmName Name of firm * @return {"status" : "Returns status of firm registration"} */ - function isRegisteredFirm(string firmName) public view returns (bool status) { + function isRegisteredFirm(string memory firmName) public view returns (bool status) { /// @notice check firm's registration status return lib.isRegisteredFirm(firmName); } @@ -104,7 +113,7 @@ contract TokenIOAuthority is Ownable { * @param authority Address of authority account * @return {"registered" : "Returns status of account registration to firm"} */ - function isRegisteredToFirm(string firmName, address authority) public view returns (bool registered) { + function isRegisteredToFirm(string memory firmName, address authority) public view returns (bool registered) { /// @notice check if registered to firm return lib.isRegisteredToFirm(firmName, authority); } @@ -134,7 +143,7 @@ contract TokenIOAuthority is Ownable { } - modifier onlyAuthority(string firmName, address authority) { + modifier onlyAuthority(string memory firmName, address authority) { /// @notice throws if not an owner authority or not registered to the given firm require(owner[authority] || lib.isRegisteredToFirm(firmName, authority), "Error: Transaction sender does not have permission for this operation!" diff --git a/contracts/TokenIOAuthorityProxy.sol b/contracts/TokenIOAuthorityProxy.sol new file mode 100644 index 0000000..337e7b8 --- /dev/null +++ b/contracts/TokenIOAuthorityProxy.sol @@ -0,0 +1,84 @@ +pragma solidity 0.5.2; + +import "./Ownable.sol"; + +interface TokenIOAuthorityI { + function setRegisteredFirm(string calldata firmName, bool _authorized, address sender) external returns (bool success); + + function setRegisteredAuthority(string calldata firmName, address authority, bool _authorized, address sender) external returns (bool success); + + function getFirmFromAuthority(address authority) external view returns (string memory firm); + + function isRegisteredFirm(string calldata firmName) external view returns (bool status); + + function isRegisteredToFirm(string calldata firmName, address authority) external view returns (bool registered); + + function isRegisteredAuthority(address authority) external view returns (bool registered); + + function setMasterFeeContract(address feeContract) external returns (bool success); +} + +contract TokenIOAuthorityProxy is Ownable { + + address implementationInstance; + + constructor(address _tokenIOAuthorityImpl) public { + implementationInstance = _tokenIOAuthorityImpl; + } + + function upgradeTo(address _newTokenIOAuthorityImpl) onlyOwner external { + require(_newTokenIOAuthorityImpl != address(0)); + implementationInstance = _newTokenIOAuthorityImpl; + } + + function staticCall(bytes calldata payload) external view returns(bytes memory) { + (bool res, bytes memory result) = implementationInstance.staticcall(payload); + return result; + } + + function call(bytes calldata payload) external { + (bool res, bytes memory result) = implementationInstance.call(payload); + require(res); + } + + function setRegisteredFirm(string memory firmName, bool _authorized) public returns (bool success) { + require( + TokenIOAuthorityI(implementationInstance).setRegisteredFirm(firmName, _authorized, msg.sender), + "Unable to execute setRegisteredFirm" + ); + return true; + } + + function setRegisteredAuthority(string memory firmName, address authority, bool _authorized) public returns (bool success) { + require( + TokenIOAuthorityI(implementationInstance).setRegisteredAuthority(firmName, authority, _authorized, msg.sender), + "Unable to execute setRegisteredFirm" + ); + return true; + } + + function getFirmFromAuthority(address authority) public view returns (string memory firm) { + return TokenIOAuthorityI(implementationInstance).getFirmFromAuthority(authority); + } + + function isRegisteredFirm(string memory firmName) public view returns (bool status) { + return TokenIOAuthorityI(implementationInstance).isRegisteredFirm(firmName); + } + + function isRegisteredToFirm(string memory firmName, address authority) public view returns (bool registered) { + return TokenIOAuthorityI(implementationInstance).isRegisteredToFirm(firmName, authority); + } + + function isRegisteredAuthority(address authority) public view returns (bool registered) { + return TokenIOAuthorityI(implementationInstance).isRegisteredAuthority(authority); + } + + function setMasterFeeContract(address feeContract) public onlyOwner returns (bool success) { + require( + TokenIOAuthorityI(implementationInstance).setMasterFeeContract(feeContract), + "Unable to execute setMasterFeeContract" + ); + return true; + } + +} diff --git a/contracts/TokenIOCurrencyAuthority.sol b/contracts/TokenIOCurrencyAuthority.sol index 19f147c..64febd4 100644 --- a/contracts/TokenIOCurrencyAuthority.sol +++ b/contracts/TokenIOCurrencyAuthority.sol @@ -1,4 +1,4 @@ -pragma solidity 0.4.24; +pragma solidity 0.5.2; import "./Ownable.sol"; import "./TokenIOStorage.sol"; @@ -29,6 +29,8 @@ contract TokenIOCurrencyAuthority is Ownable { using TokenIOLib for TokenIOLib.Data; TokenIOLib.Data lib; + address public proxyInstance; + /** * @notice Constructor method for CurrencyAuthority contract * @param _storageContract Address of TokenIOStorage contract @@ -45,13 +47,20 @@ contract TokenIOCurrencyAuthority is Ownable { owner[msg.sender] = true; } + function initProxy(address _proxy) public onlyOwner { + require(_proxy != address(0)); + + proxyInstance = _proxy; + lib.proxyInstance = _proxy; + } + /** * @notice Gets balance of sepcified account for a given currency * @param currency Currency symbol 'USDx' * @param account Sepcified account address * @return { "balance": "Returns account balance"} */ - function getTokenBalance(string currency, address account) public view returns (uint balance) { + function getTokenBalance(string memory currency, address account) public view returns (uint balance) { return lib.getTokenBalance(currency, account); } @@ -60,7 +69,7 @@ contract TokenIOCurrencyAuthority is Ownable { * @param currency Currency symbol 'USDx' * @return { "supply": "Returns total supply of currency"} */ - function getTokenSupply(string currency) public view returns (uint supply) { + function getTokenSupply(string memory currency) public view returns (uint supply) { return lib.getTokenSupply(currency); } @@ -71,7 +80,7 @@ contract TokenIOCurrencyAuthority is Ownable { * @param issuerFirm Name of the issuer firm with authority on account holder; * @return { "success": "Returns true if successfully called from another contract"} */ - function freezeAccount(address account, bool isAllowed, string issuerFirm) public onlyAuthority(issuerFirm, msg.sender) returns (bool success) { + function freezeAccount(address account, bool isAllowed, string memory issuerFirm, address sender) public onlyAuthority(issuerFirm, sender) returns (bool success) { // @notice updates account status // @dev !!! mutates storage state require( @@ -88,7 +97,7 @@ contract TokenIOCurrencyAuthority is Ownable { * @param issuerFirm Name of the issuer firm with authority on account holder; * @return { "success": "Returns true if successfully called from another contract"} */ - function approveKYC(address account, bool isApproved, uint limit, string issuerFirm) public onlyAuthority(issuerFirm, msg.sender) returns (bool success) { + function approveKYC(address account, bool isApproved, uint limit, string memory issuerFirm, address sender) public onlyAuthority(issuerFirm, sender) returns (bool success) { // @notice updates kyc approval status // @dev !!! mutates storage state require( @@ -120,7 +129,7 @@ contract TokenIOCurrencyAuthority is Ownable { * @param issuerFirm Name of the issuer firm with authority on account holder; * @return { "success": "Returns true if successfully called from another contract"} */ - function approveKYCAndDeposit(string currency, address account, uint amount, uint limit, string issuerFirm) public onlyAuthority(issuerFirm, msg.sender) returns (bool success) { + function approveKYCAndDeposit(string memory currency, address account, uint amount, uint limit, string memory issuerFirm, address sender) public onlyAuthority(issuerFirm, sender) returns (bool success) { /// @notice updates kyc approval status /// @dev !!! mutates storage state require( @@ -155,7 +164,7 @@ contract TokenIOCurrencyAuthority is Ownable { * @param issuerFirm Name of the issuer firm with authority on account holder; * @return { "success": "Returns true if successfully called from another contract"} */ - function setAccountSpendingLimit(address account, uint limit, string issuerFirm) public onlyAuthority(issuerFirm, msg.sender) returns (bool success) { + function setAccountSpendingLimit(address account, uint limit, string memory issuerFirm, address sender) public onlyAuthority(issuerFirm, sender) returns (bool success) { require( lib.setAccountSpendingLimit(account, limit), "Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered" @@ -189,7 +198,7 @@ contract TokenIOCurrencyAuthority is Ownable { * @param issuerFirm Firm setting the foreign currency exchange * @return { "success": "Returns true if successfully called from another contract"} */ - function setFxBpsRate(string currency, uint bpsRate, string issuerFirm) public onlyAuthority(issuerFirm, msg.sender) returns (bool success) { + function setFxBpsRate(string memory currency, uint bpsRate, string memory issuerFirm, address sender) public onlyAuthority(issuerFirm, sender) returns (bool success) { require( lib.setFxUSDBPSRate(currency, bpsRate), "Error: Unable to set FX USD basis points rate. Please ensure issuerFirm is authorized" @@ -203,7 +212,7 @@ contract TokenIOCurrencyAuthority is Ownable { * @param fxAmount Amount of foreign currency to exchange into USD * @return {"usdAmount" : "Returns the foreign currency amount in USD"} */ - function getFxUSDAmount(string currency, uint fxAmount) public view returns (uint usdAmount) { + function getFxUSDAmount(string memory currency, uint fxAmount) public view returns (uint usdAmount) { return lib.getFxUSDAmount(currency, fxAmount); } @@ -214,7 +223,7 @@ contract TokenIOCurrencyAuthority is Ownable { * @param issuerFirm Name of the issuer firm with authority on account holder; * @return { "success": "Returns true if successfully called from another contract"} */ - function approveForwardedAccount(address originalAccount, address updatedAccount, string issuerFirm) public onlyAuthority(issuerFirm, msg.sender) returns (bool success) { + function approveForwardedAccount(address originalAccount, address updatedAccount, string memory issuerFirm, address sender) public onlyAuthority(issuerFirm, sender) returns (bool success) { // @notice updatesa forwarded account // @dev !!! mutates storage state require( @@ -231,7 +240,7 @@ contract TokenIOCurrencyAuthority is Ownable { * @param issuerFirm Name of the issuer firm with authority on account holder; * @return { "success": "Returns true if successfully called from another contract"} */ - function deposit(string currency, address account, uint amount, string issuerFirm) public onlyAuthority(issuerFirm, msg.sender) returns (bool success) { + function deposit(string memory currency, address account, uint amount, string memory issuerFirm, address sender) public onlyAuthority(issuerFirm, sender) returns (bool success) { require( lib.verifyAccount(account), "Error: Account is not verified!" @@ -253,7 +262,7 @@ contract TokenIOCurrencyAuthority is Ownable { * @param issuerFirm Name of the issuer firm with authority on account holder * @return { "success": "Returns true if successfully called from another contract"} */ - function withdraw(string currency, address account, uint amount, string issuerFirm) public onlyAuthority(issuerFirm, msg.sender) returns (bool success) { + function withdraw(string memory currency, address account, uint amount, string memory issuerFirm, address sender) public onlyAuthority(issuerFirm, sender) returns (bool success) { require( lib.verifyAccount(account), "Error: Account is not verified!" @@ -271,7 +280,7 @@ contract TokenIOCurrencyAuthority is Ownable { * @notice Ensure only authorized currency firms and authorities can modify protected methods * @dev authority must be registered to an authorized firm to use protected methods */ - modifier onlyAuthority(string firmName, address authority) { + modifier onlyAuthority(string memory firmName, address authority) { // @notice throws if authority account is not registred to the given firm require( lib.isRegisteredToFirm(firmName, authority), diff --git a/contracts/TokenIOCurrencyAuthorityProxy.sol b/contracts/TokenIOCurrencyAuthorityProxy.sol new file mode 100644 index 0000000..1d61544 --- /dev/null +++ b/contracts/TokenIOCurrencyAuthorityProxy.sol @@ -0,0 +1,140 @@ +pragma solidity 0.5.2; + +import "./Ownable.sol"; + +interface TokenIOCurrencyAuthorityI { + function getTokenBalance(string calldata currency, address account) external view returns (uint balance); + + function getTokenSupply(string calldata currency) external view returns (uint supply); + + function freezeAccount(address account, bool isAllowed, string calldata issuerFirm, address sender) external returns (bool success); + + function approveKYC(address account, bool isApproved, uint limit, string calldata issuerFirm, address sender) external returns (bool success); + + function approveKYCAndDeposit(string calldata currency, address account, uint amount, uint limit, string calldata issuerFirm, address sender) external returns (bool success); + + function setAccountSpendingLimit(address account, uint limit, string calldata issuerFirm, address sender) external returns (bool success); + + function getAccountSpendingRemaining(address account) external view returns (uint spendingRemaining); + + function getAccountSpendingLimit(address account) external view returns (uint spendingLimit); + + function setFxBpsRate(string calldata currency, uint bpsRate, string calldata issuerFirm, address sender) external returns (bool success); + + function getFxUSDAmount(string calldata currency, uint fxAmount) external view returns (uint usdAmount); + + function approveForwardedAccount(address originalAccount, address updatedAccount, string calldata issuerFirm, address sender) external returns (bool success); + + function deposit(string calldata currency, address account, uint amount, string calldata issuerFirm, address sender) external returns (bool success); + + function withdraw(string calldata currency, address account, uint amount, string calldata issuerFirm, address sender) external returns (bool success); +} + +contract TokenIOCurrencyAuthorityProxy is Ownable { + + address implementationInstance; + + constructor(address _tokenIOCurrencyAuthorityImpl) public { + implementationInstance = _tokenIOCurrencyAuthorityImpl; + } + + function upgradeTo(address _newImplementationInstance) external { + implementationInstance = _newImplementationInstance; + } + + function staticCall(bytes calldata payload) external view returns(bytes memory) { + (bool res, bytes memory result) = implementationInstance.staticcall(payload); + return result; + } + + function call(bytes calldata payload) external { + (bool res, bytes memory result) = implementationInstance.call(payload); + require(res); + } + + function getTokenBalance(string memory currency, address account) public view returns (uint balance) { + return TokenIOCurrencyAuthorityI(implementationInstance).getTokenBalance(currency, account); + } + + function getTokenSupply(string memory currency) public view returns (uint supply) { + return TokenIOCurrencyAuthorityI(implementationInstance).getTokenSupply(currency); + } + + function freezeAccount(address account, bool isAllowed, string memory issuerFirm) public returns (bool success) { + require( + TokenIOCurrencyAuthorityI(implementationInstance).freezeAccount(account, isAllowed, issuerFirm, msg.sender), + "Unable to execute freezeAccount" + ); + return true; + } + + function approveKYC(address account, bool isApproved, uint limit, string memory issuerFirm) public returns (bool success) { + require( + TokenIOCurrencyAuthorityI(implementationInstance).approveKYC(account, isApproved, limit, issuerFirm, msg.sender), + "Unable to execute approveKYC" + ); + + return true; + } + + function approveKYCAndDeposit(string memory currency, address account, uint amount, uint limit, string memory issuerFirm) public returns (bool success) { + require( + TokenIOCurrencyAuthorityI(implementationInstance).approveKYCAndDeposit(currency, account, amount, limit, issuerFirm, msg.sender), + "Unable to execute approveKYCAndDeposit" + ); + + return true; + } + + function setAccountSpendingLimit(address account, uint limit, string memory issuerFirm) public returns (bool success) { + require( + TokenIOCurrencyAuthorityI(implementationInstance).setAccountSpendingLimit(account, limit, issuerFirm, msg.sender), + "Unable to execute setAccountSpendingLimit" + ); + return true; + } + + function getAccountSpendingRemaining(address account) public view returns (uint spendingRemaining) { + return TokenIOCurrencyAuthorityI(implementationInstance).getAccountSpendingRemaining(account); + } + + function getAccountSpendingLimit(address account) public view returns (uint spendingLimit) { + return TokenIOCurrencyAuthorityI(implementationInstance).getAccountSpendingLimit(account); + } + + function setFxBpsRate(string memory currency, uint bpsRate, string memory issuerFirm) public returns (bool success) { + require( + TokenIOCurrencyAuthorityI(implementationInstance).setFxBpsRate(currency, bpsRate, issuerFirm, msg.sender), + "Unable to execute setFxBpsRate" + ); + return true; + } + + function getFxUSDAmount(string memory currency, uint fxAmount) public view returns (uint usdAmount) { + return TokenIOCurrencyAuthorityI(implementationInstance).getFxUSDAmount(currency, fxAmount); + } + + function approveForwardedAccount(address originalAccount, address updatedAccount, string memory issuerFirm) public returns (bool success) { + require( + TokenIOCurrencyAuthorityI(implementationInstance).approveForwardedAccount(originalAccount, updatedAccount, issuerFirm, msg.sender), + "Unable to execute approveForwardedAccount" + ); + return true; + } + + function deposit(string memory currency, address account, uint amount, string memory issuerFirm) public returns (bool success) { + require( + TokenIOCurrencyAuthorityI(implementationInstance).deposit(currency, account, amount, issuerFirm, msg.sender), + "Unable to execute deposit" + ); + return true; + } + + function withdraw(string memory currency, address account, uint amount, string memory issuerFirm) public returns (bool success) { + require( + TokenIOCurrencyAuthorityI(implementationInstance).withdraw(currency, account, amount, issuerFirm, msg.sender), + "Unable to execute withdraw" + ); + return true; + } +} diff --git a/contracts/TokenIOERC20.sol b/contracts/TokenIOERC20.sol index 0675475..473f29a 100644 --- a/contracts/TokenIOERC20.sol +++ b/contracts/TokenIOERC20.sol @@ -1,4 +1,4 @@ -pragma solidity 0.4.24; +pragma solidity 0.5.2; import "./Ownable.sol"; import "./TokenIOStorage.sol"; @@ -35,6 +35,8 @@ contract TokenIOERC20 is Ownable { using TokenIOLib for TokenIOLib.Data; TokenIOLib.Data lib; + address public proxyInstance; + /** * @notice Constructor method for ERC20 contract * @param _storageContract address of TokenIOStorage contract @@ -50,6 +52,12 @@ contract TokenIOERC20 is Ownable { owner[msg.sender] = true; } + function initProxy(address _proxy) public onlyOwner { + require(_proxy != address(0)); + + proxyInstance = _proxy; + lib.proxyInstance = _proxy; + } /** @notice Sets erc20 globals and fee paramters @@ -62,28 +70,16 @@ contract TokenIOERC20 is Ownable { @return { "success" : "Returns true if successfully called from another contract"} */ function setParams( - string _name, - string _symbol, - string _tla, - string _version, + string memory _name, + string memory _symbol, + string memory _tla, + string memory _version, uint _decimals, address _feeContract, uint _fxUSDBPSRate ) onlyOwner public returns (bool success) { - require(lib.setTokenName(_name), - "Error: Unable to set token name. Please check arguments."); - require(lib.setTokenSymbol(_symbol), - "Error: Unable to set token symbol. Please check arguments."); - require(lib.setTokenTLA(_tla), - "Error: Unable to set token TLA. Please check arguments."); - require(lib.setTokenVersion(_version), - "Error: Unable to set token version. Please check arguments."); - require(lib.setTokenDecimals(_symbol, _decimals), - "Error: Unable to set token decimals. Please check arguments."); - require(lib.setFeeContract(_feeContract), - "Error: Unable to set fee contract. Please check arguments."); - require(lib.setFxUSDBPSRate(_symbol, _fxUSDBPSRate), - "Error: Unable to set fx USD basis points rate. Please check arguments."); + require(lib.setTokenParams(_name, _symbol, _tla, _version, _decimals, _feeContract, _fxUSDBPSRate), + "Error: Unable to set token params. Please check arguments."); return true; } @@ -91,32 +87,32 @@ contract TokenIOERC20 is Ownable { * @notice Gets name of token * @return {"_name" : "Returns name of token"} */ - function name() public view returns (string _name) { - return lib.getTokenName(address(this)); + function name() public view returns (string memory _name) { + return lib.getTokenName(proxyInstance); } /** * @notice Gets symbol of token * @return {"_symbol" : "Returns symbol of token"} */ - function symbol() public view returns (string _symbol) { - return lib.getTokenSymbol(address(this)); + function symbol() public view returns (string memory _symbol) { + return lib.getTokenSymbol(proxyInstance); } /** * @notice Gets three-letter-abbreviation of token * @return {"_tla" : "Returns three-letter-abbreviation of token"} */ - function tla() public view returns (string _tla) { - return lib.getTokenTLA(address(this)); + function tla() public view returns (string memory _tla) { + return lib.getTokenTLA(proxyInstance); } /** * @notice Gets version of token * @return {"_version" : "Returns version of token"} */ - function version() public view returns (string _version) { - return lib.getTokenVersion(address(this)); + function version() public view returns (string memory _version) { + return lib.getTokenVersion(proxyInstance); } /** @@ -124,7 +120,7 @@ contract TokenIOERC20 is Ownable { * @return {"_decimals" : "Returns number of decimals"} */ function decimals() public view returns (uint _decimals) { - return lib.getTokenDecimals(lib.getTokenSymbol(address(this))); + return lib.getTokenDecimals(lib.getTokenSymbol(proxyInstance)); } /** @@ -132,7 +128,7 @@ contract TokenIOERC20 is Ownable { * @return {"supply" : "Returns current total supply of token"} */ function totalSupply() public view returns (uint supply) { - return lib.getTokenSupply(lib.getTokenSymbol(address(this))); + return lib.getTokenSupply(lib.getTokenSymbol(proxyInstance)); } /** @@ -142,7 +138,7 @@ contract TokenIOERC20 is Ownable { * @return {"amount" : "Returns allowance of given account and spender"} */ function allowance(address account, address spender) public view returns (uint amount) { - return lib.getTokenAllowance(lib.getTokenSymbol(address(this)), account, spender); + return lib.getTokenAllowance(lib.getTokenSymbol(proxyInstance), account, spender); } /** @@ -151,7 +147,7 @@ contract TokenIOERC20 is Ownable { * @return {"balance" : "Returns balance amount"} */ function balanceOf(address account) public view returns (uint balance) { - return lib.getTokenBalance(lib.getTokenSymbol(address(this)), account); + return lib.getTokenBalance(lib.getTokenSymbol(proxyInstance), account); } /** @@ -164,16 +160,10 @@ contract TokenIOERC20 is Ownable { "contract":"Address of fee contract" } */ - function getFeeParams() public view returns (uint bps, uint min, uint max, uint flat, bytes feeMsg, address feeAccount) { - address feeContract = lib.getFeeContract(address(this)); - return ( - lib.getFeeBPS(feeContract), - lib.getFeeMin(feeContract), - lib.getFeeMax(feeContract), - lib.getFeeFlat(feeContract), - lib.getFeeMsg(feeContract), - feeContract - ); + function getFeeParams() public view returns (uint bps, uint min, uint max, uint flat, bytes memory feeMsg, address feeAccount) { + feeAccount = lib.getFeeContract(proxyInstance); + (max, min, bps, flat) = lib.getFees(feeAccount); + feeMsg = lib.getFeeMsg(feeAccount); } /** @@ -182,7 +172,7 @@ contract TokenIOERC20 is Ownable { * @return {"fees": "Returns the calculated transaction fees based on the fee contract parameters"} */ function calculateFees(uint amount) public view returns (uint fees) { - return lib.calculateFees(lib.getFeeContract(address(this)), amount); + return lib.calculateFees(lib.getFeeContract(proxyInstance), amount); } /** @@ -191,11 +181,11 @@ contract TokenIOERC20 is Ownable { * @param amount Transfer amount * @return {"success" : "Returns true if transfer succeeds"} */ - function transfer(address to, uint amount) public notDeprecated returns (bool success) { + function transfer(address to, uint amount, address sender) public notDeprecated returns (bool success) { /// @notice send transfer through library /// @dev !!! mutates storage state require( - lib.transfer(lib.getTokenSymbol(address(this)), to, amount, "0x0"), + lib.transfer(lib.getTokenSymbol(proxyInstance), to, amount, sender, "0x0"), "Error: Unable to transfer funds. Please check your parameters." ); return true; @@ -208,11 +198,11 @@ contract TokenIOERC20 is Ownable { * @param amount Transfer amount * @return {"success" : "Returns true if transferFrom succeeds"} */ - function transferFrom(address from, address to, uint amount) public notDeprecated returns (bool success) { + function transferFrom(address from, address to, uint amount, address sender) public notDeprecated returns (bool success) { /// @notice sends transferFrom through library /// @dev !!! mutates storage state require( - lib.transferFrom(lib.getTokenSymbol(address(this)), from, to, amount, "0x0"), + lib.transferFrom(from, to, amount, "0x0", sender), "Error: Unable to transfer funds. Please check your parameters and ensure the spender has the approved amount of funds to transfer." ); return true; @@ -224,11 +214,11 @@ contract TokenIOERC20 is Ownable { * @param amount Allowance amount * @return {"success" : "Returns true if approve succeeds"} */ - function approve(address spender, uint amount) public notDeprecated returns (bool success) { + function approve(address spender, uint amount, address sender) public notDeprecated returns (bool success) { /// @notice sends approve through library /// @dev !!! mtuates storage states require( - lib.approveAllowance(spender, amount), + lib.approveAllowance(spender, amount, sender), "Error: Unable to approve allowance for spender. Please ensure spender is not null and does not have a frozen balance." ); return true; @@ -239,14 +229,14 @@ contract TokenIOERC20 is Ownable { * @return {"deprecated" : "Returns true if deprecated, false otherwise"} */ function deprecateInterface() public onlyOwner returns (bool deprecated) { - require(lib.setDeprecatedContract(address(this)), + require(lib.setDeprecatedContract(proxyInstance), "Error: Unable to deprecate contract!"); return true; } modifier notDeprecated() { /// @notice throws if contract is deprecated - require(!lib.isContractDeprecated(address(this)), + require(!lib.isContractDeprecated(proxyInstance), "Error: Contract has been deprecated, cannot perform operation!"); _; } diff --git a/contracts/TokenIOERC20FeesApply.sol b/contracts/TokenIOERC20FeesApply.sol new file mode 100644 index 0000000..4fe7d47 --- /dev/null +++ b/contracts/TokenIOERC20FeesApply.sol @@ -0,0 +1,276 @@ +pragma solidity 0.5.2; + +import "./Ownable.sol"; +import "./TokenIOStorage.sol"; +import "./TokenIOLib.sol"; +import "./SafeMath.sol"; + + +/* +COPYRIGHT 2018 Token, Inc. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +@title ERC20 Compliant Smart Contract for Token, Inc. + +@author Ryan Tate , Sean Pollock + +@notice Contract uses generalized storage contract, `TokenIOStorage`, for +upgradeability of interface contract. + +@dev In the event that the main contract becomes deprecated, the upgraded contract +will be set as the owner of this contract, and use this contract's storage to +maintain data consistency between contract. +*/ + + + +contract TokenIOERC20FeesApply is Ownable { + + using SafeMath for uint; + + //// @dev Set reference to TokenIOLib interface which proxies to TokenIOStorage + using TokenIOLib for TokenIOLib.Data; + TokenIOLib.Data lib; + + address public proxyInstance; + + event Transfer(address indexed from, address indexed to, uint256 amount); + + /** + * @notice Constructor method for ERC20 contract + * @param _storageContract address of TokenIOStorage contract + */ + constructor(address _storageContract) public { + //// @dev Set the storage contract for the interface + //// @dev This contract will be unable to use the storage constract until + //// @dev contract address is authorized with the storage contract + //// @dev Once authorized, Use the `setParams` method to set storage values + lib.Storage = TokenIOStorage(_storageContract); + + //// @dev set owner to contract initiator + owner[msg.sender] = true; + } + + function initProxy(address _proxy) public onlyOwner { + require(_proxy != address(0)); + + proxyInstance = _proxy; + lib.proxyInstance = _proxy; + } + + + + /** + @notice Sets erc20 globals and fee paramters + @param _name Full token name 'USD by token.io' + @param _symbol Symbol name 'USDx' + @param _tla Three letter abbreviation 'USD' + @param _version Release version 'v0.0.1' + @param _decimals Decimal precision + @param _feeContract Address of fee contract + @return { "success" : "Returns true if successfully called from another contract"} + */ + function setParams( + string memory _name, + string memory _symbol, + string memory _tla, + string memory _version, + uint _decimals, + address _feeContract, + uint _fxUSDBPSRate + ) onlyOwner public returns(bool success) { + require(lib.setTokenParams(_name, _symbol, _tla, _version, _decimals, _feeContract, _fxUSDBPSRate), + "Error: Unable to set token params. Please check arguments."); + return true; + } + + /** + * @notice Gets name of token + * @return {"_name" : "Returns name of token"} + */ + function name() public view returns (string memory _name) { + return lib.getTokenName(proxyInstance); + } + + /** + * @notice Gets symbol of token + * @return {"_symbol" : "Returns symbol of token"} + */ + function symbol() public view returns (string memory _symbol) { + return lib.getTokenSymbol(proxyInstance); + } + + /** + * @notice Gets three-letter-abbreviation of token + * @return {"_tla" : "Returns three-letter-abbreviation of token"} + */ + function tla() public view returns (string memory _tla) { + return lib.getTokenTLA(proxyInstance); + } + + /** + * @notice Gets version of token + * @return {"_version" : "Returns version of token"} + */ + function version() public view returns (string memory _version) { + return lib.getTokenVersion(proxyInstance); + } + + /** + * @notice Gets decimals of token + * @return {"_decimals" : "Returns number of decimals"} + */ + function decimals() public view returns (uint _decimals) { + return lib.getTokenDecimals(lib.getTokenSymbol(proxyInstance)); + } + + /** + * @notice Gets total supply of token + * @return {"supply" : "Returns current total supply of token"} + */ + function totalSupply() public view returns (uint supply) { + return lib.getTokenSupply(lib.getTokenSymbol(proxyInstance)); + } + + /** + * @notice Gets allowance that spender has with approver + * @param account Address of approver + * @param spender Address of spender + * @return {"amount" : "Returns allowance of given account and spender"} + */ + function allowance(address account, address spender) public view returns (uint amount) { + return lib.getTokenAllowance(lib.getTokenSymbol(proxyInstance), account, spender); + } + + /** + * @notice Gets balance of account + * @param account Address for balance lookup + * @return {"balance" : "Returns balance amount"} + */ + function balanceOf(address account) public view returns (uint balance) { + return lib.getTokenBalance(lib.getTokenSymbol(proxyInstance), account); + } + + /** + * @notice Gets fee parameters + * @return { + "bps":"Fee amount as a mesuare of basis points", + "min":"Minimum fee amount", + "max":"Maximum fee amount", + "flat":"Flat fee amount", + "contract":"Address of fee contract" + } + */ + function getFeeParams() public view returns (uint bps, uint min, uint max, uint flat, bytes memory feeMsg, address feeAccount) { + feeAccount = lib.getFeeContract(proxyInstance); + (max, min, bps, flat) = lib.getFees(feeAccount); + feeMsg = lib.getFeeMsg(feeAccount); + } + + /** + * @notice Calculates fee of a given transfer amount + * @param amount Amount to calculcate fee value + * @return {"fees": "Returns the calculated transaction fees based on the fee contract parameters"} + */ + function calculateFees(uint amount) external view returns (uint fees) { + return calculateFees(lib.getFeeContract(proxyInstance), amount); + } + + function calculateFees(address feeContract, uint amount) internal view returns (uint fees) { + return lib.calculateFees(feeContract, amount); + } + + /** + * @notice transfers 'amount' from msg.sender to a receiving account 'to' + * @param to Receiving address + * @param amount Transfer amount + * @return {"success" : "Returns true if transfer succeeds"} + */ + function transfer(address to, uint amount, address sender) public notDeprecated returns(bool success) { + address feeContract = lib.getFeeContract(proxyInstance); + (string memory currency, address[3] memory addresses) = lib.getTransferDetails(proxyInstance, [sender, to, feeContract]); + uint fees = calculateFees(feeContract, amount); + + uint[3] memory balances = [lib.Storage.getBalance(addresses[0], currency).sub(amount.add(fees)), lib.Storage.getBalance(addresses[1], currency).add(amount), lib.Storage.getBalance(addresses[2], currency).add(fees)]; + + require( + lib.Storage.setBalances(addresses, currency, balances), + "Error: Unable to set storage value. Please ensure contract has allowed permissions with storage contract." + ); + + + emit Transfer(sender, to, amount); + + return true; + } + + /** + * @notice spender transfers from approvers account to the reciving account + * @param from Approver's address + * @param to Receiving address + * @param amount Transfer amount + * @return {"success" : "Returns true if transferFrom succeeds"} + */ + function transferFrom(address from, address to, uint amount, address sender) public notDeprecated returns(bool success) { + address feeContract = lib.getFeeContract(proxyInstance); + (string memory currency, address[3] memory addresses) = lib.getTransferDetails(proxyInstance, [from, to, feeContract]); + uint fees = calculateFees(feeContract, amount); + + uint[3] memory balances = [lib.Storage.getBalance(addresses[0], currency).sub(amount.add(fees)), lib.Storage.getBalance(addresses[1], currency).add(amount), lib.Storage.getBalance(addresses[2], currency).add(fees)]; + + require( + lib.Storage.setBalances(addresses, currency, balances), + "Error: Unable to set storage value. Please ensure contract has allowed permissions with storage contract." + ); + + /// @notice This transaction will fail if the msg.sender does not have an approved allowance. + require( + lib.updateAllowance(lib.getTokenSymbol(proxyInstance), from, amount.add(fees), sender), + "Error: Unable to update allowance for spender." + ); + + emit Transfer(from, to, amount); + + return true; + } + + /** + * @notice approves spender a given amount + * @param spender Spender's address + * @param amount Allowance amount + * @return {"success" : "Returns true if approve succeeds"} + */ + function approve(address spender, uint amount, address sender) public notDeprecated returns (bool success) { + /// @notice sends approve through library + /// @dev !!! mtuates storage states + require( + lib.approveAllowance(spender, amount, sender), + "Error: Unable to approve allowance for spender. Please ensure spender is not null and does not have a frozen balance." + ); + return true; + } + + /** + * @notice gets currency status of contract + * @return {"deprecated" : "Returns true if deprecated, false otherwise"} + */ + function deprecateInterface() public onlyOwner returns (bool deprecated) { + require(lib.setDeprecatedContract(proxyInstance), + "Error: Unable to deprecate contract!"); + return true; + } + + modifier notDeprecated() { + /// @notice throws if contract is deprecated + require(!lib.isContractDeprecated(proxyInstance), + "Error: Contract has been deprecated, cannot perform operation!"); + _; + } + + } diff --git a/contracts/TokenIOERC20FeesApplyProxy.sol b/contracts/TokenIOERC20FeesApplyProxy.sol new file mode 100644 index 0000000..09a09c0 --- /dev/null +++ b/contracts/TokenIOERC20FeesApplyProxy.sol @@ -0,0 +1,137 @@ +pragma solidity 0.5.2; + +import "./Ownable.sol"; + +interface TokenIOERC20FeesApplyI { + function setParams(string calldata _name, string calldata _symbol, string calldata _tla, string calldata _version, uint _decimals, address _feeContract, uint _fxUSDBPSRate) external returns(bool success); + + function name() external view returns (string memory _name); + + function symbol() external view returns (string memory _symbol); + + function tla() external view returns (string memory _tla); + + function version() external view returns (string memory _version); + + function decimals() external view returns (uint _decimals); + + function totalSupply() external view returns (uint supply); + + function allowance(address account, address spender) external view returns (uint amount); + + function balanceOf(address account) external view returns (uint balance); + + function getFeeParams() external view returns (uint bps, uint min, uint max, uint flat, bytes memory feeMsg, address feeAccount); + + function calculateFees(uint amount) external view returns (uint fees); + + function transfer(address to, uint amount, address sender) external returns(bool success); + + function transferFrom(address from, address to, uint amount, address sender) external returns(bool success); + + function approve(address spender, uint amount, address sender) external returns (bool success); + + function deprecateInterface() external returns (bool deprecated); +} + +contract TokenIOERC20FeesApplyProxy is Ownable { + + address implementationInstance; + + constructor(address _tokenIOERC20FeesApplyImpl) public { + implementationInstance = _tokenIOERC20FeesApplyImpl; + } + + function upgradeTo(address _newImplementationInstance) onlyOwner external { + implementationInstance = _newImplementationInstance; + } + + function setParams( + string memory _name, + string memory _symbol, + string memory _tla, + string memory _version, + uint256 _decimals, + address _feeContract, + uint256 _fxUSDBPSRate + ) onlyOwner public returns(bool) { + require(TokenIOERC20FeesApplyI(implementationInstance).setParams(_name, _symbol, _tla, _version, _decimals, _feeContract, _fxUSDBPSRate), + "Unable to execute setParams"); + return true; + } + + function staticCall(bytes calldata payload) external view returns(bytes memory) { + (bool res, bytes memory result) = implementationInstance.staticcall(payload); + return result; + } + + function call(bytes calldata payload) external { + (bool res, bytes memory result) = implementationInstance.call(payload); + require(res); + } + + function transfer(address to, uint256 amount) external returns(bool) { + require(TokenIOERC20FeesApplyI(implementationInstance).transfer(to, amount, msg.sender), + "Unable to execute transfer"); + + return true; + } + + function transferFrom(address from, address to, uint256 amount) external returns(bool) { + require(TokenIOERC20FeesApplyI(implementationInstance).transferFrom(from, to, amount, msg.sender), + "Unable to execute transferFrom"); + + return true; + } + + function approve(address spender, uint256 amount) external returns (bool) { + require(TokenIOERC20FeesApplyI(implementationInstance).approve(spender, amount, msg.sender), + "Unable to execute approve"); + + return true; + } + + function name() external view returns (string memory) { + return TokenIOERC20FeesApplyI(implementationInstance).name(); + } + + function symbol() external view returns (string memory) { + return TokenIOERC20FeesApplyI(implementationInstance).symbol(); + } + + function tla() external view returns (string memory) { + return TokenIOERC20FeesApplyI(implementationInstance).tla(); + } + + function version() external view returns (string memory) { + return TokenIOERC20FeesApplyI(implementationInstance).version(); + } + + function decimals() external view returns (uint) { + return TokenIOERC20FeesApplyI(implementationInstance).decimals(); + } + + function totalSupply() external view returns (uint256) { + return TokenIOERC20FeesApplyI(implementationInstance).totalSupply(); + } + + function allowance(address account, address spender) external view returns (uint256) { + return TokenIOERC20FeesApplyI(implementationInstance).allowance(account, spender); + } + + function balanceOf(address account) external view returns (uint256) { + return TokenIOERC20FeesApplyI(implementationInstance).balanceOf(account); + } + + function calculateFees(uint amount) external view returns (uint256) { + return TokenIOERC20FeesApplyI(implementationInstance).calculateFees(amount); + } + + function deprecateInterface() external onlyOwner returns (bool) { + require(TokenIOERC20FeesApplyI(implementationInstance).deprecateInterface(), + "Unable to execute deprecateInterface"); + + return true; + } + +} diff --git a/contracts/TokenIOERC20Proxy.sol b/contracts/TokenIOERC20Proxy.sol new file mode 100644 index 0000000..8f7ae28 --- /dev/null +++ b/contracts/TokenIOERC20Proxy.sol @@ -0,0 +1,142 @@ +pragma solidity 0.5.2; + +import "./Ownable.sol"; + +interface TokenIOERC20I { + function setParams(string calldata _name, string calldata _symbol, string calldata _tla, string calldata _version, uint _decimals, address _feeContract, uint _fxUSDBPSRate) external returns(bool success); + + function name() external view returns (string memory _name); + + function symbol() external view returns (string memory _symbol); + + function tla() external view returns (string memory _tla); + + function version() external view returns (string memory _version); + + function decimals() external view returns (uint _decimals); + + function totalSupply() external view returns (uint supply); + + function allowance(address account, address spender) external view returns (uint amount); + + function balanceOf(address account) external view returns (uint balance); + + function getFeeParams() external view returns (uint bps, uint min, uint max, uint flat, bytes memory feeMsg, address feeAccount); + + function calculateFees(uint amount) external view returns (uint fees); + + function transfer(address to, uint amount, address sender) external returns(bool success); + + function transferFrom(address from, address to, uint amount, address sender) external returns(bool success); + + function approve(address spender, uint amount, address sender) external returns (bool success); + + function deprecateInterface() external returns (bool deprecated); +} + +contract TokenIOERC20Proxy is Ownable { + + address implementationInstance; + + constructor(address _tokenIOERC20Impl) public { + implementationInstance = _tokenIOERC20Impl; + } + + function upgradeTo(address _newImplementationInstance) onlyOwner external { + require(_newImplementationInstance != address(0)); + implementationInstance = _newImplementationInstance; + } + + function staticCall(bytes calldata payload) external view returns(bytes memory) { + (bool res, bytes memory result) = implementationInstance.staticcall(payload); + return result; + } + + function call(bytes calldata payload) external { + (bool res, bytes memory result) = implementationInstance.call(payload); + require(res); + } + + function setParams( + string memory _name, + string memory _symbol, + string memory _tla, + string memory _version, + uint256 _decimals, + address _feeContract, + uint256 _fxUSDBPSRate + ) onlyOwner public returns(bool) { + require(TokenIOERC20I(implementationInstance).setParams(_name, _symbol, _tla, _version, _decimals, _feeContract, _fxUSDBPSRate), + "Unable to execute setParams"); + return true; + } + + function transfer(address to, uint256 amount) external returns(bool) { + require(TokenIOERC20I(implementationInstance).transfer(to, amount, msg.sender), + "Unable to execute transfer"); + + return true; + } + + function transferFrom(address from, address to, uint256 amount) external returns(bool) { + require(TokenIOERC20I(implementationInstance).transferFrom(from, to, amount, msg.sender), + "Unable to execute transferFrom"); + + return true; + } + + function approve(address spender, uint256 amount) external returns (bool) { + require(TokenIOERC20I(implementationInstance).approve(spender, amount, msg.sender), + "Unable to execute approve"); + + return true; + } + + function name() external view returns (string memory) { + return TokenIOERC20I(implementationInstance).name(); + } + + function symbol() external view returns (string memory) { + return TokenIOERC20I(implementationInstance).symbol(); + } + + function tla() external view returns (string memory) { + return TokenIOERC20I(implementationInstance).tla(); + } + + function version() external view returns (string memory) { + return TokenIOERC20I(implementationInstance).version(); + } + + function decimals() external view returns (uint) { + return TokenIOERC20I(implementationInstance).decimals(); + } + + function totalSupply() external view returns (uint256) { + return TokenIOERC20I(implementationInstance).totalSupply(); + } + + function allowance(address account, address spender) external view returns (uint256) { + return TokenIOERC20I(implementationInstance).allowance(account, spender); + } + + function balanceOf(address account) external view returns (uint256) { + return TokenIOERC20I(implementationInstance).balanceOf(account); + } + + function getFeeParams() public view returns (uint bps, uint min, uint max, uint flat, bytes memory feeMsg, address feeAccount) { + return TokenIOERC20I(implementationInstance).getFeeParams(); + } + + function calculateFees(uint amount) external view returns (uint256) { + return TokenIOERC20I(implementationInstance).calculateFees(amount); + } + + function deprecateInterface() external onlyOwner returns (bool) { + require(TokenIOERC20I(implementationInstance).deprecateInterface(), + "Unable to execute deprecateInterface"); + + return true; + } + +} diff --git a/contracts/TokenIOERC20Unlimited.sol b/contracts/TokenIOERC20Unlimited.sol new file mode 100644 index 0000000..f7010b6 --- /dev/null +++ b/contracts/TokenIOERC20Unlimited.sol @@ -0,0 +1,232 @@ +pragma solidity 0.5.2; + +import "./Ownable.sol"; +import "./TokenIOStorage.sol"; +import "./TokenIOLib.sol"; + + + +/* +COPYRIGHT 2018 Token, Inc. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +@title ERC20 Compliant Smart Contract for Token, Inc. + +@author Ryan Tate , Sean Pollock + +@notice Contract uses generalized storage contract, `TokenIOStorage`, for +upgradeability of interface contract. + +@dev In the event that the main contract becomes deprecated, the upgraded contract +will be set as the owner of this contract, and use this contract's storage to +maintain data consistency between contract. +*/ + + + +contract TokenIOERC20Unlimited is Ownable { + //// @dev Set reference to TokenIOLib interface which proxies to TokenIOStorage + using TokenIOLib for TokenIOLib.Data; + TokenIOLib.Data lib; + + event Transfer(address indexed from, address indexed to, uint256 amount); + + address public proxyInstance; + + /** + * @notice Constructor method for ERC20 contract + * @param _storageContract address of TokenIOStorage contract + */ + constructor(address _storageContract) public { + //// @dev Set the storage contract for the interface + //// @dev This contract will be unable to use the storage constract until + //// @dev contract address is authorized with the storage contract + //// @dev Once authorized, Use the `setParams` method to set storage values + lib.Storage = TokenIOStorage(_storageContract); + + //// @dev set owner to contract initiator + owner[msg.sender] = true; + } + + function initProxy(address _proxy) public onlyOwner { + require(_proxy != address(0)); + + proxyInstance = _proxy; + lib.proxyInstance = _proxy; + } + + /** + @notice Sets erc20 globals and fee paramters + @param _name Full token name 'USD by token.io' + @param _symbol Symbol name 'USDx' + @param _tla Three letter abbreviation 'USD' + @param _version Release version 'v0.0.1' + @param _decimals Decimal precision + @param _feeContract Address of fee contract + @return { "success" : "Returns true if successfully called from another contract"} + */ + function setParams( + string memory _name, + string memory _symbol, + string memory _tla, + string memory _version, + uint _decimals, + address _feeContract, + uint _fxUSDBPSRate + ) onlyOwner public returns (bool success) { + require(lib.setTokenParams(_name, _symbol, _tla, _version, _decimals, _feeContract, _fxUSDBPSRate), + "Error: Unable to set token params. Please check arguments."); + return true; + } + + /** + * @notice Gets name of token + * @return {"_name" : "Returns name of token"} + */ + function name() public view returns (string memory _name) { + return lib.getTokenName(proxyInstance); + } + + /** + * @notice Gets symbol of token + * @return {"_symbol" : "Returns symbol of token"} + */ + function symbol() public view returns (string memory _symbol) { + return lib.getTokenSymbol(proxyInstance); + } + + /** + * @notice Gets three-letter-abbreviation of token + * @return {"_tla" : "Returns three-letter-abbreviation of token"} + */ + function tla() public view returns (string memory _tla) { + return lib.getTokenTLA(proxyInstance); + } + + /** + * @notice Gets version of token + * @return {"_version" : "Returns version of token"} + */ + function version() public view returns (string memory _version) { + return lib.getTokenVersion(proxyInstance); + } + + /** + * @notice Gets decimals of token + * @return {"_decimals" : "Returns number of decimals"} + */ + function decimals() public view returns (uint _decimals) { + return lib.getTokenDecimals(lib.getTokenSymbol(proxyInstance)); + } + + /** + * @notice Gets total supply of token + * @return {"supply" : "Returns current total supply of token"} + */ + function totalSupply() public view returns (uint supply) { + return lib.getTokenSupply(lib.getTokenSymbol(proxyInstance)); + } + + /** + * @notice Gets allowance that spender has with approver + * @param account Address of approver + * @param spender Address of spender + * @return {"amount" : "Returns allowance of given account and spender"} + */ + function allowance(address account, address spender) public view returns (uint amount) { + return lib.getTokenAllowance(lib.getTokenSymbol(proxyInstance), account, spender); + } + + /** + * @notice Gets balance of account + * @param account Address for balance lookup + * @return {"balance" : "Returns balance amount"} + */ + function balanceOf(address account) public view returns (uint balance) { + return lib.getTokenBalance(lib.getTokenSymbol(proxyInstance), account); + } + + /** + * @notice transfers 'amount' from msg.sender to a receiving account 'to' + * @param to Receiving address + * @param amount Transfer amount + * @return {"success" : "Returns true if transfer succeeds"} + */ + function transfer(address to, uint amount, address sender) public notDeprecated returns (bool success) { + /// @notice send transfer through library + /// @dev !!! mutates storage state + require( + lib.forceTransfer(lib.getTokenSymbol(proxyInstance), sender, to, amount, "0x0"), + "Error: Unable to transfer funds. Please check your parameters." + ); + + /// @dev Emit Log event + emit Transfer(sender, to, amount); + return true; + } + + /** + * @notice spender transfers from approvers account to the reciving account + * @param from Approver's address + * @param to Receiving address + * @param amount Transfer amount + * @return {"success" : "Returns true if transferFrom succeeds"} + */ + function transferFrom(address from, address to, uint amount, address sender) public notDeprecated returns (bool success) { + /// @notice sends transferFrom through library + /// @dev !!! mutates storage state + require( + lib.forceTransfer(lib.getTokenSymbol(proxyInstance), from, to, amount, "0x0"), + "Error: Unable to transfer funds. Please check your parameters and ensure the spender has the approved amount of funds to transfer." + ); + + /// @notice This transaction will fail if the msg.sender does not have an approved allowance. + require( + lib.updateAllowance(lib.getTokenSymbol(proxyInstance), from, amount, sender), + "Error: Unable to update allowance for spender." + ); + + emit Transfer(from, to, amount); + return true; + } + + /** + * @notice approves spender a given amount + * @param spender Spender's address + * @param amount Allowance amount + * @return {"success" : "Returns true if approve succeeds"} + */ + function approve(address spender, uint amount, address sender) public notDeprecated returns (bool success) { + /// @notice sends approve through library + /// @dev !!! mtuates storage states + require( + lib.approveAllowance(spender, amount, sender), + "Error: Unable to approve allowance for spender. Please ensure spender is not null and does not have a frozen balance." + ); + return true; + } + + /** + * @notice gets currency status of contract + * @return {"deprecated" : "Returns true if deprecated, false otherwise"} + */ + function deprecateInterface() public onlyOwner returns (bool deprecated) { + require(lib.setDeprecatedContract(proxyInstance), + "Error: Unable to deprecate contract!"); + return true; + } + + modifier notDeprecated() { + /// @notice throws if contract is deprecated + require(!lib.isContractDeprecated(proxyInstance), + "Error: Contract has been deprecated, cannot perform operation!"); + _; + } + + } diff --git a/contracts/TokenIOERC20UnlimitedProxy.sol b/contracts/TokenIOERC20UnlimitedProxy.sol new file mode 100644 index 0000000..52de322 --- /dev/null +++ b/contracts/TokenIOERC20UnlimitedProxy.sol @@ -0,0 +1,138 @@ +pragma solidity 0.5.2; + +import "./Ownable.sol"; + +interface TokenIOERC20UnlimitedI { + function setParams(string calldata _name, string calldata _symbol, string calldata _tla, string calldata _version, uint _decimals, address _feeContract, uint _fxUSDBPSRate) external returns(bool success); + + function name() external view returns (string memory _name); + + function symbol() external view returns (string memory _symbol); + + function tla() external view returns (string memory _tla); + + function version() external view returns (string memory _version); + + function decimals() external view returns (uint _decimals); + + function totalSupply() external view returns (uint supply); + + function allowance(address account, address spender) external view returns (uint amount); + + function balanceOf(address account) external view returns (uint balance); + + function getFeeParams() external view returns (uint bps, uint min, uint max, uint flat, bytes memory feeMsg, address feeAccount); + + function calculateFees(uint amount) external view returns (uint fees); + + function transfer(address to, uint amount, address sender) external returns(bool success); + + function transferFrom(address from, address to, uint amount, address sender) external returns(bool success); + + function approve(address spender, uint amount, address sender) external returns (bool success); + + function deprecateInterface() external returns (bool deprecated); +} + +contract TokenIOERC20UnlimitedProxy is Ownable { + + address implementationInstance; + + constructor(address _tokenIOERC20UnlimitedImpl) public { + implementationInstance = _tokenIOERC20UnlimitedImpl; + } + + function upgradeTokenImplamintation(address _newImplementationInstance) onlyOwner external { + require(_newImplementationInstance != address(0)); + implementationInstance = _newImplementationInstance; + } + + function staticCall(bytes calldata payload) external view returns(bytes memory) { + (bool res, bytes memory result) = implementationInstance.staticcall(payload); + return result; + } + + function call(bytes calldata payload) external { + (bool res, bytes memory result) = implementationInstance.call(payload); + require(res); + } + + function setParams( + string memory _name, + string memory _symbol, + string memory _tla, + string memory _version, + uint256 _decimals, + address _feeContract, + uint256 _fxUSDBPSRate + ) onlyOwner public returns(bool) { + require(TokenIOERC20UnlimitedI(implementationInstance).setParams(_name, _symbol, _tla, _version, _decimals, _feeContract, _fxUSDBPSRate), + "Unable to execute setParams"); + return true; + } + + function transfer(address to, uint256 amount) external returns(bool) { + require(TokenIOERC20UnlimitedI(implementationInstance).transfer(to, amount, msg.sender), + "Unable to execute transfer"); + + return true; + } + + function transferFrom(address from, address to, uint256 amount) external returns(bool) { + require(TokenIOERC20UnlimitedI(implementationInstance).transferFrom(from, to, amount, msg.sender), + "Unable to execute transferFrom"); + + return true; + } + + function approve(address spender, uint256 amount) external returns (bool) { + require(TokenIOERC20UnlimitedI(implementationInstance).approve(spender, amount, msg.sender), + "Unable to execute approve"); + + return true; + } + + function name() external view returns (string memory) { + return TokenIOERC20UnlimitedI(implementationInstance).name(); + } + + function symbol() external view returns (string memory) { + return TokenIOERC20UnlimitedI(implementationInstance).symbol(); + } + + function tla() external view returns (string memory) { + return TokenIOERC20UnlimitedI(implementationInstance).tla(); + } + + function version() external view returns (string memory) { + return TokenIOERC20UnlimitedI(implementationInstance).version(); + } + + function decimals() external view returns (uint) { + return TokenIOERC20UnlimitedI(implementationInstance).decimals(); + } + + function totalSupply() external view returns (uint256) { + return TokenIOERC20UnlimitedI(implementationInstance).totalSupply(); + } + + function allowance(address account, address spender) external view returns (uint256) { + return TokenIOERC20UnlimitedI(implementationInstance).allowance(account, spender); + } + + function balanceOf(address account) external view returns (uint256) { + return TokenIOERC20UnlimitedI(implementationInstance).balanceOf(account); + } + + function calculateFees(uint amount) external view returns (uint256) { + return TokenIOERC20UnlimitedI(implementationInstance).calculateFees(amount); + } + + function deprecateInterface() external onlyOwner returns (bool) { + require(TokenIOERC20UnlimitedI(implementationInstance).deprecateInterface(), + "Unable to execute deprecateInterface"); + + return true; + } + +} diff --git a/contracts/TokenIOFX.sol b/contracts/TokenIOFX.sol index 77fadd3..f627ccb 100644 --- a/contracts/TokenIOFX.sol +++ b/contracts/TokenIOFX.sol @@ -1,4 +1,4 @@ -pragma solidity 0.4.24; +pragma solidity 0.5.2; import "./Ownable.sol"; import "./TokenIOLib.sol"; @@ -35,7 +35,8 @@ contract TokenIOFX is Ownable { using TokenIOLib for TokenIOLib.Data; TokenIOLib.Data lib; - + address public proxyInstance; + /** * @notice Constructor method for TokenIOFX contract * @param _storageContract Address of TokenIOStorage contract @@ -51,6 +52,12 @@ contract TokenIOFX is Ownable { owner[msg.sender] = true; } + function initProxy(address _proxy) public onlyOwner { + require(_proxy != address(0)); + + proxyInstance = _proxy; + lib.proxyInstance = _proxy; + } /** * @notice Accepts a signed fx request to swap currency pairs at a given amount; @@ -69,17 +76,18 @@ contract TokenIOFX is Ownable { */ function swap( address requester, - string symbolA, - string symbolB, + string memory symbolA, + string memory symbolB, uint valueA, uint valueB, uint8 sigV, bytes32 sigR, bytes32 sigS, - uint expiration + uint expiration, + address sender ) public returns (bool success) { require( - lib.execSwap(requester, symbolA, symbolB, valueA, valueB, sigV, sigR, sigS, expiration), + lib.execSwap(requester, symbolA, symbolB, valueA, valueB, sigV, sigR, sigS, expiration, sender), "Error: Unable to perform atomic currency swap. Please check parameters." ); return true; diff --git a/contracts/TokenIOFXProxy.sol b/contracts/TokenIOFXProxy.sol new file mode 100644 index 0000000..62d2e01 --- /dev/null +++ b/contracts/TokenIOFXProxy.sol @@ -0,0 +1,53 @@ +pragma solidity 0.5.2; + +import "./Ownable.sol"; +import "./TokenIOLib.sol"; +import "./TokenIOStorage.sol"; + + +interface TokenIOFXProxyI { + function swap(address requester, string calldata symbolA, string calldata symbolB, uint valueA, uint valueB, uint8 sigV, bytes32 sigR, bytes32 sigS, uint expiration, address sender) external returns (bool success); +} + +contract TokenIOFXProxy is Ownable { + + address implementationInstance; + + constructor(address _tokenIOFx) public { + implementationInstance = _tokenIOFx; + } + + function upgradeTo(address _newImplementationInstance) onlyOwner external { + require(_newImplementationInstance != address(0)); + implementationInstance = _newImplementationInstance; + } + + function staticCall(bytes calldata payload) external view returns(bytes memory) { + (bool res, bytes memory result) = implementationInstance.staticcall(payload); + return result; + } + + function call(bytes calldata payload) external { + (bool res, bytes memory result) = implementationInstance.call(payload); + require(res); + } + + function swap( + address requester, + string memory symbolA, + string memory symbolB, + uint valueA, + uint valueB, + uint8 sigV, + bytes32 sigR, + bytes32 sigS, + uint expiration + ) public returns (bool success) { + require( + TokenIOFXProxyI(implementationInstance).swap(requester, symbolA, symbolB, valueA, valueB, sigV, sigR, sigS, expiration, msg.sender), + "Error: Unable to perform atomic currency swap. Please check parameters." + ); + return true; + } + +} diff --git a/contracts/TokenIOFeeContract.sol b/contracts/TokenIOFeeContract.sol index 6602e86..df0149c 100644 --- a/contracts/TokenIOFeeContract.sol +++ b/contracts/TokenIOFeeContract.sol @@ -1,4 +1,4 @@ -pragma solidity 0.4.24; +pragma solidity 0.5.2; import "./Ownable.sol"; import "./TokenIOStorage.sol"; @@ -36,6 +36,7 @@ contract TokenIOFeeContract is Ownable { using TokenIOLib for TokenIOLib.Data; TokenIOLib.Data lib; + address public proxyInstance; /** * @notice Constructor method for ERC20 contract @@ -52,6 +53,13 @@ contract TokenIOFeeContract is Ownable { owner[msg.sender] = true; } + function initProxy(address _proxy) public onlyOwner { + require(_proxy != address(0)); + + proxyInstance = _proxy; + lib.proxyInstance = _proxy; + } + /** * @notice Set Fee Parameters for Fee Contract * @dev The min, max, flat transaction fees should be relative to decimal precision @@ -61,11 +69,8 @@ contract TokenIOFeeContract is Ownable { * @param feeFlat Flat transaction fee * returns {"success" : "Returns true if successfully called from another contract"} */ - function setFeeParams(uint feeBps, uint feeMin, uint feeMax, uint feeFlat, bytes feeMsg) public onlyOwner returns (bool success) { - require(lib.setFeeBPS(feeBps), "Error: Unable to set fee contract basis points."); - require(lib.setFeeMin(feeMin), "Error: Unable to set fee contract minimum fee."); - require(lib.setFeeMax(feeMax), "Error: Unable to set fee contract maximum fee."); - require(lib.setFeeFlat(feeFlat), "Error: Unable to set fee contract flat fee."); + function setFeeParams(uint feeBps, uint feeMin, uint feeMax, uint feeFlat, bytes memory feeMsg) public onlyOwner returns (bool success) { + require(lib.setFees(proxyInstance, feeMax, feeMin, feeBps, feeFlat), "Error: Unable to set fee contract settings"); require(lib.setFeeMsg(feeMsg), "Error: Unable to set fee contract default message."); return true; } @@ -80,15 +85,11 @@ contract TokenIOFeeContract is Ownable { "feeContract": "Address of this contract" } */ - function getFeeParams() public view returns (uint bps, uint min, uint max, uint flat, bytes feeMsg, address feeContract) { - return ( - lib.getFeeBPS(address(this)), - lib.getFeeMin(address(this)), - lib.getFeeMax(address(this)), - lib.getFeeFlat(address(this)), - lib.getFeeMsg(address(this)), - address(this) - ); + function getFeeParams() public view returns (uint bps, uint min, uint max, uint flat, bytes memory feeMsg, address feeContract) { + (max, min, bps, flat) = lib.getFees(proxyInstance); + feeMsg = lib.getFeeMsg(proxyInstance); + feeContract = proxyInstance; + return (max, min, bps, flat, feeMsg, feeContract); } /** @@ -96,8 +97,8 @@ contract TokenIOFeeContract is Ownable { * @param currency Currency symbol of the token (e.g. USDx, JYPx, GBPx) * @return {"balance": "Balance of TokenIO TSM currency account"} */ - function getTokenBalance(string currency) public view returns(uint balance) { - return lib.getTokenBalance(currency, address(this)); + function getTokenBalance(string memory currency) public view returns(uint balance) { + return lib.getTokenBalance(currency, proxyInstance); } /** @notice Calculates fee of a given transfer amount @@ -105,7 +106,7 @@ contract TokenIOFeeContract is Ownable { * @return { "fees": "Returns the fees associated with this contract"} */ function calculateFees(uint amount) public view returns (uint fees) { - return lib.calculateFees(address(this), amount); + return lib.calculateFees(proxyInstance, amount); } @@ -117,9 +118,9 @@ contract TokenIOFeeContract is Ownable { * @param data Arbitrary bytes data message to include in transfer * @return {"success": "Returns ture if successfully called from another contract"} */ - function transferCollectedFees(string currency, address to, uint amount, bytes data) public onlyOwner returns (bool success) { + function transferCollectedFees(string memory currency, address to, uint amount, bytes memory data) public onlyOwner returns (bool success) { require( - lib.forceTransfer(currency, address(this), to, amount, data), + lib.forceTransfer(currency, proxyInstance, to, amount, data), "Error: unable to transfer fees to account." ); return true; diff --git a/contracts/TokenIOFeeContractProxy.sol b/contracts/TokenIOFeeContractProxy.sol new file mode 100644 index 0000000..d90ffa0 --- /dev/null +++ b/contracts/TokenIOFeeContractProxy.sol @@ -0,0 +1,66 @@ +pragma solidity 0.5.2; + +import "./Ownable.sol"; + +interface TokenIOFeeContractI { + function setFeeParams(uint feeBps, uint feeMin, uint feeMax, uint feeFlat, bytes calldata feeMsg) external returns (bool success); + + function getFeeParams() external view returns (uint bps, uint min, uint max, uint flat, bytes memory feeMsg, address feeContract); + + function getTokenBalance(string calldata currency) external view returns(uint balance); + + function calculateFees(uint amount) external view returns (uint fees); + + function transferCollectedFees(string calldata currency, address to, uint amount, bytes calldata data) external returns (bool success); +} + +contract TokenIOFeeContractProxy is Ownable { + + address implementationInstance; + + constructor(address _tokenIOFeeContractImpl) public { + implementationInstance = _tokenIOFeeContractImpl; + } + + function upgradeTo(address _newImplementationInstance) onlyOwner external { + require(_newImplementationInstance != address(0)); + implementationInstance = _newImplementationInstance; + } + + function staticCall(bytes calldata payload) external view returns(bytes memory) { + (bool res, bytes memory result) = implementationInstance.staticcall(payload); + return result; + } + + function call(bytes calldata payload) external { + (bool res, bytes memory result) = implementationInstance.call(payload); + require(res); + } + + function setFeeParams(uint feeBps, uint feeMin, uint feeMax, uint feeFlat, bytes memory feeMsg) public returns (bool success) { + require(TokenIOFeeContractI(implementationInstance).setFeeParams(feeBps, feeMin, feeMax, feeFlat, feeMsg), + "Unable to execute setFeeParams"); + return true; + } + + function getFeeParams() public view returns (uint bps, uint min, uint max, uint flat, bytes memory feeMsg, address feeContract) { + return TokenIOFeeContractI(implementationInstance).getFeeParams(); + } + + function getTokenBalance(string memory currency) public view returns(uint balance) { + return TokenIOFeeContractI(implementationInstance).getTokenBalance(currency); + } + + function calculateFees(uint amount) public view returns (uint fees) { + return TokenIOFeeContractI(implementationInstance).calculateFees(amount); + } + + function transferCollectedFees(string memory currency, address to, uint amount, bytes memory data) public onlyOwner returns (bool success) { + require( + TokenIOFeeContractI(implementationInstance).transferCollectedFees(currency, to, amount, data), + "Unable to execute transferCollectedFees" + ); + return true; + } + +} diff --git a/contracts/TokenIOLib.sol b/contracts/TokenIOLib.sol index bb76d8c..7bf7e73 100644 --- a/contracts/TokenIOLib.sol +++ b/contracts/TokenIOLib.sol @@ -1,4 +1,4 @@ -pragma solidity 0.4.24; +pragma solidity 0.5.2; import "./SafeMath.sol"; import "./TokenIOStorage.sol"; @@ -34,6 +34,7 @@ library TokenIOLib { /// @dev the Data struct uses the Storage contract for stateful setters struct Data { TokenIOStorage Storage; + address proxyInstance; } /// @notice Not using `Log` prefix for events to be consistent with ERC20 named events; @@ -46,6 +47,15 @@ library TokenIOLib { event FxSwap(string tokenASymbol,string tokenBSymbol,uint tokenAValue,uint tokenBValue, uint expiration, bytes32 transactionHash); event AccountForward(address indexed originalAccount, address indexed forwardedAccount); event NewAuthority(address indexed authority, string issuerFirm); + + + + function setTokenParams(Data storage self, string memory _name, string memory _symbol, string memory _tla, string memory _version, uint _decimals, address _feeContract, uint _fxUSDBPSRate) internal returns(bool success) { + require( + self.Storage.setTokenParams(self.proxyInstance, _name, _symbol, _tla, _version, _decimals, _feeContract, _fxUSDBPSRate), + "Error: Unable to set storage value. Please ensure contract interface is allowed by the storage contract."); + return true; + } /** * @notice Set the token name for Token interfaces @@ -55,15 +65,14 @@ library TokenIOLib { * @param tokenName Name of the token contract * @return {"success" : "Returns true when successfully called from another contract"} */ - function setTokenName(Data storage self, string tokenName) internal returns (bool success) { - bytes32 id = keccak256(abi.encodePacked('token.name', address(this))); + function setTokenName(Data storage self, string memory tokenName) internal returns (bool success) { require( - self.Storage.setString(id, tokenName), + self.Storage.setTokenName(self.proxyInstance, tokenName), "Error: Unable to set storage value. Please ensure contract interface is allowed by the storage contract." ); return true; } - + /** * @notice Set the token symbol for Token interfaces * @dev This method must be set by the token interface's setParams() method @@ -72,10 +81,9 @@ library TokenIOLib { * @param tokenSymbol Symbol of the token contract * @return {"success" : "Returns true when successfully called from another contract"} */ - function setTokenSymbol(Data storage self, string tokenSymbol) internal returns (bool success) { - bytes32 id = keccak256(abi.encodePacked('token.symbol', address(this))); + function setTokenSymbol(Data storage self, string memory tokenSymbol) internal returns (bool success) { require( - self.Storage.setString(id, tokenSymbol), + self.Storage.setTokenSymbol(self.proxyInstance, tokenSymbol), "Error: Unable to set storage value. Please ensure contract interface is allowed by the storage contract." ); return true; @@ -89,10 +97,9 @@ library TokenIOLib { * @param tokenTLA TLA of the token contract * @return {"success" : "Returns true when successfully called from another contract"} */ - function setTokenTLA(Data storage self, string tokenTLA) internal returns (bool success) { - bytes32 id = keccak256(abi.encodePacked('token.tla', address(this))); + function setTokenTLA(Data storage self, string memory tokenTLA) internal returns (bool success) { require( - self.Storage.setString(id, tokenTLA), + self.Storage.setTokenTLA(self.proxyInstance, tokenTLA), "Error: Unable to set storage value. Please ensure contract interface is allowed by the storage contract." ); return true; @@ -106,10 +113,9 @@ library TokenIOLib { * @param tokenVersion Semantic (vMAJOR.MINOR.PATCH | e.g. v0.1.0) version of the token contract * @return {"success" : "Returns true when successfully called from another contract"} */ - function setTokenVersion(Data storage self, string tokenVersion) internal returns (bool success) { - bytes32 id = keccak256(abi.encodePacked('token.version', address(this))); + function setTokenVersion(Data storage self, string memory tokenVersion) internal returns (bool success) { require( - self.Storage.setString(id, tokenVersion), + self.Storage.setTokenVersion(self.proxyInstance, tokenVersion), "Error: Unable to set storage value. Please ensure contract interface is allowed by the storage contract." ); return true; @@ -126,85 +132,27 @@ library TokenIOLib { * @param tokenDecimals Decimal representation of the token contract unit amount * @return {"success" : "Returns true when successfully called from another contract"} */ - function setTokenDecimals(Data storage self, string currency, uint tokenDecimals) internal returns (bool success) { - bytes32 id = keccak256(abi.encodePacked('token.decimals', currency)); - require( - self.Storage.setUint(id, tokenDecimals), - "Error: Unable to set storage value. Please ensure contract interface is allowed by the storage contract." - ); - return true; - } - - /** - * @notice Set basis point fee for contract interface - * @dev Transaction fees can be set by the TokenIOFeeContract - * @dev Fees vary by contract interface specified `feeContract` - * @dev | This method has an `internal` view - * @param self Internal storage proxying TokenIOStorage contract - * @param feeBPS Basis points fee for interface contract transactions - * @return {"success" : "Returns true when successfully called from another contract"} - */ - function setFeeBPS(Data storage self, uint feeBPS) internal returns (bool success) { - bytes32 id = keccak256(abi.encodePacked('fee.bps', address(this))); - require( - self.Storage.setUint(id, feeBPS), - "Error: Unable to set storage value. Please ensure contract interface is allowed by the storage contract." - ); - return true; - } - - /** - * @notice Set minimum fee for contract interface - * @dev Transaction fees can be set by the TokenIOFeeContract - * @dev Fees vary by contract interface specified `feeContract` - * @dev | This method has an `internal` view - * @param self Internal storage proxying TokenIOStorage contract - * @param feeMin Minimum fee for interface contract transactions - * @return {"success" : "Returns true when successfully called from another contract"} - */ - function setFeeMin(Data storage self, uint feeMin) internal returns (bool success) { - bytes32 id = keccak256(abi.encodePacked('fee.min', address(this))); + function setTokenDecimals(Data storage self, string memory currency, uint tokenDecimals) internal returns (bool success) { require( - self.Storage.setUint(id, feeMin), + self.Storage.setTokenDecimals(currency, tokenDecimals), "Error: Unable to set storage value. Please ensure contract interface is allowed by the storage contract." ); return true; } /** - * @notice Set maximum fee for contract interface - * @dev Transaction fees can be set by the TokenIOFeeContract - * @dev Fees vary by contract interface specified `feeContract` + * @notice Set fees for contract interface + * @dev fee can be set by the TokenIOFeeContract * @dev | This method has an `internal` view * @param self Internal storage proxying TokenIOStorage contract - * @param feeMax Maximum fee for interface contract transactions + * @param maxFee Maximum fee for interface contract transactions + * @param minFee Minimum fee for interface contract transactions + * @param bpsFee Basis points fee for interface contract transactions + * @param flatFee Flat fee for interface contract transactions * @return {"success" : "Returns true when successfully called from another contract"} */ - function setFeeMax(Data storage self, uint feeMax) internal returns (bool success) { - bytes32 id = keccak256(abi.encodePacked('fee.max', address(this))); - require( - self.Storage.setUint(id, feeMax), - "Error: Unable to set storage value. Please ensure contract interface is allowed by the storage contract." - ); - return true; - } - - /** - * @notice Set flat fee for contract interface - * @dev Transaction fees can be set by the TokenIOFeeContract - * @dev Fees vary by contract interface specified `feeContract` - * @dev | This method has an `internal` view - * @param self Internal storage proxying TokenIOStorage contract - * @param feeFlat Flat fee for interface contract transactions - * @return {"success" : "Returns true when successfully called from another contract"} - */ - function setFeeFlat(Data storage self, uint feeFlat) internal returns (bool success) { - bytes32 id = keccak256(abi.encodePacked('fee.flat', address(this))); - require( - self.Storage.setUint(id, feeFlat), - "Error: Unable to set storage value. Please ensure contract interface is allowed by the storage contract." - ); - return true; + function setFees(Data storage self, address asset, uint maxFee, uint minFee, uint bpsFee, uint flatFee) internal returns (bool success) { + return self.Storage.setFees(asset, maxFee, minFee, bpsFee, flatFee); } /** @@ -216,8 +164,8 @@ library TokenIOLib { * @param feeMsg Fee message included in a transaction with fees * @return {"success" : "Returns true when successfully called from another contract"} */ - function setFeeMsg(Data storage self, bytes feeMsg) internal returns (bool success) { - bytes32 id = keccak256(abi.encodePacked('fee.msg', address(this))); + function setFeeMsg(Data storage self, bytes memory feeMsg) internal returns (bool success) { + bytes32 id = keccak256(abi.encodePacked('fee.msg', self.proxyInstance)); require( self.Storage.setBytes(id, feeMsg), "Error: Unable to set storage value. Please ensure contract interface is allowed by the storage contract." @@ -236,9 +184,8 @@ library TokenIOLib { * @return {"success" : "Returns true when successfully called from another contract"} */ function setFeeContract(Data storage self, address feeContract) internal returns (bool success) { - bytes32 id = keccak256(abi.encodePacked('fee.account', address(this))); require( - self.Storage.setAddress(id, feeContract), + self.Storage.setTokenFeeContract(self.proxyInstance, feeContract), "Error: Unable to set storage value. Please ensure contract interface is allowed by the storage contract." ); return true; @@ -253,10 +200,10 @@ library TokenIOLib { * @param currency Currency symbol of the token (e.g. USDx, JYPx, GBPx) * @return {"success" : "Returns true when successfully called from another contract"} */ - function setTokenNameSpace(Data storage self, string currency) internal returns (bool success) { + function setTokenNameSpace(Data storage self, string memory currency) internal returns (bool success) { bytes32 id = keccak256(abi.encodePacked('token.namespace', currency)); require( - self.Storage.setAddress(id, address(this)), + self.Storage.setAddress(id, self.proxyInstance), "Error: Unable to set storage value. Please ensure contract interface is allowed by the storage contract." ); return true; @@ -273,7 +220,7 @@ library TokenIOLib { * @param issuerFirm Firm name for issuing KYC approval * @return {"success" : "Returns true when successfully called from another contract"} */ - function setKYCApproval(Data storage self, address account, bool isApproved, string issuerFirm) internal returns (bool success) { + function setKYCApproval(Data storage self, address account, bool isApproved, string memory issuerFirm) internal returns (bool success) { bytes32 id = keccak256(abi.encodePacked('account.kyc', getForwardedAccount(self, account))); require( self.Storage.setBool(id, isApproved), @@ -296,7 +243,7 @@ library TokenIOLib { * @param issuerFirm Firm name for issuing approval * @return {"success" : "Returns true when successfully called from another contract"} */ - function setAccountStatus(Data storage self, address account, bool isAllowed, string issuerFirm) internal returns (bool success) { + function setAccountStatus(Data storage self, address account, bool isAllowed, string memory issuerFirm) internal returns (bool success) { bytes32 id = keccak256(abi.encodePacked('account.allowed', getForwardedAccount(self, account))); require( self.Storage.setBool(id, isAllowed), @@ -321,12 +268,7 @@ library TokenIOLib { * @return {"success" : "Returns true when successfully called from another contract"} */ function setForwardedAccount(Data storage self, address originalAccount, address forwardedAccount) internal returns (bool success) { - bytes32 id = keccak256(abi.encodePacked('master.account', forwardedAccount)); - require( - self.Storage.setAddress(id, originalAccount), - "Error: Unable to set storage value. Please ensure contract interface is allowed by the storage contract." - ); - return true; + return self.Storage.setRelatedAccount(forwardedAccount, originalAccount); } /** @@ -338,13 +280,11 @@ library TokenIOLib { * @return { "registeredAccount" : "Will return the original account of a forwarded account or the account itself if no account found"} */ function getForwardedAccount(Data storage self, address account) internal view returns (address registeredAccount) { - bytes32 id = keccak256(abi.encodePacked('master.account', account)); - address originalAccount = self.Storage.getAddress(id); - if (originalAccount != 0x0) { - return originalAccount; - } else { - return account; - } + return self.Storage.getRelatedAccount(account); + } + + function getTransferDetails(Data storage self, address account, address[3] memory addresses) internal view returns(string memory, address[3] memory) { + return self.Storage.getTransferDetails(account, addresses); } /** @@ -380,7 +320,7 @@ library TokenIOLib { * @param currency Currency symbol of the token (e.g. USDx, JYPx, GBPx) * @return { "contractAddress" : "Returns the contract interface address for a symbol" } */ - function getTokenNameSpace(Data storage self, string currency) internal view returns (address contractAddress) { + function getTokenNameSpace(Data storage self, string memory currency) internal view returns (address contractAddress) { bytes32 id = keccak256(abi.encodePacked('token.namespace', currency)); return self.Storage.getAddress(id); } @@ -393,9 +333,8 @@ library TokenIOLib { * @param contractAddress Contract address of the queryable interface * @return {"tokenName" : "Name of the token contract"} */ - function getTokenName(Data storage self, address contractAddress) internal view returns (string tokenName) { - bytes32 id = keccak256(abi.encodePacked('token.name', contractAddress)); - return self.Storage.getString(id); + function getTokenName(Data storage self, address contractAddress) internal view returns (string memory tokenName) { + return self.Storage.getTokenName(contractAddress); } /** @@ -406,9 +345,8 @@ library TokenIOLib { * @param contractAddress Contract address of the queryable interface * @return {"tokenSymbol" : "Symbol of the token contract"} */ - function getTokenSymbol(Data storage self, address contractAddress) internal view returns (string tokenSymbol) { - bytes32 id = keccak256(abi.encodePacked('token.symbol', contractAddress)); - return self.Storage.getString(id); + function getTokenSymbol(Data storage self, address contractAddress) internal view returns (string memory tokenSymbol) { + return self.Storage.getTokenSymbol(contractAddress); } /** @@ -419,9 +357,8 @@ library TokenIOLib { * @param contractAddress Contract address of the queryable interface * @return {"tokenTLA" : "TLA of the token contract"} */ - function getTokenTLA(Data storage self, address contractAddress) internal view returns (string tokenTLA) { - bytes32 id = keccak256(abi.encodePacked('token.tla', contractAddress)); - return self.Storage.getString(id); + function getTokenTLA(Data storage self, address contractAddress) internal view returns (string memory tokenTLA) { + return self.Storage.getTokenTLA(contractAddress); } /** @@ -432,9 +369,8 @@ library TokenIOLib { * @param contractAddress Contract address of the queryable interface * @return {"tokenVersion" : "Semantic version of the token contract"} */ - function getTokenVersion(Data storage self, address contractAddress) internal view returns (string) { - bytes32 id = keccak256(abi.encodePacked('token.version', contractAddress)); - return self.Storage.getString(id); + function getTokenVersion(Data storage self, address contractAddress) internal view returns (string memory) { + return self.Storage.getTokenVersion(contractAddress); } /** @@ -445,57 +381,12 @@ library TokenIOLib { * @param currency Currency symbol of the token (e.g. USDx, JYPx, GBPx) * @return {"tokenDecimals" : "Decimals of the token contract"} */ - function getTokenDecimals(Data storage self, string currency) internal view returns (uint tokenDecimals) { - bytes32 id = keccak256(abi.encodePacked('token.decimals', currency)); - return self.Storage.getUint(id); + function getTokenDecimals(Data storage self, string memory currency) internal view returns (uint tokenDecimals) { + return self.Storage.getTokenDecimals(currency); } - /** - * @notice Get the basis points fee of the contract address; typically TokenIOFeeContract - * @dev | This method has an `internal` view - * @param self Internal storage proxying TokenIOStorage contract - * @param contractAddress Contract address of the queryable interface - * @return { "feeBps" : "Returns the basis points fees associated with the contract address"} - */ - function getFeeBPS(Data storage self, address contractAddress) internal view returns (uint feeBps) { - bytes32 id = keccak256(abi.encodePacked('fee.bps', contractAddress)); - return self.Storage.getUint(id); - } - - /** - * @notice Get the minimum fee of the contract address; typically TokenIOFeeContract - * @dev | This method has an `internal` view - * @param self Internal storage proxying TokenIOStorage contract - * @param contractAddress Contract address of the queryable interface - * @return { "feeMin" : "Returns the minimum fees associated with the contract address"} - */ - function getFeeMin(Data storage self, address contractAddress) internal view returns (uint feeMin) { - bytes32 id = keccak256(abi.encodePacked('fee.min', contractAddress)); - return self.Storage.getUint(id); - } - - /** - * @notice Get the maximum fee of the contract address; typically TokenIOFeeContract - * @dev | This method has an `internal` view - * @param self Internal storage proxying TokenIOStorage contract - * @param contractAddress Contract address of the queryable interface - * @return { "feeMax" : "Returns the maximum fees associated with the contract address"} - */ - function getFeeMax(Data storage self, address contractAddress) internal view returns (uint feeMax) { - bytes32 id = keccak256(abi.encodePacked('fee.max', contractAddress)); - return self.Storage.getUint(id); - } - - /** - * @notice Get the flat fee of the contract address; typically TokenIOFeeContract - * @dev | This method has an `internal` view - * @param self Internal storage proxying TokenIOStorage contract - * @param contractAddress Contract address of the queryable interface - * @return { "feeFlat" : "Returns the flat fees associated with the contract address"} - */ - function getFeeFlat(Data storage self, address contractAddress) internal view returns (uint feeFlat) { - bytes32 id = keccak256(abi.encodePacked('fee.flat', contractAddress)); - return self.Storage.getUint(id); + function getFees(Data storage self, address contractAddress) internal view returns (uint maxFee, uint minFee, uint bpsFee, uint flatFee) { + return self.Storage.getFees(contractAddress); } /** @@ -505,7 +396,7 @@ library TokenIOLib { * @param contractAddress Contract address of the queryable interface * @return { "feeMsg" : "Returns the fee message (bytes) associated with the contract address"} */ - function getFeeMsg(Data storage self, address contractAddress) internal view returns (bytes feeMsg) { + function getFeeMsg(Data storage self, address contractAddress) internal view returns (bytes memory feeMsg) { bytes32 id = keccak256(abi.encodePacked('fee.msg', contractAddress)); return self.Storage.getBytes(id); } @@ -519,9 +410,8 @@ library TokenIOLib { * @return { "success" : "Returns true when successfully called from another contract"} */ function setMasterFeeContract(Data storage self, address contractAddress) internal returns (bool success) { - bytes32 id = keccak256(abi.encodePacked('fee.contract.master')); require( - self.Storage.setAddress(id, contractAddress), + self.Storage.setTokenFeeContract(address(0), contractAddress), "Error: Unable to set storage value. Please ensure contract interface is allowed by the storage contract." ); return true; @@ -534,8 +424,7 @@ library TokenIOLib { * @return { "masterFeeContract" : "Returns the master fee contract set for TSM."} */ function getMasterFeeContract(Data storage self) internal view returns (address masterFeeContract) { - bytes32 id = keccak256(abi.encodePacked('fee.contract.master')); - return self.Storage.getAddress(id); + return self.Storage.getTokenFeeContract(address(0)); } /** @@ -548,10 +437,9 @@ library TokenIOLib { * @return { "feeContract" : "Returns the fee contract associated with a contract interface"} */ function getFeeContract(Data storage self, address contractAddress) internal view returns (address feeContract) { - bytes32 id = keccak256(abi.encodePacked('fee.account', contractAddress)); - address feeAccount = self.Storage.getAddress(id); - if (feeAccount == 0x0) { + address feeAccount = self.Storage.getTokenFeeContract(contractAddress); + if (feeAccount == address(0)) { return getMasterFeeContract(self); } else { return feeAccount; @@ -565,7 +453,7 @@ library TokenIOLib { * @param currency Currency symbol of the token (e.g. USDx, JYPx, GBPx) * @return { "supply" : "Returns the token supply of the given currency"} */ - function getTokenSupply(Data storage self, string currency) internal view returns (uint supply) { + function getTokenSupply(Data storage self, string memory currency) internal view returns (uint supply) { bytes32 id = keccak256(abi.encodePacked('token.supply', currency)); return self.Storage.getUint(id); } @@ -578,7 +466,7 @@ library TokenIOLib { * @param spender Ethereum address of spender * @return { "allowance" : "Returns the allowance of a given spender for a given account"} */ - function getTokenAllowance(Data storage self, string currency, address account, address spender) internal view returns (uint allowance) { + function getTokenAllowance(Data storage self, string memory currency, address account, address spender) internal view returns (uint allowance) { bytes32 id = keccak256(abi.encodePacked('token.allowance', currency, getForwardedAccount(self, account), getForwardedAccount(self, spender))); return self.Storage.getUint(id); } @@ -591,9 +479,8 @@ library TokenIOLib { * @param account Ethereum address of account holder * @return { "balance" : "Return the balance of a given account for a specified currency"} */ - function getTokenBalance(Data storage self, string currency, address account) internal view returns (uint balance) { - bytes32 id = keccak256(abi.encodePacked('token.balance', currency, getForwardedAccount(self, account))); - return self.Storage.getUint(id); + function getTokenBalance(Data storage self, string memory currency, address account) internal view returns (uint balance) { + return self.Storage.getBalance(getForwardedAccount(self, account), currency); } /** @@ -604,7 +491,7 @@ library TokenIOLib { * @param account Ethereum address of account holder * @return { "frozenBalance" : "Return the frozen balance of a given account for a specified currency"} */ - function getTokenFrozenBalance(Data storage self, string currency, address account) internal view returns (uint frozenBalance) { + function getTokenFrozenBalance(Data storage self, string memory currency, address account) internal view returns (uint frozenBalance) { bytes32 id = keccak256(abi.encodePacked('token.frozen', currency, getForwardedAccount(self, account))); return self.Storage.getUint(id); } @@ -618,7 +505,7 @@ library TokenIOLib { * @param amount Amount of tokens to freeze for account * @return { "success" : "Return true if successfully called from another contract"} */ - function setTokenFrozenBalance(Data storage self, string currency, address account, uint amount) internal returns (bool success) { + function setTokenFrozenBalance(Data storage self, string memory currency, address account, uint amount) internal returns (bool success) { bytes32 id = keccak256(abi.encodePacked('token.frozen', currency, getForwardedAccount(self, account))); require( self.Storage.setUint(id, amount), @@ -637,10 +524,13 @@ library TokenIOLib { */ function calculateFees(Data storage self, address contractAddress, uint amount) internal view returns (uint calculatedFees) { - uint maxFee = self.Storage.getUint(keccak256(abi.encodePacked('fee.max', contractAddress))); - uint minFee = self.Storage.getUint(keccak256(abi.encodePacked('fee.min', contractAddress))); - uint bpsFee = self.Storage.getUint(keccak256(abi.encodePacked('fee.bps', contractAddress))); - uint flatFee = self.Storage.getUint(keccak256(abi.encodePacked('fee.flat', contractAddress))); + uint maxFee; + uint minFee; + uint bpsFee; + uint flatFee; + + (maxFee, minFee, bpsFee, flatFee) = self.Storage.getFees(contractAddress); + uint fees = ((amount.mul(bpsFee)).div(10000)).add(flatFee); if (fees > maxFee) { @@ -704,24 +594,24 @@ library TokenIOLib { * @param data Arbitrary bytes data to include with the transaction * @return { "success" : "Return true if successfully called from another contract" } */ - function transfer(Data storage self, string currency, address to, uint amount, bytes data) internal returns (bool success) { - require(address(to) != 0x0, "Error: `to` address cannot be null." ); + function transfer(Data storage self, string memory currency, address to, uint amount, address sender, bytes memory data) internal returns (bool success) { + require(address(to) != address(0), "Error: `to` address cannot be null." ); require(amount > 0, "Error: `amount` must be greater than zero"); - address feeContract = getFeeContract(self, address(this)); + address feeContract = getFeeContract(self, self.proxyInstance); uint fees = calculateFees(self, feeContract, amount); require( - setAccountSpendingAmount(self, msg.sender, getFxUSDAmount(self, currency, amount)), + setAccountSpendingAmount(self, sender, getFxUSDAmount(self, currency, amount)), "Error: Unable to set spending amount for account."); require( - forceTransfer(self, currency, msg.sender, to, amount, data), + forceTransfer(self, currency, sender, to, amount, data), "Error: Unable to transfer funds to account."); // @dev transfer fees to fee contract require( - forceTransfer(self, currency, msg.sender, feeContract, fees, getFeeMsg(self, feeContract)), + forceTransfer(self, currency, sender, feeContract, fees, getFeeMsg(self, feeContract)), "Error: Unable to transfer fees to fee contract."); return true; @@ -736,43 +626,43 @@ library TokenIOLib { * @dev | This method implements ERC20 transferFrom() method with approved spender behavior * @dev | msg.sender == spender; `updateAllowance()` reduces approved limit for account spender * @param self Internal storage proxying TokenIOStorage contract - * @param currency Currency symbol of the token (e.g. USDx, JYPx, GBPx) * @param from Ethereum address of account to send currency amount from * @param to Ethereum address of account to send currency amount to * @param amount Value of currency to transfer * @param data Arbitrary bytes data to include with the transaction * @return { "success" : "Return true if successfully called from another contract" } */ - function transferFrom(Data storage self, string currency, address from, address to, uint amount, bytes data) internal returns (bool success) { + function transferFrom(Data storage self, address from, address to, uint amount, bytes memory data, address sender) internal returns (bool success) { require( - address(to) != 0x0, + address(to) != address(0), "Error: `to` address must not be null." ); - address feeContract = getFeeContract(self, address(this)); + address feeContract = getFeeContract(self, self.proxyInstance); uint fees = calculateFees(self, feeContract, amount); /// @dev NOTE: This transaction will fail if the spending amount exceeds the daily limit require( - setAccountSpendingAmount(self, from, getFxUSDAmount(self, currency, amount)), + setAccountSpendingAmount(self, from, getFxUSDAmount(self, getTokenSymbol(self, self.proxyInstance), amount)), "Error: Unable to set account spending amount." ); /// @dev Attempt to transfer the amount require( - forceTransfer(self, currency, from, to, amount, data), + forceTransfer(self, getTokenSymbol(self, self.proxyInstance), from, to, amount, data), "Error: Unable to transfer funds to account." ); // @dev transfer fees to fee contract require( - forceTransfer(self, currency, from, feeContract, fees, getFeeMsg(self, feeContract)), + forceTransfer(self, getTokenSymbol(self, self.proxyInstance), from, feeContract, fees, getFeeMsg(self, feeContract)), "Error: Unable to transfer fees to fee contract." ); /// @dev Attempt to update the spender allowance + /// @notice this will throw if the allowance has not been set. require( - updateAllowance(self, currency, from, amount), + updateAllowance(self, getTokenSymbol(self, self.proxyInstance), from, amount, sender), "Error: Unable to update allowance for spender." ); @@ -792,21 +682,19 @@ library TokenIOLib { * @param data Arbitrary bytes data to include with the transaction * @return { "success" : "Return true if successfully called from another contract" } */ - function forceTransfer(Data storage self, string currency, address from, address to, uint amount, bytes data) internal returns (bool success) { + function forceTransfer(Data storage self, string memory currency, address from, address to, uint amount, bytes memory data) internal returns (bool success) { require( - address(to) != 0x0, + address(to) != address(0), "Error: `to` address must not be null." ); - bytes32 id_a = keccak256(abi.encodePacked('token.balance', currency, getForwardedAccount(self, from))); - bytes32 id_b = keccak256(abi.encodePacked('token.balance', currency, getForwardedAccount(self, to))); - require( - self.Storage.setUint(id_a, self.Storage.getUint(id_a).sub(amount)), - "Error: Unable to set storage value. Please ensure contract has allowed permissions with storage contract." + self.Storage.setBalance(getForwardedAccount(self, from), currency, self.Storage.getBalance(from, currency).sub(amount)), + "Error: Unable to set storage value. Please ensure contract has allowed permissions with storage contract." ); + require( - self.Storage.setUint(id_b, self.Storage.getUint(id_b).add(amount)), + self.Storage.setBalance(getForwardedAccount(self, to), currency, self.Storage.getBalance(to, currency).add(amount)), "Error: Unable to set storage value. Please ensure contract has allowed permissions with storage contract." ); @@ -825,8 +713,8 @@ library TokenIOLib { * @param amount Value to reduce allowance by (i.e. the amount spent) * @return { "success" : "Return true if successfully called from another contract" } */ - function updateAllowance(Data storage self, string currency, address account, uint amount) internal returns (bool success) { - bytes32 id = keccak256(abi.encodePacked('token.allowance', currency, getForwardedAccount(self, account), getForwardedAccount(self, msg.sender))); + function updateAllowance(Data storage self, string memory currency, address account, uint amount, address sender) internal returns (bool success) { + bytes32 id = keccak256(abi.encodePacked('token.allowance', currency, getForwardedAccount(self, account), getForwardedAccount(self, sender))); require( self.Storage.setUint(id, self.Storage.getUint(id).sub(amount)), "Error: Unable to set storage value. Please ensure contract has allowed permissions with storage contract." @@ -843,32 +731,31 @@ library TokenIOLib { * @param amount Value to set for spender allowance * @return { "success" : "Return true if successfully called from another contract" } */ - function approveAllowance(Data storage self, address spender, uint amount) internal returns (bool success) { - require(spender != 0x0, + function approveAllowance(Data storage self, address spender, uint amount, address sender) internal returns (bool success) { + require(spender != address(0), "Error: `spender` address cannot be null."); - string memory currency = getTokenSymbol(self, address(this)); + string memory currency = getTokenSymbol(self, self.proxyInstance); require( getTokenFrozenBalance(self, currency, getForwardedAccount(self, spender)) == 0, "Error: Spender must not have a frozen balance directly"); - bytes32 id_a = keccak256(abi.encodePacked('token.allowance', currency, getForwardedAccount(self, msg.sender), getForwardedAccount(self, spender))); - bytes32 id_b = keccak256(abi.encodePacked('token.balance', currency, getForwardedAccount(self, msg.sender))); + bytes32 id_a = keccak256(abi.encodePacked('token.allowance', currency, getForwardedAccount(self, sender), getForwardedAccount(self, spender))); require( self.Storage.getUint(id_a) == 0 || amount == 0, "Error: Allowance must be zero (0) before setting an updated allowance for spender."); require( - self.Storage.getUint(id_b) >= amount, + self.Storage.getBalance(getForwardedAccount(self, sender), currency) >= amount, "Error: Allowance cannot exceed msg.sender token balance."); require( self.Storage.setUint(id_a, amount), "Error: Unable to set storage value. Please ensure contract has allowed permissions with storage contract."); - emit Approval(msg.sender, spender, amount); + emit Approval(sender, spender, amount); return true; } @@ -884,17 +771,17 @@ library TokenIOLib { * @param issuerFirm Name of the issuing firm authorizing the deposit * @return { "success" : "Return true if successfully called from another contract" } */ - function deposit(Data storage self, string currency, address account, uint amount, string issuerFirm) internal returns (bool success) { - bytes32 id_a = keccak256(abi.encodePacked('token.balance', currency, getForwardedAccount(self, account))); - bytes32 id_b = keccak256(abi.encodePacked('token.issued', currency, issuerFirm)); - bytes32 id_c = keccak256(abi.encodePacked('token.supply', currency)); + function deposit(Data storage self, string memory currency, address account, uint amount, string memory issuerFirm) internal returns (bool success) { + bytes32[2] memory ids = [keccak256(abi.encodePacked('token.issued', currency, issuerFirm)), keccak256(abi.encodePacked('token.supply', currency))]; + + address forwardedAccount = getForwardedAccount(self, account); - require(self.Storage.setUint(id_a, self.Storage.getUint(id_a).add(amount)), + require(self.Storage.setBalance(forwardedAccount, currency, self.Storage.getBalance(forwardedAccount, currency).add(amount)), "Error: Unable to set storage value. Please ensure contract has allowed permissions with storage contract."); - require(self.Storage.setUint(id_b, self.Storage.getUint(id_b).add(amount)), + require(self.Storage.setUint(ids[0], self.Storage.getUint(ids[0]).add(amount)), "Error: Unable to set storage value. Please ensure contract has allowed permissions with storage contract."); - require(self.Storage.setUint(id_c, self.Storage.getUint(id_c).add(amount)), + require(self.Storage.setUint(ids[1], self.Storage.getUint(ids[1]).add(amount)), "Error: Unable to set storage value. Please ensure contract has allowed permissions with storage contract."); emit Deposit(currency, account, amount, issuerFirm); @@ -914,19 +801,19 @@ library TokenIOLib { * @param issuerFirm Name of the issuing firm authorizing the withdraw * @return { "success" : "Return true if successfully called from another contract" } */ - function withdraw(Data storage self, string currency, address account, uint amount, string issuerFirm) internal returns (bool success) { - bytes32 id_a = keccak256(abi.encodePacked('token.balance', currency, getForwardedAccount(self, account))); - bytes32 id_b = keccak256(abi.encodePacked('token.issued', currency, issuerFirm)); // possible for issuer to go negative - bytes32 id_c = keccak256(abi.encodePacked('token.supply', currency)); + function withdraw(Data storage self, string memory currency, address account, uint amount, string memory issuerFirm) internal returns (bool success) { + bytes32[2] memory ids = [keccak256(abi.encodePacked('token.issued', currency, issuerFirm)), keccak256(abi.encodePacked('token.supply', currency))]; + + address forwardedAccount = getForwardedAccount(self, account); require( - self.Storage.setUint(id_a, self.Storage.getUint(id_a).sub(amount)), + self.Storage.setBalance(forwardedAccount, currency, self.Storage.getBalance(forwardedAccount, currency).sub(amount)), "Error: Unable to set storage value. Please ensure contract has allowed permissions with storage contract."); require( - self.Storage.setUint(id_b, self.Storage.getUint(id_b).sub(amount)), + self.Storage.setUint(ids[0], self.Storage.getUint(ids[0]).sub(amount)), "Error: Unable to set storage value. Please ensure contract has allowed permissions with storage contract."); require( - self.Storage.setUint(id_c, self.Storage.getUint(id_c).sub(amount)), + self.Storage.setUint(ids[1], self.Storage.getUint(ids[1]).sub(amount)), "Error: Unable to set storage value. Please ensure contract has allowed permissions with storage contract."); emit Withdraw(currency, account, amount, issuerFirm); @@ -945,7 +832,7 @@ library TokenIOLib { * @param approved Approval status to set for the firm (true/false) * @return { "success" : "Return true if successfully called from another contract" } */ - function setRegisteredFirm(Data storage self, string issuerFirm, bool approved) internal returns (bool success) { + function setRegisteredFirm(Data storage self, string memory issuerFirm, bool approved) internal returns (bool success) { bytes32 id = keccak256(abi.encodePacked('registered.firm', issuerFirm)); require( self.Storage.setBool(id, approved), @@ -965,7 +852,7 @@ library TokenIOLib { * @param approved Approval status to set for the firm authority (true/false) * @return { "success" : "Return true if successfully called from another contract" } */ - function setRegisteredAuthority(Data storage self, string issuerFirm, address authorityAddress, bool approved) internal returns (bool success) { + function setRegisteredAuthority(Data storage self, string memory issuerFirm, address authorityAddress, bool approved) internal returns (bool success) { require( isRegisteredFirm(self, issuerFirm), "Error: `issuerFirm` must be registered."); @@ -992,7 +879,7 @@ library TokenIOLib { * @param authorityAddress Ethereum address of the firm authority to query * @return { "issuerFirm" : "Name of the firm registered to authority" } */ - function getFirmFromAuthority(Data storage self, address authorityAddress) internal view returns (string issuerFirm) { + function getFirmFromAuthority(Data storage self, address authorityAddress) internal view returns (string memory issuerFirm) { bytes32 id = keccak256(abi.encodePacked('registered.authority.firm', getForwardedAccount(self, authorityAddress))); return self.Storage.getString(id); } @@ -1003,7 +890,7 @@ library TokenIOLib { * @param issuerFirm Name of the issuer firm * @return { "registered" : "Return if the issuer firm has been registered" } */ - function isRegisteredFirm(Data storage self, string issuerFirm) internal view returns (bool registered) { + function isRegisteredFirm(Data storage self, string memory issuerFirm) internal view returns (bool registered) { bytes32 id = keccak256(abi.encodePacked('registered.firm', issuerFirm)); return self.Storage.getBool(id); } @@ -1015,7 +902,7 @@ library TokenIOLib { * @param authorityAddress Ethereum address of the firm authority to query * @return { "registered" : "Return if the authority is registered with the issuer firm" } */ - function isRegisteredToFirm(Data storage self, string issuerFirm, address authorityAddress) internal view returns (bool registered) { + function isRegisteredToFirm(Data storage self, string memory issuerFirm, address authorityAddress) internal view returns (bool registered) { bytes32 id = keccak256(abi.encodePacked('registered.authority', issuerFirm, getForwardedAccount(self, authorityAddress))); return self.Storage.getBool(id); } @@ -1082,14 +969,15 @@ library TokenIOLib { function execSwap( Data storage self, address requester, - string symbolA, - string symbolB, + string memory symbolA, + string memory symbolB, uint valueA, uint valueB, uint8 sigV, bytes32 sigR, bytes32 sigS, - uint expiration + uint expiration, + address sender ) internal returns (bool success) { bytes32 fxTxHash = keccak256(abi.encodePacked(requester, symbolA, symbolB, valueA, valueB, expiration)); @@ -1097,7 +985,7 @@ library TokenIOLib { /// @notice check that sender and requester accounts are verified /// @notice Only verified accounts can perform currency swaps require( - verifyAccounts(self, msg.sender, requester), + verifyAccounts(self, sender, requester), "Error: Only verified accounts can perform currency swaps."); /// @dev Immediately set this transaction to be confirmed before updating any params; @@ -1116,11 +1004,11 @@ library TokenIOLib { /// @dev Transfer funds from each account to another. require( - forceTransfer(self, symbolA, msg.sender, requester, valueA, "0x0"), + forceTransfer(self, symbolA, sender, requester, valueA, "0x0"), "Error: Unable to transfer funds to account."); require( - forceTransfer(self, symbolB, requester, msg.sender, valueB, "0x0"), + forceTransfer(self, symbolB, requester, sender, valueB, "0x0"), "Error: Unable to transfer funds to account."); emit FxSwap(symbolA, symbolB, valueA, valueB, expiration, fxTxHash); @@ -1137,7 +1025,7 @@ library TokenIOLib { * @return {"success" : "Returns true if successfully called from another contract"} */ function setDeprecatedContract(Data storage self, address contractAddress) internal returns (bool success) { - require(contractAddress != 0x0, + require(contractAddress != address(0), "Error: cannot deprecate a null address."); bytes32 id = keccak256(abi.encodePacked('depcrecated', contractAddress)); @@ -1155,8 +1043,9 @@ library TokenIOLib { * @return {"status" : "Return deprecation status (true/false) of the contract interface"} */ function isContractDeprecated(Data storage self, address contractAddress) internal view returns (bool status) { - bytes32 id = keccak256(abi.encodePacked('depcrecated', contractAddress)); - return self.Storage.getBool(id); + //bytes32 id = keccak256(abi.encodePacked('depcrecated', contractAddress)); + //return self.Storage.getBool(id); + return self.Storage.getDeprecated(contractAddress); } /** @@ -1301,10 +1190,9 @@ library TokenIOLib { * @param bpsRate Basis point rate of foreign currency exchange rate to USD * @return { "success": "Returns true if successfully called from another contract"} */ - function setFxUSDBPSRate(Data storage self, string currency, uint bpsRate) internal returns (bool success) { - bytes32 id = keccak256(abi.encodePacked('fx.usd.rate', currency)); + function setFxUSDBPSRate(Data storage self, string memory currency, uint bpsRate) internal returns (bool success) { require( - self.Storage.setUint(id, bpsRate), + self.Storage.setTokenfxUSDBPSRate(currency, bpsRate), "Error: Unable to update account spending period."); return true; @@ -1316,9 +1204,8 @@ library TokenIOLib { * @param currency The TokenIO currency symbol (e.g. USDx, JPYx, GBPx) * @return {"usdAmount" : "Returns the foreign currency amount in USD"} */ - function getFxUSDBPSRate(Data storage self, string currency) internal view returns (uint bpsRate) { - bytes32 id = keccak256(abi.encodePacked('fx.usd.rate', currency)); - return self.Storage.getUint(id); + function getFxUSDBPSRate(Data storage self, string memory currency) internal view returns (uint bpsRate) { + return self.Storage.getTokenfxUSDBPSRate(currency); } /** @@ -1328,7 +1215,7 @@ library TokenIOLib { * @param fxAmount Amount of foreign currency to exchange into USD * @return {"amount" : "Returns the foreign currency amount in USD"} */ - function getFxUSDAmount(Data storage self, string currency, uint fxAmount) internal view returns (uint amount) { + function getFxUSDAmount(Data storage self, string memory currency, uint fxAmount) internal view returns (uint amount) { uint usdDecimals = getTokenDecimals(self, 'USDx'); uint fxDecimals = getTokenDecimals(self, currency); /// @dev ensure decimal precision is normalized to USD decimals diff --git a/contracts/TokenIOMerchant.sol b/contracts/TokenIOMerchant.sol index e3f5ff6..1289d04 100644 --- a/contracts/TokenIOMerchant.sol +++ b/contracts/TokenIOMerchant.sol @@ -1,4 +1,4 @@ -pragma solidity 0.4.24; +pragma solidity 0.5.2; import "./Ownable.sol"; import "./TokenIOStorage.sol"; @@ -31,6 +31,8 @@ contract TokenIOMerchant is Ownable { using TokenIOLib for TokenIOLib.Data; TokenIOLib.Data lib; + address public proxyInstance; + /** * @notice Constructor method for Merchant contract * @param _storageContract Ethereum Address of TokenIOStorage contract @@ -48,6 +50,13 @@ contract TokenIOMerchant is Ownable { owner[msg.sender] = true; } + function initProxy(address _proxy) public onlyOwner { + require(_proxy != address(0)); + + proxyInstance = _proxy; + lib.proxyInstance = _proxy; + } + /** @notice Sets Merchant globals and fee paramters @param feeContract Address of fee contract @@ -71,15 +80,12 @@ contract TokenIOMerchant is Ownable { "contract":"Address of fee contract" } */ - function getFeeParams() public view returns (uint bps, uint min, uint max, uint flat, bytes feeMsg, address feeAccount) { - return ( - lib.getFeeBPS(lib.getFeeContract(address(this))), - lib.getFeeMin(lib.getFeeContract(address(this))), - lib.getFeeMax(lib.getFeeContract(address(this))), - lib.getFeeFlat(lib.getFeeContract(address(this))), - lib.getFeeMsg(lib.getFeeContract(address(this))), - lib.getFeeContract(address(this)) - ); + function getFeeParams() public view returns (uint bps, uint min, uint max, uint flat, bytes memory feeMsg, address feeAccount) { + address feeContract = lib.getFeeContract(proxyInstance); + (max, min, bps, flat) = lib.getFees(feeContract); + feeMsg = lib.getFeeMsg(feeContract); + feeAccount = feeContract; + return (bps, min, max, flat, feeMsg, feeAccount); } /** @@ -88,7 +94,7 @@ contract TokenIOMerchant is Ownable { * @return {"fees": "Returns the calculated transaction fees based on the fee contract parameters"} */ function calculateFees(uint amount) public view returns (uint fees) { - return lib.calculateFees(lib.getFeeContract(address(this)), amount); + return lib.calculateFees(lib.getFeeContract(proxyInstance), amount); } /** @@ -100,22 +106,22 @@ contract TokenIOMerchant is Ownable { * @param data Optional data to be included when paying the merchant (e.g. item receipt) * @return { "success" : "Returns true if successfully called from another contract"} */ - function pay(string currency, address merchant, uint amount, bool merchantPaysFees, bytes data) public returns (bool success) { + function pay(string memory currency, address merchant, uint amount, bool merchantPaysFees, bytes memory data, address sender) public returns (bool success) { uint fees = calculateFees(amount); /// @dev note the spending amount limit is gross of fees - require(lib.setAccountSpendingAmount(msg.sender, lib.getFxUSDAmount(currency, amount)), + require(lib.setAccountSpendingAmount(sender, lib.getFxUSDAmount(currency, amount)), "Error: Unable to set account spending amount."); - require(lib.forceTransfer(currency, msg.sender, merchant, amount, data), + require(lib.forceTransfer(currency, sender, merchant, amount, data), "Error: Unable to transfer funds to account"); - address feeContract = lib.getFeeContract(address(this)); + address feeContract = lib.getFeeContract(proxyInstance); /// @dev If merchantPaysFees == true, the merchant will pay the fees to the fee contract; if (merchantPaysFees) { require(lib.forceTransfer(currency, merchant, feeContract, fees, lib.getFeeMsg(feeContract)), "Error: Unable to transfer fees to fee contract."); } else { - require(lib.forceTransfer(currency, msg.sender, feeContract, fees, lib.getFeeMsg(feeContract)), + require(lib.forceTransfer(currency, sender, feeContract, fees, lib.getFeeMsg(feeContract)), "Error: Unable to transfer fees to fee contract."); } diff --git a/contracts/TokenIOMerchantProxy.sol b/contracts/TokenIOMerchantProxy.sol new file mode 100644 index 0000000..e0a750c --- /dev/null +++ b/contracts/TokenIOMerchantProxy.sol @@ -0,0 +1,60 @@ +pragma solidity 0.5.2; + +import "./Ownable.sol"; + +interface TokenIOMerchantI { + function setParams(address feeContract) external returns (bool success); + + function getFeeParams() external view returns (uint bps, uint min, uint max, uint flat, bytes memory feeMsg, address feeAccount); + + function calculateFees(uint amount) external view returns (uint fees); + + function pay(string calldata currency, address merchant, uint amount, bool merchantPaysFees, bytes calldata data, address sender) external returns (bool success); +} + +contract TokenIOMerchantProxy is Ownable { + + address implementationInstance; + + constructor(address _tokenIOMerchantImpl) public { + implementationInstance = _tokenIOMerchantImpl; + } + + function upgradeTo(address _newImplementationInstance) onlyOwner external { + require(_newImplementationInstance != address(0)); + implementationInstance = _newImplementationInstance; + } + + function staticCall(bytes calldata payload) external view returns(bytes memory) { + (bool res, bytes memory result) = implementationInstance.staticcall(payload); + return result; + } + + function call(bytes calldata payload) external { + (bool res, bytes memory result) = implementationInstance.call(payload); + require(res); + } + + function setParams(address feeContract) public onlyOwner returns (bool success) { + require(TokenIOMerchantI(implementationInstance).setParams(feeContract), + "Unable to execute setParams"); + + return true; + } + + function getFeeParams() public view returns (uint bps, uint min, uint max, uint flat, bytes memory feeMsg, address feeAccount) { + return TokenIOMerchantI(implementationInstance).getFeeParams(); + } + + function calculateFees(uint amount) public view returns (uint fees) { + return TokenIOMerchantI(implementationInstance).calculateFees(amount); + } + + function pay(string memory currency, address merchant, uint amount, bool merchantPaysFees, bytes memory data) public returns (bool success) { + require(TokenIOMerchantI(implementationInstance).pay(currency, merchant, amount, merchantPaysFees, data, msg.sender), + "Unable to execute pay"); + + return true; + } + +} diff --git a/contracts/TokenIONameSpace.sol b/contracts/TokenIONameSpace.sol index 26b0beb..f110b24 100644 --- a/contracts/TokenIONameSpace.sol +++ b/contracts/TokenIONameSpace.sol @@ -1,4 +1,4 @@ -pragma solidity 0.4.24; +pragma solidity 0.5.2; /** @@ -36,6 +36,8 @@ contract TokenIONameSpace is Ownable { using TokenIOLib for TokenIOLib.Data; TokenIOLib.Data lib; + address public proxyInstance; + /** * @notice Constructor method for TokenIONameSpace contract * @param _storageContract address of TokenIOStorage contract @@ -51,13 +53,20 @@ contract TokenIONameSpace is Ownable { owner[msg.sender] = true; } + function initProxy(address _proxy) public onlyOwner { + require(_proxy != address(0)); + + proxyInstance = _proxy; + lib.proxyInstance = _proxy; + } + /** * @notice Returns the address of the contract associated with the currency symbol * @notice This method may be deprecated or refactored to allow for multiple interfaces * @param currency string Currency symbol of the token (e.g. USDx, JYPx, GBPx) * @return {"contractAddress": "Returns the token contract address associated with the currency"} */ - function getTokenNameSpace(string currency) public view returns (address contractAddress) { + function getTokenNameSpace(string memory currency) public view returns (address contractAddress) { return lib.getTokenNameSpace(currency); } diff --git a/contracts/TokenIONameSpaceProxy.sol b/contracts/TokenIONameSpaceProxy.sol new file mode 100644 index 0000000..bb0c8c8 --- /dev/null +++ b/contracts/TokenIONameSpaceProxy.sol @@ -0,0 +1,35 @@ +pragma solidity 0.5.2; + +import "./Ownable.sol"; + +interface TokenIONameSpaceI { + function getTokenNameSpace(string calldata currency) external view returns (address contractAddress); +} + +contract TokenIONameSpaceProxy is Ownable { + + address implementationInstance; + + constructor(address _tokenIONameSpaceImpl) public { + implementationInstance = _tokenIONameSpaceImpl; + } + + function staticCall(bytes calldata payload) external view returns(bytes memory) { + (bool res, bytes memory result) = implementationInstance.staticcall(payload); + return result; + } + + function call(bytes calldata payload) external { + (bool res, bytes memory result) = implementationInstance.call(payload); + require(res); + } + + function upgradeTo(address _newImplementationInstance) onlyOwner external { + require(_newImplementationInstance != address(0)); + implementationInstance = _newImplementationInstance; + } + + function getTokenNameSpace(string memory currency) public view returns (address contractAddress) { + return TokenIONameSpaceI(implementationInstance).getTokenNameSpace(currency); + } +} diff --git a/contracts/TokenIOStableSwap.sol b/contracts/TokenIOStableSwap.sol new file mode 100644 index 0000000..502302c --- /dev/null +++ b/contracts/TokenIOStableSwap.sol @@ -0,0 +1,306 @@ +pragma solidity 0.5.2; + +import "./Ownable.sol"; +import "./SafeMath.sol"; +import "./TokenIOStorage.sol"; +import "./TokenIOLib.sol"; +import "./ERC20Interface.sol"; + +/* +COPYRIGHT 2018 Token, Inc. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +@title ERC20 Compliant StableCoin Swap Smart Contract for Token, Inc. + +@author Ryan Tate , Sean Pollock + +@notice Contract uses generalized storage contract, `TokenIOStorage`, for +upgradeability of interface contract. + +@dev In the event that the main contract becomes deprecated, the upgraded contract +will be set as the owner of this contract, and use this contract's storage to +maintain data consistency between contract. +*/ + + + +contract TokenIOStableSwap is Ownable { + /// @dev use safe math operations + using SafeMath for uint; + + //// @dev Set reference to TokenIOLib interface which proxies to TokenIOStorage + using TokenIOLib for TokenIOLib.Data; + TokenIOLib.Data lib; + + event StableSwap(address fromAsset, address toAsset, address requestedBy, uint amount, string currency); + event TransferredHoldings(address asset, address to, uint amount); + event AllowedERC20Asset(address asset, string currency); + event RemovedERC20Asset(address asset, string currency); + + address public proxyInstance; + + /** + * @notice Constructor method for TokenIOStableSwap contract + * @param _storageContract address of TokenIOStorage contract + */ + constructor(address _storageContract) public { + //// @dev Set the storage contract for the interface + //// @dev This contract will be unable to use the storage constract until + //// @dev contract address is authorized with the storage contract + //// @dev Once authorized, Use the `setParams` method to set storage values + lib.Storage = TokenIOStorage(_storageContract); + + //// @dev set owner to contract initiator + owner[msg.sender] = true; + } + + function initProxy(address _proxy) public onlyOwner { + require(_proxy != address(0)); + + proxyInstance = _proxy; + lib.proxyInstance = _proxy; + } + + /** + * @notice Allows the address of the asset to be accepted by this contract by the currency type. This method is only called by admins. + * @notice This method may be deprecated or refactored to allow for multiple interfaces + * @param asset Ethereum address of the ERC20 compliant smart contract to allow the swap + * @param currency string Currency symbol of the token (e.g. `USD`, `EUR`, `GBP`, `JPY`, `AUD`, `CAD`, `CHF`, `NOK`, `NZD`, `SEK`) + * @param feeBps Basis points Swap Fee + * @param feeMin Minimum Swap Fees + * @param feeMax Maximum Swap Fee + * @param feeFlat Flat Swap Fee + * @return { "success" : "Returns true if successfully called from another contract"} + */ + function allowAsset(address asset, string memory currency, uint feeBps, uint feeMin, uint feeMax, uint feeFlat) public onlyOwner notDeprecated returns (bool success) { + bytes32 id = keccak256(abi.encodePacked('allowed.stable.asset', asset, currency)); + require( + lib.Storage.setBool(id, true), + "Error: Unable to set storage value. Please ensure contract interface is allowed by the storage contract." + ); + + /// @notice set Currency for the asset; + require(setAssetCurrency(asset, currency), 'Error: Unable to set Currency for asset'); + + /// @notice set the Fee Params for the asset + require(setAssetFeeParams(asset, feeBps, feeMin, feeMax, feeFlat), 'Error: Unable to set fee params for asset'); + + /// @dev Log Allow ERC20 Asset + emit AllowedERC20Asset(asset, currency); + return true; + } + + function removeAsset(address asset) public onlyOwner notDeprecated returns (bool success) { + string memory currency = getAssetCurrency(asset); + bytes32 id = keccak256(abi.encodePacked('allowed.stable.asset', asset, currency)); + require( + lib.Storage.setBool(id, false), + "Error: Unable to set storage value. Please ensure contract interface is allowed by the storage contract." + ); + emit RemovedERC20Asset(asset, currency); + return true; + } + + /** + * @notice Return boolean if the asset is an allowed stable asset for the corresponding currency + * @param asset Ethereum address of the ERC20 compliant smart contract to check allowed status of + * @param currency string Currency symbol of the token (e.g. `USD`, `EUR`, `GBP`, `JPY`, `AUD`, `CAD`, `CHF`, `NOK`, `NZD`, `SEK`) + * @return {"allowed": "Returns true if the asset is allowed"} + */ + function isAllowedAsset(address asset, string memory currency) public view returns (bool allowed) { + if (isTokenXContract(asset, currency)) { + return true; + } else { + bytes32 id = keccak256(abi.encodePacked('allowed.stable.asset', asset, currency)); + return lib.Storage.getBool(id); + } + } + + /** + * Set the Three Letter Abbrevation for the currency associated to the asset + * @param asset Ethereum address of the asset to set the currency for + * @param currency string Currency of the asset (NOTE: This is the currency for the asset) + * @return { "success" : "Returns true if successfully called from another contract"} + */ + function setAssetCurrency(address asset, string memory currency) public onlyOwner returns (bool success) { + bytes32 id = keccak256(abi.encodePacked('asset.currency', asset)); + require( + lib.Storage.setString(id, currency), + "Error: Unable to set storage value. Please ensure contract interface is allowed by the storage contract." + ); + return true; + } + + /** + * Get the Currency for an associated asset; + * @param asset Ethereum address of the asset to get the currency for + * @return {"currency": "Returns the Currency of the asset if the asset has been allowed."} + */ + function getAssetCurrency(address asset) public view returns (string memory currency) { + bytes32 id = keccak256(abi.encodePacked('asset.currency', asset)); + return lib.Storage.getString(id); + } + + /** + * @notice Register the address of the asset as a Token X asset for a specific currency + * @notice This method may be deprecated or refactored to allow for multiple interfaces + * @param asset Ethereum address of the ERC20 compliant Token X asset + * @param currency string Currency symbol of the token (e.g. `USD`, `EUR`, `GBP`, `JPY`, `AUD`, `CAD`, `CHF`, `NOK`, `NZD`, `SEK`) + * @return { "success" : "Returns true if successfully called from another contract"} + */ + function setTokenXCurrency(address asset, string memory currency) public onlyOwner notDeprecated returns (bool success) { + bytes32 id = keccak256(abi.encodePacked('tokenx', asset, currency)); + require( + lib.Storage.setBool(id, true), + "Error: Unable to set storage value. Please ensure contract interface is allowed by the storage contract." + ); + + /// @notice set Currency for the asset; + require(setAssetCurrency(asset, currency)); + + return true; + } + + /** + * @notice Return boolean if the asset is a registered Token X asset for the corresponding currency + * @param asset Ethereum address of the asset to check if is a registered Token X stable coin asset + * @param currency string Currency symbol of the token (e.g. `USD`, `EUR`, `GBP`, `JPY`, `AUD`, `CAD`, `CHF`, `NOK`, `NZD`, `SEK`) + * @return {"allowed": "Returns true if the asset is allowed"} + */ + function isTokenXContract(address asset, string memory currency) public view returns (bool isX) { + bytes32 id = keccak256(abi.encodePacked('tokenx', asset, currency)); + return lib.Storage.getBool(id); + } + + /** + * @notice Set BPS, Min, Max, and Flat fee params for asset + * @param asset Ethereum address of the asset to set fees for. + * @param feeBps Basis points Swap Fee + * @param feeMin Minimum Swap Fees + * @param feeMax Maximum Swap Fee + * @param feeFlat Flat Swap Fee + * @return { "success" : "Returns true if successfully called from another contract"} + */ + function setAssetFeeParams(address asset, uint feeBps, uint feeMin, uint feeMax, uint feeFlat) public onlyOwner notDeprecated returns (bool success) { + /// @dev This method bypasses the setFee library methods and directly sets the fee params for a requested asset. + /// @notice Fees can be different per asset. Some assets may have different liquidity requirements. + require(lib.setFees(asset, feeMax, feeMin, feeBps, feeFlat), "Error: Unable to set fee contract settings"); + + return true; + } + + /** + * [calcAssetFees description] + * @param asset Ethereum address of the asset to calculate fees based on + * @param amount Amount to calculate fees on + * @return { "fees" : "Returns the fees for the amount associated with the asset contract"} + */ + function calcAssetFees(address asset, uint amount) public view returns (uint fees) { + return lib.calculateFees(asset, amount); + } + + /** + * @notice Return boolean if the asset is a registered Token X asset for the corresponding currency + * @notice Amounts will always be passed in according to the decimal representation of the `fromAsset` token; + * @param fromAsset Ethereum address of the asset with allowance for this contract to transfer and + * @param toAsset Ethereum address of the asset to check if is a registered Token X stable coin asset + * @param amount Amount of fromAsset to be transferred. + * @return { "success" : "Returns true if successfully called from another contract"} + */ + function convert(address fromAsset, address toAsset, uint amount, address sender) public notDeprecated returns (bool success) { + /// @notice lookup currency from one of the assets, check if allowed by both assets. + string memory currency = getAssetCurrency(fromAsset); + uint fromDecimals = ERC20Interface(fromAsset).decimals(); + uint toDecimals = ERC20Interface(toAsset).decimals(); + + /// @dev Ensure assets are allowed to be swapped; + require(isAllowedAsset(fromAsset, currency), 'Error: Unsupported asset requested. Asset must be supported by this contract and have a currency of `USD`, `EUR`, `GBP`, `JPY`, `AUD`, `CAD`, `CHF`, `NOK`, `NZD`, `SEK` .'); + require(isAllowedAsset(toAsset, currency), 'Error: Unsupported asset requested. Asset must be supported by this contract and have a currency of `USD`, `EUR`, `GBP`, `JPY`, `AUD`, `CAD`, `CHF`, `NOK`, `NZD`, `SEK` .'); + + + /// @dev require one of the assets be equal to Token X asset; + if (isTokenXContract(toAsset, currency)) { + /// @notice This requires the erc20 transfer function to return a boolean result of true; + /// @dev the amount being transferred must be in the same decimal representation of the asset + /// e.g. If decimals = 6 and want to transfer $100.00 the amount passed to this contract should be 100e6 (100 * 10 ** 6) + require( + ERC20Interface(fromAsset).transferFrom(sender, address(this), amount), + 'Error: Unable to transferFrom your asset holdings. Please ensure this contract has an approved allowance equal to or greater than the amount called in transferFrom method.' + ); + + /// @dev Deposit TokenX asset to the user; + /// @notice Amount received from deposit is net of fees. + uint netAmountFrom = amount.sub(calcAssetFees(fromAsset, amount)); + /// @dev Ensure amount is converted for the correct decimal representation; + uint convertedAmountFrom = (netAmountFrom.mul(10**toDecimals)).div(10**fromDecimals); + require( + lib.deposit(lib.getTokenSymbol(toAsset), sender, convertedAmountFrom, 'Token, Inc.'), + "Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered" + ); + } else if(isTokenXContract(fromAsset, currency)) { + ///@dev Transfer the asset to the user; + /// @notice Amount received from withdraw is net of fees. + uint convertedAmount = (amount.mul(10**toDecimals)).div(10**fromDecimals); + uint fees = calcAssetFees(toAsset, convertedAmount); + uint netAmountTo = convertedAmount.sub(fees); + /// @dev Ensure amount is converted for the correct decimal representation; + require( + ERC20Interface(toAsset).transfer(sender, netAmountTo), + 'Unable to call the requested erc20 contract.' + ); + + /// @dev Withdraw TokenX asset from the user + require( + lib.withdraw(lib.getTokenSymbol(fromAsset), sender, amount, 'Token, Inc.'), + "Error: Unable to withdraw funds. Please check issuerFirm and firm authority are registered and have issued funds that can be withdrawn" + ); + } else { + revert('Error: At least one asset must be issued by Token, Inc. (Token X).'); + } + + /// @dev Log the swap event for event listeners + emit StableSwap(fromAsset, toAsset, sender, amount, currency); + return true; + } + + /** + * Allow this contract to transfer collected fees to another contract; + * @param asset Ethereum address of asset to transfer + * @param to Transfer collected fees to the following account; + * @param amount Amount of fromAsset to be transferred. + * @return { "success" : "Returns true if successfully called from another contract"} + */ + function transferCollectedFees(address asset, address to, uint amount) public onlyOwner notDeprecated returns (bool success) { + require( + ERC20Interface(asset).transfer(to, amount), + "Error: Unable to transfer fees to account." + ); + emit TransferredHoldings(asset, to, amount); + return true; + } + + /** + * @notice gets currency status of contract + * @return {"deprecated" : "Returns true if deprecated, false otherwise"} + */ + function deprecateInterface() public onlyOwner returns (bool deprecated) { + require(lib.setDeprecatedContract(proxyInstance), + "Error: Unable to deprecate contract!"); + return true; + } + + modifier notDeprecated() { + /// @notice throws if contract is deprecated + require(!lib.isContractDeprecated(proxyInstance), + "Error: Contract has been deprecated, cannot perform operation!"); + _; + } + + +} diff --git a/contracts/TokenIOStableSwapProxy.sol b/contracts/TokenIOStableSwapProxy.sol new file mode 100644 index 0000000..68c9396 --- /dev/null +++ b/contracts/TokenIOStableSwapProxy.sol @@ -0,0 +1,194 @@ +pragma solidity 0.5.2; + +import "./Ownable.sol"; + +interface TokenIOStableSwapI { + function allowAsset(address asset, string calldata currency, uint feeBps, uint feeMin, uint feeMax, uint feeFlat) external returns (bool success); + + function removeAsset(address asset) external returns (bool success); + + function isAllowedAsset(address asset, string calldata currency) external view returns (bool allowed); + + function setAssetCurrency(address asset, string calldata currency) external returns (bool success); + + function getAssetCurrency(address asset) external view returns (string memory currency); + + function setTokenXCurrency(address asset, string calldata currency) external returns (bool success); + + function isTokenXContract(address asset, string calldata currency) external view returns (bool isX); + + function setAssetFeeParams(address asset, uint feeBps, uint feeMin, uint feeMax, uint feeFlat) external returns (bool success); + + function calcAssetFees(address asset, uint amount) external view returns (uint fees); + + function convert(address fromAsset, address toAsset, uint amount, address sender) external returns (bool success); + + function transferCollectedFees(address asset, address to, uint amount) external returns (bool success); + + function deprecateInterface() external returns (bool deprecated); +} + +contract TokenIOStableSwapProxy is Ownable { + + address implementationInstance; + + constructor(address _tokenIOStableSwapImpl) public { + implementationInstance = _tokenIOStableSwapImpl; + } + + function upgradeTo(address _newImplementationInstance) onlyOwner external { + require(_newImplementationInstance != address(0)); + implementationInstance = _newImplementationInstance; + } + + function staticCall(bytes calldata payload) external view returns(bytes memory) { + (bool res, bytes memory result) = implementationInstance.staticcall(payload); + return result; + } + + function call(bytes calldata payload) external { + (bool res, bytes memory result) = implementationInstance.call(payload); + require(res); + } + + function allowAsset(address asset, string memory currency, uint feeBps, uint feeMin, uint feeMax, uint feeFlat) public onlyOwner returns (bool success) { + require( + TokenIOStableSwapI(implementationInstance).allowAsset(asset, currency, feeBps, feeMin, feeMax, feeFlat), + "Unable to execute allowAsset" + ); + + return true; + } + + function removeAsset(address asset) public onlyOwner returns (bool success) { + require( + TokenIOStableSwapI(implementationInstance).removeAsset(asset), + "Unable to execute removeAsset" + ); + + return true; + } + + /** + * @notice Return boolean if the asset is an allowed stable asset for the corresponding currency + * @param asset Ethereum address of the ERC20 compliant smart contract to check allowed status of + * @param currency string Currency symbol of the token (e.g. `USD`, `EUR`, `GBP`, `JPY`, `AUD`, `CAD`, `CHF`, `NOK`, `NZD`, `SEK`) + * @return {"allowed": "Returns true if the asset is allowed"} + */ + function isAllowedAsset(address asset, string memory currency) public view returns (bool allowed) { + return TokenIOStableSwapI(implementationInstance).isAllowedAsset(asset, currency); + } + + /** + * Set the Three Letter Abbrevation for the currency associated to the asset + * @param asset Ethereum address of the asset to set the currency for + * @param currency string Currency of the asset (NOTE: This is the currency for the asset) + * @return { "success" : "Returns true if successfully called from another contract"} + */ + function setAssetCurrency(address asset, string memory currency) public onlyOwner returns (bool success) { + require( + TokenIOStableSwapI(implementationInstance).setAssetCurrency(asset, currency), + "Unable to execute setAssetCurrency" + ); + + return true; + } + + /** + * Get the Currency for an associated asset; + * @param asset Ethereum address of the asset to get the currency for + * @return {"currency": "Returns the Currency of the asset if the asset has been allowed."} + */ + function getAssetCurrency(address asset) public view returns (string memory currency) { + return TokenIOStableSwapI(implementationInstance).getAssetCurrency(asset); + } + + /** + * @notice Register the address of the asset as a Token X asset for a specific currency + * @notice This method may be deprecated or refactored to allow for multiple interfaces + * @param asset Ethereum address of the ERC20 compliant Token X asset + * @param currency string Currency symbol of the token (e.g. `USD`, `EUR`, `GBP`, `JPY`, `AUD`, `CAD`, `CHF`, `NOK`, `NZD`, `SEK`) + * @return { "success" : "Returns true if successfully called from another contract"} + */ + function setTokenXCurrency(address asset, string memory currency) public onlyOwner returns (bool success) { + require( + TokenIOStableSwapI(implementationInstance).setTokenXCurrency(asset, currency), + "Unable to execute setTokenXCurrency" + ); + + return true; + } + + /** + * @notice Return boolean if the asset is a registered Token X asset for the corresponding currency + * @param asset Ethereum address of the asset to check if is a registered Token X stable coin asset + * @param currency string Currency symbol of the token (e.g. `USD`, `EUR`, `GBP`, `JPY`, `AUD`, `CAD`, `CHF`, `NOK`, `NZD`, `SEK`) + * @return {"allowed": "Returns true if the asset is allowed"} + */ + function isTokenXContract(address asset, string memory currency) public view returns (bool isX) { + return TokenIOStableSwapI(implementationInstance).isTokenXContract(asset, currency); + } + + /** + * @notice Set BPS, Min, Max, and Flat fee params for asset + * @param asset Ethereum address of the asset to set fees for. + * @param feeBps Basis points Swap Fee + * @param feeMin Minimum Swap Fees + * @param feeMax Maximum Swap Fee + * @param feeFlat Flat Swap Fee + * @return { "success" : "Returns true if successfully called from another contract"} + */ + function setAssetFeeParams(address asset, uint feeBps, uint feeMin, uint feeMax, uint feeFlat) public onlyOwner returns (bool success) { + require(TokenIOStableSwapI(implementationInstance).setAssetFeeParams(asset, feeMax, feeMin, feeBps, feeFlat), "Unable to execute setAssetFeeParams"); + + return true; + } + + /** + * [calcAssetFees description] + * @param asset Ethereum address of the asset to calculate fees based on + * @param amount Amount to calculate fees on + * @return { "fees" : "Returns the fees for the amount associated with the asset contract"} + */ + function calcAssetFees(address asset, uint amount) public view returns (uint fees) { + return TokenIOStableSwapI(implementationInstance).calcAssetFees(asset, amount); + } + + /** + * @notice Return boolean if the asset is a registered Token X asset for the corresponding currency + * @notice Amounts will always be passed in according to the decimal representation of the `fromAsset` token; + * @param fromAsset Ethereum address of the asset with allowance for this contract to transfer and + * @param toAsset Ethereum address of the asset to check if is a registered Token X stable coin asset + * @param amount Amount of fromAsset to be transferred. + * @return { "success" : "Returns true if successfully called from another contract"} + */ + function convert(address fromAsset, address toAsset, uint amount) public returns (bool success) { + require(TokenIOStableSwapI(implementationInstance).convert(fromAsset, toAsset, amount, msg.sender), 'Unable to execute convert'); + + return true; + } + + /** + * Allow this contract to transfer collected fees to another contract; + * @param asset Ethereum address of asset to transfer + * @param to Transfer collected fees to the following account; + * @param amount Amount of fromAsset to be transferred. + * @return { "success" : "Returns true if successfully called from another contract"} + */ + function transferCollectedFees(address asset, address to, uint amount) public onlyOwner returns (bool success) { + require(TokenIOStableSwapI(implementationInstance).transferCollectedFees(asset, to, amount), "Unable to execute convert"); + + return true; + } + + /** + * @notice gets currency status of contract + * @return {"deprecated" : "Returns true if deprecated, false otherwise"} + */ + function deprecateInterface() public onlyOwner returns (bool deprecated) { + require(TokenIOStableSwapI(implementationInstance).deprecateInterface(), + "Error: Unable to deprecate contract!"); + return true; + } + +} diff --git a/contracts/TokenIOStorage.sol b/contracts/TokenIOStorage.sol index 26bcc42..054e1e3 100644 --- a/contracts/TokenIOStorage.sol +++ b/contracts/TokenIOStorage.sol @@ -1,4 +1,4 @@ -pragma solidity 0.4.24; +pragma solidity 0.5.2; import "./Ownable.sol"; @@ -50,21 +50,46 @@ contract TokenIOStorage is Ownable { /// @dev mapping for Primitive Data Types; - /// @notice primitive data mappings have `internal` view; - /// @dev only the derived contract can use the internal methods; - /// @dev key == `keccak256(param1, param2...)` - /// @dev Nested mapping can be achieved using multiple params in keccak256 hash; - mapping(bytes32 => uint256) internal uIntStorage; - mapping(bytes32 => string) internal stringStorage; - mapping(bytes32 => address) internal addressStorage; - mapping(bytes32 => bytes) internal bytesStorage; - mapping(bytes32 => bool) internal boolStorage; - mapping(bytes32 => int256) internal intStorage; + /// @notice primitive data mappings have `internal` view; + /// @dev only the derived contract can use the internal methods; + /// @dev key == `keccak256(param1, param2...)` + /// @dev Nested mapping can be achieved using multiple params in keccak256 hash; + + struct AssetDetails { + string name; + string symbol; + string tla; + string version; + address feeContract; + } + + struct FeeData { + uint maxFee; + uint minFee; + uint bpsFee; + uint flatFee; + } + + mapping(address => mapping(string => uint256)) internal balances; + + mapping(address => FeeData) internal fees; + mapping(address => address) internal relatedAccounts; + mapping(address => bool) internal isDeprecated; + mapping(string => uint) internal decimals; + mapping(string => uint) internal fxUSDBPSRates; + mapping(address => AssetDetails) internal assets; + + mapping(bytes32 => uint256) internal uIntStorage; + mapping(bytes32 => string) internal stringStorage; + mapping(bytes32 => address) internal addressStorage; + mapping(bytes32 => bytes) internal bytesStorage; + mapping(bytes32 => bool) internal boolStorage; + mapping(bytes32 => int256) internal intStorage; constructor() public { - /// @notice owner is set to msg.sender by default - /// @dev consider removing in favor of setting ownership in inherited - /// contract + /// @notice owner is set to msg.sender by default + /// @dev consider removing in favor of setting ownership in inherited + /// contract owner[msg.sender] = true; } @@ -76,7 +101,7 @@ contract TokenIOStorage is Ownable { * @param _value The Address value to be set * @return { "success" : "Returns true when successfully called from another contract" } */ - function setAddress(bytes32 _key, address _value) public onlyOwner returns (bool success) { + function setAddress(bytes32 _key, address _value) external onlyOwner returns (bool success) { addressStorage[_key] = _value; return true; } @@ -98,7 +123,7 @@ contract TokenIOStorage is Ownable { * @param _value The String value to be set * @return { "success" : "Returns true when successfully called from another contract" } */ - function setString(bytes32 _key, string _value) public onlyOwner returns (bool success) { + function setString(bytes32 _key, string calldata _value) external onlyOwner returns (bool success) { stringStorage[_key] = _value; return true; } @@ -109,7 +134,7 @@ contract TokenIOStorage is Ownable { * @param _value The Bytes value to be set * @return { "success" : "Returns true when successfully called from another contract" } */ - function setBytes(bytes32 _key, bytes _value) public onlyOwner returns (bool success) { + function setBytes(bytes32 _key, bytes calldata _value) external onlyOwner returns (bool success) { bytesStorage[_key] = _value; return true; } @@ -120,7 +145,7 @@ contract TokenIOStorage is Ownable { * @param _value The Bool value to be set * @return { "success" : "Returns true when successfully called from another contract" } */ - function setBool(bytes32 _key, bool _value) public onlyOwner returns (bool success) { + function setBool(bytes32 _key, bool _value) external onlyOwner returns (bool success) { boolStorage[_key] = _value; return true; } @@ -131,21 +156,21 @@ contract TokenIOStorage is Ownable { * @param _value The Int value to be set * @return { "success" : "Returns true when successfully called from another contract" } */ - function setInt(bytes32 _key, int _value) public onlyOwner returns (bool success) { + function setInt(bytes32 _key, int _value) external onlyOwner returns (bool success) { intStorage[_key] = _value; return true; } /// @dev Delete Key Methods - /// @dev delete methods may be unnecessary; Use set methods to set values - /// to default? + /// @dev delete methods may be unnecessary; Use set methods to set values + /// to default? /** * @notice Delete value for Address associated with bytes32 id key * @param _key Pointer identifier for value in storage * @return { "success" : "Returns true when successfully called from another contract" } */ - function deleteAddress(bytes32 _key) public onlyOwner returns (bool success) { + function deleteAddress(bytes32 _key) external onlyOwner returns (bool success) { delete addressStorage[_key]; return true; } @@ -155,7 +180,7 @@ contract TokenIOStorage is Ownable { * @param _key Pointer identifier for value in storage * @return { "success" : "Returns true when successfully called from another contract" } */ - function deleteUint(bytes32 _key) public onlyOwner returns (bool success) { + function deleteUint(bytes32 _key) external onlyOwner returns (bool success) { delete uIntStorage[_key]; return true; } @@ -165,7 +190,7 @@ contract TokenIOStorage is Ownable { * @param _key Pointer identifier for value in storage * @return { "success" : "Returns true when successfully called from another contract" } */ - function deleteString(bytes32 _key) public onlyOwner returns (bool success) { + function deleteString(bytes32 _key) external onlyOwner returns (bool success) { delete stringStorage[_key]; return true; } @@ -175,7 +200,7 @@ contract TokenIOStorage is Ownable { * @param _key Pointer identifier for value in storage * @return { "success" : "Returns true when successfully called from another contract" } */ - function deleteBytes(bytes32 _key) public onlyOwner returns (bool success) { + function deleteBytes(bytes32 _key) external onlyOwner returns (bool success) { delete bytesStorage[_key]; return true; } @@ -185,7 +210,7 @@ contract TokenIOStorage is Ownable { * @param _key Pointer identifier for value in storage * @return { "success" : "Returns true when successfully called from another contract" } */ - function deleteBool(bytes32 _key) public onlyOwner returns (bool success) { + function deleteBool(bytes32 _key) external onlyOwner returns (bool success) { delete boolStorage[_key]; return true; } @@ -195,7 +220,7 @@ contract TokenIOStorage is Ownable { * @param _key Pointer identifier for value in storage * @return { "success" : "Returns true when successfully called from another contract" } */ - function deleteInt(bytes32 _key) public onlyOwner returns (bool success) { + function deleteInt(bytes32 _key) external onlyOwner returns (bool success) { delete intStorage[_key]; return true; } @@ -207,7 +232,7 @@ contract TokenIOStorage is Ownable { * @param _key Pointer identifier for value in storage * @return { "_value" : "Returns the Address value associated with the id key" } */ - function getAddress(bytes32 _key) public view returns (address _value) { + function getAddress(bytes32 _key) external view returns (address _value) { return addressStorage[_key]; } @@ -216,7 +241,7 @@ contract TokenIOStorage is Ownable { * @param _key Pointer identifier for value in storage * @return { "_value" : "Returns the Uint value associated with the id key" } */ - function getUint(bytes32 _key) public view returns (uint _value) { + function getUint(bytes32 _key) external view returns (uint _value) { return uIntStorage[_key]; } @@ -225,7 +250,7 @@ contract TokenIOStorage is Ownable { * @param _key Pointer identifier for value in storage * @return { "_value" : "Returns the String value associated with the id key" } */ - function getString(bytes32 _key) public view returns (string _value) { + function getString(bytes32 _key) external view returns (string memory _value) { return stringStorage[_key]; } @@ -234,7 +259,7 @@ contract TokenIOStorage is Ownable { * @param _key Pointer identifier for value in storage * @return { "_value" : "Returns the Bytes value associated with the id key" } */ - function getBytes(bytes32 _key) public view returns (bytes _value) { + function getBytes(bytes32 _key) external view returns (bytes memory _value) { return bytesStorage[_key]; } @@ -243,7 +268,7 @@ contract TokenIOStorage is Ownable { * @param _key Pointer identifier for value in storage * @return { "_value" : "Returns the Bool value associated with the id key" } */ - function getBool(bytes32 _key) public view returns (bool _value) { + function getBool(bytes32 _key) external view returns (bool _value) { return boolStorage[_key]; } @@ -252,8 +277,380 @@ contract TokenIOStorage is Ownable { * @param _key Pointer identifier for value in storage * @return { "_value" : "Returns the Int value associated with the id key" } */ - function getInt(bytes32 _key) public view returns (int _value) { + function getInt(bytes32 _key) external view returns (int _value) { return intStorage[_key]; } -} + /** + * @notice Get value from isDeprecated mapping associated with address key + * @param _address Pointer identifier for value in mapping + * @return { "_value" : "Returns the bool value associated with the key" } + */ + function getDeprecated(address _address) external view returns (bool _value) { + return isDeprecated[_address]; + } + + /** + * @notice Set value for isDeprecated mapping associated with address key + * @param _address Pointer identifier for value in mapping + * @param _value The bool value to be set + * @return { "success" : "Returns true when successfully called from another contract" } + */ + function setDeprecated(address _address, bool _value) external onlyOwner returns (bool success) { + isDeprecated[_address] = _value; + return true; + } + + /** + * @notice Delete value from isDeprecated mapping associated with address key + * @param _address Pointer identifier for value in mapping + * @return { "success" : "Returns true when successfully called from another contract" } + */ + function deleteDeprecated(address _address) external onlyOwner returns (bool success) { + delete isDeprecated[_address]; + return true; + } + + /** + * @notice Get value from fees mapping associated with address key + * @param _address Pointer identifier for value in mapping + * @return { "maxFee" : "Returns the max fee value", "minFee" : "Returns the min fee value", + "bpsFee" : "Returns the bps fee value", "flatFee": "Returns the flat fee value" } + */ + function getFees(address _address) external view returns (uint maxFee, uint minFee, uint bpsFee, uint flatFee) { + FeeData memory feeData = fees[_address]; + return (feeData.maxFee, feeData.minFee, feeData.bpsFee, feeData.flatFee); + } + + /** + * @notice Set value for FeeData struct associated with address key + * @param _address Pointer identifier for FeeData + * @param maxFee Maximum fee for interface contract transactions + * @param minFee Minimum fee for interface contract transactions + * @param bpsFee Basis points fee for interface contract transactions + * @param flatFee Flat fee for interface contract transactions + * @return { "success" : "Returns true when successfully called from another contract" } + */ + function setFees(address _address, uint maxFee, uint minFee, uint bpsFee, uint flatFee) external onlyOwner returns (bool success) { + FeeData memory feeData = FeeData(maxFee, minFee, bpsFee, flatFee); + fees[_address] = feeData; + return true; + } + + /** + * @notice Get value from relatedAccount mapping associated with address key + * @param _address Pointer identifier for value in mapping + * @return { "_value" : "Returns the bool value associated with the key" } + */ + function getRelatedAccount(address _address) external view returns (address value) { + address relatedAddress = relatedAccounts[_address]; + return (address(0) != relatedAddress) ? relatedAddress : _address; + } + + /** + * @notice Get value from relatedAccount mapping associated with address keys + * @param _addresses Pointer identifier for value in mapping + * @return { "_value" : "Returns the bool value associated with the key" } + */ + function getRelatedAccounts(address[3] memory _addresses) internal view returns (address[3] memory relatedAddresses) { + for(uint i = 0; i < _addresses.length; i++) { + relatedAddresses[i] = relatedAccounts[_addresses[i]]; + relatedAddresses[i] = (address(0) != relatedAddresses[i]) ? relatedAddresses[i] : _addresses[i]; + } + + return relatedAddresses; + } + + /** + * @notice Set value for relatedAccount mapping associated with address key + * @param _address Pointer identifier for value in mapping + * @param _related related account address value + * @return { "success" : "Returns true when successfully called from another contract" } + */ + function setRelatedAccount(address _address, address _related) external onlyOwner returns (bool success) { + relatedAccounts[_address] = _related; + return true; + } + + /** + * @notice Delete value from relatedAccount mapping associated with address key + * @param _address Pointer identifier for value in mapping + * @return { "success" : "Returns true when successfully called from another contract" } + */ + function deleteRelatedAccount(address _address) external onlyOwner returns (bool success) { + delete relatedAccounts[_address]; + return true; + } + + function getTransferDetails(address _account, address[3] calldata _addresses) external view returns(string memory currency, address[3] memory addresses) { + currency = assets[_account].symbol; + addresses = getRelatedAccounts(_addresses); + } + + /** + * @notice Get value from balances mapping associated with address and currency keys + * @param _address Pointer identifier for value in mapping + * @param _currency Pointer identifier for value in mapping + * @return { "_value" : "Returns the uint value associated with the keys" } + */ + function getBalance(address _address, string calldata _currency) external view returns (uint256 value) { + //return getUint(keccak256(abi.encodePacked('token.balance', _address, _currency))); + return balances[_address][_currency]; + } + + /** + * @notice Set value for balances mapping associated with address and currency keys + * @param _address Pointer identifier for value in mapping + * @param _currency Pointer identifier for value in mapping + * @param _value balance value + * @return { "success" : "Returns true when successfully called from another contract" } + */ + function setBalance(address _address, string calldata _currency, uint _value) external onlyOwner returns (bool success) { + //setUint(keccak256(abi.encodePacked('token.balance', _address, _currency)), _value); + balances[_address][_currency] = _value; + return true; + } + + /** + * @notice Set values for balances mapping associated with address and currency keys + * @param _addresses Pointer identifiers for values in mapping + * @param _currency Pointer identifier for value in mapping + * @param _values balance values + * @return { "success" : "Returns true when successfully called from another contract" } + */ + function setBalances(address[3] calldata _addresses, string calldata _currency, uint[3] calldata _values) external onlyOwner returns(bool success) { + for(uint i = 0; i < _addresses.length; i++) { + balances[_addresses[i]][_currency] = _values[i]; + } + return true; + } + + /** + * @notice Delete value from balances mapping associated with address and currency keys + * @param _address Pointer identifier for value in mapping + * @param _currency Pointer identifier for value in mapping + * @return { "success" : "Returns true when successfully called from another contract" } + */ + function deleteBalance(address _address, string calldata _currency) external onlyOwner returns (bool success) { + //setUint(keccak256(abi.encodePacked('token.balance', _address, _currency)), _value); + delete balances[_address][_currency]; + return true; + } + + function setTokenParams(address _address, string calldata _name, string calldata _symbol, string calldata _tla, string calldata _version, uint _decimals, address _feeContract, uint _fxUSDBPSRate) external onlyOwner returns(bool success) { + assets[_address] = AssetDetails(_name, _symbol, _tla, _version, _feeContract); + decimals[_symbol] = _decimals; + fxUSDBPSRates[_symbol] = _fxUSDBPSRate; + return true; + } + + /** + * @notice Get value from assetsDetails struct in assets mapping associated with address key + * @param _address Pointer identifier for value in mapping + * @return { "string" : "Returns the string value associated with the key" } + */ + function getTokenName(address _address) external view returns(string memory) { + return assets[_address].name; + } + + /** + * @notice Set value for assetsDetails struct in assets mapping associated with address key + * @param _address Pointer identifier for value in mapping + * @param _tokenName token name value + * @return { "success" : "Returns true when successfully called from another contract" } + */ + function setTokenName(address _address, string calldata _tokenName) external onlyOwner returns(bool success) { + assets[_address].name = _tokenName; + return true; + } + + /** + * @notice Delete value from assetsDetails struct in assets mapping associated with address key + * @param _address Pointer identifier for value in mapping + * @return { "success" : "Returns true when successfully called from another contract" } + */ + function deleteTokenName(address _address) external onlyOwner returns(bool success) { + delete assets[_address].name; + return true; + } + + /** + * @notice Get value from assetsDetails struct in assets mapping associated with address key + * @param _address Pointer identifier for value in mapping + * @return { "string" : "Returns the string value associated with the key" } + */ + function getTokenSymbol(address _address) external view returns(string memory) { + return assets[_address].symbol; + } + + /** + * @notice Set value for assetsDetails struct in assets mapping associated with address key + * @param _address Pointer identifier for value in mapping + * @param _value token symbol value + * @return { "success" : "Returns true when successfully called from another contract" } + */ + function setTokenSymbol(address _address, string calldata _value) external onlyOwner returns (bool success) { + assets[_address].symbol = _value; + return true; + } + + /** + * @notice Delete value from assetsDetails struct in assets mapping associated with address key + * @param _address Pointer identifier for value in mapping + * @return { "success" : "Returns true when successfully called from another contract" } + */ + function deleteTokenSymbol(address _address) external onlyOwner returns (bool success) { + delete assets[_address].symbol; + return true; + } + + /** + * @notice Get value from assetsDetails struct in assets mapping associated with address key + * @param _address Pointer identifier for value in mapping + * @return { "string" : "Returns the string value associated with the key" } + */ + function getTokenTLA(address _address) external view returns(string memory) { + return assets[_address].tla; + } + + /** + * @notice Set value for assetsDetails struct in assets mapping associated with address key + * @param _address Pointer identifier for value in mapping + * @param _tokenTLA token TLA value + * @return { "success" : "Returns true when successfully called from another contract" } + */ + function setTokenTLA(address _address, string calldata _tokenTLA) external onlyOwner returns(bool success) { + assets[_address].tla = _tokenTLA; + return true; + } + + /** + * @notice Delete value from assetsDetails struct in assets mapping associated with address key + * @param _address Pointer identifier for value in mapping + * @return { "success" : "Returns true when successfully called from another contract" } + */ + function deleteTokenTLA(address _address) external onlyOwner returns(bool success) { + delete assets[_address].tla; + return true; + } + + /** + * @notice Get value from assetsDetails struct in assets mapping associated with address key + * @param _address Pointer identifier for value in mapping + * @return { "string" : "Returns the string value associated with the key" } + */ + function getTokenVersion(address _address) external view returns(string memory) { + return assets[_address].version; + } + + /** + * @notice Set value for assetsDetails struct in assets mapping associated with address key + * @param _address Pointer identifier for value in mapping + * @param _tokenVersion token version value + * @return { "success" : "Returns true when successfully called from another contract" } + */ + function setTokenVersion(address _address, string calldata _tokenVersion) external onlyOwner returns(bool success) { + assets[_address].version = _tokenVersion; + return true; + } + + /** + * @notice Delete value from assetsDetails struct in assets mapping associated with address key + * @param _address Pointer identifier for value in mapping + * @return { "success" : "Returns true when successfully called from another contract" } + */ + function deleteTokenVersion(address _address) external onlyOwner returns(bool success) { + delete assets[_address].version; + return true; + } + + /** + * @notice Get value from decimals mapping associated with currency key + * @param _currency Pointer identifier for value in mapping + * @return { "uint" : "Returns the uint value associated with the key" } + */ + function getTokenDecimals(string calldata _currency) external view returns(uint) { + return decimals[_currency]; + } + + /** + * @notice Set value for decimals mapping associated with currency key + * @param _decimals decimals value + * @return { "success" : "Returns true when successfully called from another contract" } + */ + function setTokenDecimals(string calldata _currency, uint _decimals) external onlyOwner returns(bool success) { + decimals[_currency] = _decimals; + return true; + } + + /** + * @notice Delete value from decimals mapping associated with currency key + * @param _currency decimals value + * @return { "success" : "Returns true when successfully called from another contract" } + */ + function deleteTokenDecimals(string calldata _currency) external onlyOwner returns(bool success) { + delete decimals[_currency]; + return true; + } + + /** + * @notice Get value from assetsDetails struct in assets mapping associated with address key + * @param _address Pointer identifier for value in mapping + * @return { "address" : "Returns the address value associated with the key" } + */ + function getTokenFeeContract(address _address) external view returns(address) { + return assets[_address].feeContract; + } + + /** + * @notice Set value for assetsDetails struct in assets mapping associated with address key + * @param _address Pointer identifier for value in mapping + * @param _value token fee contract address + * @return { "success" : "Returns true when successfully called from another contract" } + */ + function setTokenFeeContract(address _address, address _value) external onlyOwner returns (bool success) { + assets[_address].feeContract = _value; + return true; + } + + /** + * @notice Set value for assetsDetails struct in assets mapping associated with address key + * @param _address Pointer identifier for value in mapping + * @return { "success" : "Returns true when successfully called from another contract" } + */ + function deleteTokenFeeContract(address _address) external onlyOwner returns (bool success) { + delete assets[_address].feeContract; + return true; + } + + /** + * @notice Get value from assetsDetails struct in assets mapping associated with address key + * @param _symbol Pointer identifier for value in mapping + * @return { "uint" : "Returns the uint value associated with the key" } + */ + function getTokenfxUSDBPSRate(string calldata _symbol) external view returns(uint) { + return fxUSDBPSRates[_symbol]; + } + + /** + * @notice Set value for assetsDetails struct in assets mapping associated with address key + * @param _symbol Pointer identifier for value in mapping + * @param _fxUSDBPSRate usdbps rate + * @return { "uint" : "Returns the uint value associated with the key" } + */ + function setTokenfxUSDBPSRate(string calldata _symbol, uint _fxUSDBPSRate) external onlyOwner returns(bool success) { + fxUSDBPSRates[_symbol] = _fxUSDBPSRate; + return true; + } + + /** + * @notice Delete value from assetsDetails struct in assets mapping associated with address key + * @param _symbol Pointer identifier for value in mapping + * @return { "uint" : "Returns the uint value associated with the key" } + */ + function deleteTokenfxUSDBPSRate(string calldata _symbol) external onlyOwner returns(bool success) { + delete fxUSDBPSRates[_symbol]; + return true; + } + +} \ No newline at end of file diff --git a/deployed/mainnet-deprecated/Migrations.json b/deployed/mainnet-deprecated/Migrations.json new file mode 100644 index 0000000..e816147 --- /dev/null +++ b/deployed/mainnet-deprecated/Migrations.json @@ -0,0 +1,1385 @@ +{ + "contractName": "Migrations", + "abi": [ + { + "constant": true, + "inputs": [], + "name": "last_completed_migration", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "constant": false, + "inputs": [ + { + "name": "completed", + "type": "uint256" + } + ], + "name": "setCompleted", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "new_address", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5060008054600160a060020a0319163317905561023c806100326000396000f3006080604052600436106100615763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630900f0108114610066578063445df0ac146100965780638da5cb5b146100bd578063fdacd576146100fb575b600080fd5b34801561007257600080fd5b5061009473ffffffffffffffffffffffffffffffffffffffff60043516610113565b005b3480156100a257600080fd5b506100ab6101c5565b60408051918252519081900360200190f35b3480156100c957600080fd5b506100d26101cb565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561010757600080fd5b506100946004356101e7565b6000805473ffffffffffffffffffffffffffffffffffffffff163314156101c1578190508073ffffffffffffffffffffffffffffffffffffffff1663fdacd5766001546040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b1580156101a857600080fd5b505af11580156101bc573d6000803e3d6000fd5b505050505b5050565b60015481565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1633141561020d5760018190555b505600a165627a7a723058200175751d280e290aa803e109324413a03bf62768201f1dae333300fb6049ffaf0029", + "deployedBytecode": "0x6080604052600436106100615763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630900f0108114610066578063445df0ac146100965780638da5cb5b146100bd578063fdacd576146100fb575b600080fd5b34801561007257600080fd5b5061009473ffffffffffffffffffffffffffffffffffffffff60043516610113565b005b3480156100a257600080fd5b506100ab6101c5565b60408051918252519081900360200190f35b3480156100c957600080fd5b506100d26101cb565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561010757600080fd5b506100946004356101e7565b6000805473ffffffffffffffffffffffffffffffffffffffff163314156101c1578190508073ffffffffffffffffffffffffffffffffffffffff1663fdacd5766001546040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b1580156101a857600080fd5b505af11580156101bc573d6000803e3d6000fd5b505050505b5050565b60015481565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1633141561020d5760018190555b505600a165627a7a723058200175751d280e290aa803e109324413a03bf62768201f1dae333300fb6049ffaf0029", + "sourceMap": "25:480:0:-;;;177:50;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;204:5:0;:18;;-1:-1:-1;;;;;;204:18:0;212:10;204:18;;;25:480;;;;;;", + "deployedSourceMap": "25:480:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;338:165;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;338:165:0;;;;;;;;;73:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;73:36:0;;;;;;;;;;;;;;;;;;;;49:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49:20:0;;;;;;;;;;;;;;;;;;;;;;;231:103;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;231:103:0;;;;;338:165;400:19;160:5;;;;146:10;:19;142:26;;;433:11;400:45;;451:8;:21;;;473:24;;451:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;451:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;451:47:0;;;;142:26;338:165;;:::o;73:36::-;;;;:::o;49:20::-;;;;;;:::o;231:103::-;160:5;;;;146:10;:19;142:26;;;293:24;:36;;;142:26;231:103;:::o", + "source": "pragma solidity 0.4.24;\n\ncontract Migrations {\n address public owner;\n uint public last_completed_migration;\n\n modifier restricted() {\n if (msg.sender == owner) _;\n }\n\n constructor() public {\n owner = msg.sender;\n }\n\n function setCompleted(uint completed) public restricted {\n last_completed_migration = completed;\n }\n\n function upgrade(address new_address) public restricted {\n Migrations upgraded = Migrations(new_address);\n upgraded.setCompleted(last_completed_migration);\n }\n}\n", + "sourcePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Migrations.sol", + "ast": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Migrations.sol", + "exportedSymbols": { + "Migrations": [ + 56 + ] + }, + "id": 57, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:0" + }, + { + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 56, + "linearizedBaseContracts": [ + 56 + ], + "name": "Migrations", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 3, + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 56, + "src": "49:20:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "49:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "id": 5, + "name": "last_completed_migration", + "nodeType": "VariableDeclaration", + "scope": 56, + "src": "73:36:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "73:4:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "public" + }, + { + "body": { + "id": 13, + "nodeType": "Block", + "src": "136:37:0", + "statements": [ + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 10, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 7, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "146:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 8, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "146:10:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 9, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3, + "src": "160:5:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "146:19:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 12, + "nodeType": "IfStatement", + "src": "142:26:0", + "trueBody": { + "id": 11, + "nodeType": "PlaceholderStatement", + "src": "167:1:0" + } + } + ] + }, + "documentation": null, + "id": 14, + "name": "restricted", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 6, + "nodeType": "ParameterList", + "parameters": [], + "src": "133:2:0" + }, + "src": "114:59:0", + "visibility": "internal" + }, + { + "body": { + "id": 22, + "nodeType": "Block", + "src": "198:29:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 20, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 17, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3, + "src": "204:5:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 18, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "212:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 19, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "212:10:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "204:18:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 21, + "nodeType": "ExpressionStatement", + "src": "204:18:0" + } + ] + }, + "documentation": null, + "id": 23, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 15, + "nodeType": "ParameterList", + "parameters": [], + "src": "188:2:0" + }, + "payable": false, + "returnParameters": { + "id": 16, + "nodeType": "ParameterList", + "parameters": [], + "src": "198:0:0" + }, + "scope": 56, + "src": "177:50:0", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 34, + "nodeType": "Block", + "src": "287:47:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 32, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 30, + "name": "last_completed_migration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5, + "src": "293:24:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 31, + "name": "completed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25, + "src": "320:9:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "293:36:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 33, + "nodeType": "ExpressionStatement", + "src": "293:36:0" + } + ] + }, + "documentation": null, + "id": 35, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 28, + "modifierName": { + "argumentTypes": null, + "id": 27, + "name": "restricted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14, + "src": "276:10:0", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "276:10:0" + } + ], + "name": "setCompleted", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 26, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 25, + "name": "completed", + "nodeType": "VariableDeclaration", + "scope": 35, + "src": "253:14:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 24, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "253:4:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "252:16:0" + }, + "payable": false, + "returnParameters": { + "id": 29, + "nodeType": "ParameterList", + "parameters": [], + "src": "287:0:0" + }, + "scope": 56, + "src": "231:103:0", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 54, + "nodeType": "Block", + "src": "394:109:0", + "statements": [ + { + "assignments": [ + 43 + ], + "declarations": [ + { + "constant": false, + "id": 43, + "name": "upgraded", + "nodeType": "VariableDeclaration", + "scope": 55, + "src": "400:19:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Migrations_$56", + "typeString": "contract Migrations" + }, + "typeName": { + "contractScope": null, + "id": 42, + "name": "Migrations", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 56, + "src": "400:10:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Migrations_$56", + "typeString": "contract Migrations" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 47, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 45, + "name": "new_address", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 37, + "src": "433:11:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 44, + "name": "Migrations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 56, + "src": "422:10:0", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Migrations_$56_$", + "typeString": "type(contract Migrations)" + } + }, + "id": 46, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "422:23:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Migrations_$56", + "typeString": "contract Migrations" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "400:45:0" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 51, + "name": "last_completed_migration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5, + "src": "473:24:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 48, + "name": "upgraded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 43, + "src": "451:8:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Migrations_$56", + "typeString": "contract Migrations" + } + }, + "id": 50, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "setCompleted", + "nodeType": "MemberAccess", + "referencedDeclaration": 35, + "src": "451:21:0", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256) external" + } + }, + "id": 52, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "451:47:0", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 53, + "nodeType": "ExpressionStatement", + "src": "451:47:0" + } + ] + }, + "documentation": null, + "id": 55, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 40, + "modifierName": { + "argumentTypes": null, + "id": 39, + "name": "restricted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14, + "src": "383:10:0", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "383:10:0" + } + ], + "name": "upgrade", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 38, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 37, + "name": "new_address", + "nodeType": "VariableDeclaration", + "scope": 55, + "src": "355:19:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 36, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "355:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "354:21:0" + }, + "payable": false, + "returnParameters": { + "id": 41, + "nodeType": "ParameterList", + "parameters": [], + "src": "394:0:0" + }, + "scope": 56, + "src": "338:165:0", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 57, + "src": "25:480:0" + } + ], + "src": "0:506:0" + }, + "legacyAST": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Migrations.sol", + "exportedSymbols": { + "Migrations": [ + 56 + ] + }, + "id": 57, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:0" + }, + { + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 56, + "linearizedBaseContracts": [ + 56 + ], + "name": "Migrations", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 3, + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 56, + "src": "49:20:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "49:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "id": 5, + "name": "last_completed_migration", + "nodeType": "VariableDeclaration", + "scope": 56, + "src": "73:36:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "73:4:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "public" + }, + { + "body": { + "id": 13, + "nodeType": "Block", + "src": "136:37:0", + "statements": [ + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 10, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 7, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "146:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 8, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "146:10:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 9, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3, + "src": "160:5:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "146:19:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 12, + "nodeType": "IfStatement", + "src": "142:26:0", + "trueBody": { + "id": 11, + "nodeType": "PlaceholderStatement", + "src": "167:1:0" + } + } + ] + }, + "documentation": null, + "id": 14, + "name": "restricted", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 6, + "nodeType": "ParameterList", + "parameters": [], + "src": "133:2:0" + }, + "src": "114:59:0", + "visibility": "internal" + }, + { + "body": { + "id": 22, + "nodeType": "Block", + "src": "198:29:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 20, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 17, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3, + "src": "204:5:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 18, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "212:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 19, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "212:10:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "204:18:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 21, + "nodeType": "ExpressionStatement", + "src": "204:18:0" + } + ] + }, + "documentation": null, + "id": 23, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 15, + "nodeType": "ParameterList", + "parameters": [], + "src": "188:2:0" + }, + "payable": false, + "returnParameters": { + "id": 16, + "nodeType": "ParameterList", + "parameters": [], + "src": "198:0:0" + }, + "scope": 56, + "src": "177:50:0", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 34, + "nodeType": "Block", + "src": "287:47:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 32, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 30, + "name": "last_completed_migration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5, + "src": "293:24:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 31, + "name": "completed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25, + "src": "320:9:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "293:36:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 33, + "nodeType": "ExpressionStatement", + "src": "293:36:0" + } + ] + }, + "documentation": null, + "id": 35, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 28, + "modifierName": { + "argumentTypes": null, + "id": 27, + "name": "restricted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14, + "src": "276:10:0", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "276:10:0" + } + ], + "name": "setCompleted", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 26, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 25, + "name": "completed", + "nodeType": "VariableDeclaration", + "scope": 35, + "src": "253:14:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 24, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "253:4:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "252:16:0" + }, + "payable": false, + "returnParameters": { + "id": 29, + "nodeType": "ParameterList", + "parameters": [], + "src": "287:0:0" + }, + "scope": 56, + "src": "231:103:0", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 54, + "nodeType": "Block", + "src": "394:109:0", + "statements": [ + { + "assignments": [ + 43 + ], + "declarations": [ + { + "constant": false, + "id": 43, + "name": "upgraded", + "nodeType": "VariableDeclaration", + "scope": 55, + "src": "400:19:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Migrations_$56", + "typeString": "contract Migrations" + }, + "typeName": { + "contractScope": null, + "id": 42, + "name": "Migrations", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 56, + "src": "400:10:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Migrations_$56", + "typeString": "contract Migrations" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 47, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 45, + "name": "new_address", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 37, + "src": "433:11:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 44, + "name": "Migrations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 56, + "src": "422:10:0", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Migrations_$56_$", + "typeString": "type(contract Migrations)" + } + }, + "id": 46, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "422:23:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Migrations_$56", + "typeString": "contract Migrations" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "400:45:0" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 51, + "name": "last_completed_migration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5, + "src": "473:24:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 48, + "name": "upgraded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 43, + "src": "451:8:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Migrations_$56", + "typeString": "contract Migrations" + } + }, + "id": 50, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "setCompleted", + "nodeType": "MemberAccess", + "referencedDeclaration": 35, + "src": "451:21:0", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256) external" + } + }, + "id": 52, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "451:47:0", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 53, + "nodeType": "ExpressionStatement", + "src": "451:47:0" + } + ] + }, + "documentation": null, + "id": 55, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 40, + "modifierName": { + "argumentTypes": null, + "id": 39, + "name": "restricted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14, + "src": "383:10:0", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "383:10:0" + } + ], + "name": "upgrade", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 38, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 37, + "name": "new_address", + "nodeType": "VariableDeclaration", + "scope": 55, + "src": "355:19:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 36, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "355:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "354:21:0" + }, + "payable": false, + "returnParameters": { + "id": 41, + "nodeType": "ParameterList", + "parameters": [], + "src": "394:0:0" + }, + "scope": 56, + "src": "338:165:0", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 57, + "src": "25:480:0" + } + ], + "src": "0:506:0" + }, + "compiler": { + "name": "solc", + "version": "0.4.24+commit.e67f0147.Emscripten.clang" + }, + "networks": { + "1": { + "events": {}, + "links": {}, + "address": "0x026a64902d3ed8f1f69d52b9d426f1d51bbbcf6f", + "transactionHash": "0xa0d4bf851c08da7c42d9f432c06eb46c3cd0d8948f211db224a1eab6856b2a48" + } + }, + "schemaVersion": "2.0.1", + "updatedAt": "2018-09-18T18:57:45.597Z" +} \ No newline at end of file diff --git a/deployed/mainnet-deprecated/Ownable.json b/deployed/mainnet-deprecated/Ownable.json new file mode 100644 index 0000000..cc35986 --- /dev/null +++ b/deployed/mainnet-deprecated/Ownable.json @@ -0,0 +1,3323 @@ +{ + "contractName": "Ownable", + "abi": [ + { + "constant": true, + "inputs": [ + { + "name": "", + "type": "address" + } + ], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "AllowOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "RevokeOwnership", + "type": "event" + }, + { + "constant": false, + "inputs": [ + { + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "allowOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "removeOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50336000908152602081905260409020805460ff1916600117905561045a8061003a6000396000f3006080604052600436106100615763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416634bbc142c8114610066578063666a34271461009b578063666e1b39146100bc578063f2fde38b146100dd575b600080fd5b34801561007257600080fd5b50610087600160a060020a03600435166100fe565b604080519115158252519081900360200190f35b3480156100a757600080fd5b50610087600160a060020a03600435166101de565b3480156100c857600080fd5b50610087600160a060020a03600435166102bb565b3480156100e957600080fd5b50610087600160a060020a03600435166102d0565b3360009081526020819052604081205460ff16151561018d576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b3360009081526020819052604081205460ff16151561026d576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b3360009081526020819052604081205460ff16151561035f576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a03821615156103bf576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff1991821681179092553384529190922080549091169055905600a165627a7a72305820008982c7122c078b3561e82dc528b2b9c23f88189abb0e2866f411c5d2edc7950029", + "deployedBytecode": "0x6080604052600436106100615763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416634bbc142c8114610066578063666a34271461009b578063666e1b39146100bc578063f2fde38b146100dd575b600080fd5b34801561007257600080fd5b50610087600160a060020a03600435166100fe565b604080519115158252519081900360200190f35b3480156100a757600080fd5b50610087600160a060020a03600435166101de565b3480156100c857600080fd5b50610087600160a060020a03600435166102bb565b3480156100e957600080fd5b50610087600160a060020a03600435166102d0565b3360009081526020819052604081205460ff16151561018d576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b3360009081526020819052604081205460ff16151561026d576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b3360009081526020819052604081205460ff16151561035f576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a03821615156103bf576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff1991821681179092553384529190922080549091169055905600a165627a7a72305820008982c7122c078b3561e82dc528b2b9c23f88189abb0e2866f411c5d2edc7950029", + "sourceMap": "703:2059:1:-;;;1084:56;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1117:10:1;1111:5;:17;;;;;;;;;;:24;;-1:-1:-1;;1111:24:1;1131:4;1111:24;;;703:2059;;;;;;", + "deployedSourceMap": "703:2059:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2127:185;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2127:185:1;-1:-1:-1;;;;;2127:185:1;;;;;;;;;;;;;;;;;;;;;;;2571:188;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2571:188:1;-1:-1:-1;;;;;2571:188:1;;;;;725:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;725:37:1;-1:-1:-1;;;;;725:37:1;;;;;1589:291;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1589:291:1;-1:-1:-1;;;;;1589:291:1;;;;;2127:185;1261:10;2201:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2221:21:1;;:5;:21;;;;;;;;;;;:28;;-1:-1:-1;;2221:28:1;2245:4;2221:28;;;2260:30;;;2221:5;2260:30;-1:-1:-1;2303:4:1;2127:185;;;:::o;2571:188::-;1261:10;2646:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2666:21:1;;2690:5;2666:21;;;;;;;;;;;:29;;-1:-1:-1;;2666:29:1;;;2706:31;;;2690:5;2706:31;-1:-1:-1;2750:4:1;2571:188;;;:::o;725:37::-;;;;;;;;;;;;;;;;:::o;1589:291::-;1261:10;1660:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1688:22:1;;;;1680:66;;;;;-1:-1:-1;;;;;1680:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1757:42;;-1:-1:-1;;;;;1757:42:1;;;1778:10;;1757:42;;;;;-1:-1:-1;;;;;;1805:15:1;:5;:15;;;;;;;;;;;:22;;1823:4;-1:-1:-1;;1805:22:1;;;;;;;;1839:10;1833:17;;;;;;:25;;;;;;;1823:4;1589:291::o", + "source": "pragma solidity 0.4.24;\n\n\n\n\n/**\n\nCOPYRIGHT 2018 Token, Inc.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n@title Ownable\n@dev The Ownable contract has an owner address, and provides basic authorization control\nfunctions, this simplifies the implementation of \"user permissions\".\n\n\n */\ncontract Ownable {\n\n mapping(address => bool) public owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n event AllowOwnership(address indexed allowedAddress);\n event RevokeOwnership(address indexed allowedAddress);\n\n /**\n * @dev The Ownable constructor sets the original `owner` of the contract to the sender\n * account.\n */\n constructor() public {\n owner[msg.sender] = true;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner[msg.sender], \"Error: Transaction sender is not allowed by the contract.\");\n _;\n }\n\n /**\n * @dev Allows the current owner to transfer control of the contract to a newOwner.\n * @param newOwner The address to transfer ownership to.\n * @return {\"success\" : \"Returns true when successfully transferred ownership\"}\n */\n function transferOwnership(address newOwner) public onlyOwner returns (bool success) {\n require(newOwner != address(0), \"Error: newOwner cannot be null!\");\n emit OwnershipTransferred(msg.sender, newOwner);\n owner[newOwner] = true;\n owner[msg.sender] = false;\n return true;\n }\n\n /**\n * @dev Allows interface contracts and accounts to access contract methods (e.g. Storage contract)\n * @param allowedAddress The address of new owner\n * @return {\"success\" : \"Returns true when successfully allowed ownership\"}\n */\n function allowOwnership(address allowedAddress) public onlyOwner returns (bool success) {\n owner[allowedAddress] = true;\n emit AllowOwnership(allowedAddress);\n return true;\n }\n\n /**\n * @dev Disallows interface contracts and accounts to access contract methods (e.g. Storage contract)\n * @param allowedAddress The address to disallow ownership\n * @return {\"success\" : \"Returns true when successfully allowed ownership\"}\n */\n function removeOwnership(address allowedAddress) public onlyOwner returns (bool success) {\n owner[allowedAddress] = false;\n emit RevokeOwnership(allowedAddress);\n return true;\n }\n\n}\n", + "sourcePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "ast": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "exportedSymbols": { + "Ownable": [ + 184 + ] + }, + "id": 185, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 58, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:1" + }, + { + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": "COPYRIGHT 2018 Token, Inc.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n@title Ownable\n@dev The Ownable contract has an owner address, and provides basic authorization control\nfunctions, this simplifies the implementation of \"user permissions\".", + "fullyImplemented": true, + "id": 184, + "linearizedBaseContracts": [ + 184 + ], + "name": "Ownable", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 62, + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 184, + "src": "725:37:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "typeName": { + "id": 61, + "keyType": { + "id": 59, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "733:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "725:24:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "valueType": { + "id": 60, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "744:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + }, + "value": null, + "visibility": "public" + }, + { + "anonymous": false, + "documentation": null, + "id": 68, + "name": "OwnershipTransferred", + "nodeType": "EventDefinition", + "parameters": { + "id": 67, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 64, + "indexed": true, + "name": "previousOwner", + "nodeType": "VariableDeclaration", + "scope": 68, + "src": "794:29:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 63, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "794:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 66, + "indexed": true, + "name": "newOwner", + "nodeType": "VariableDeclaration", + "scope": 68, + "src": "825:24:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 65, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "825:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "793:57:1" + }, + "src": "767:84:1" + }, + { + "anonymous": false, + "documentation": null, + "id": 72, + "name": "AllowOwnership", + "nodeType": "EventDefinition", + "parameters": { + "id": 71, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 70, + "indexed": true, + "name": "allowedAddress", + "nodeType": "VariableDeclaration", + "scope": 72, + "src": "875:30:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 69, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "875:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "874:32:1" + }, + "src": "854:53:1" + }, + { + "anonymous": false, + "documentation": null, + "id": 76, + "name": "RevokeOwnership", + "nodeType": "EventDefinition", + "parameters": { + "id": 75, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 74, + "indexed": true, + "name": "allowedAddress", + "nodeType": "VariableDeclaration", + "scope": 76, + "src": "932:30:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 73, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "932:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "931:32:1" + }, + "src": "910:54:1" + }, + { + "body": { + "id": 86, + "nodeType": "Block", + "src": "1105:35:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 84, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 79, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1111:5:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 82, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 80, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "1117:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 81, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1117:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1111:17:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 83, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1131:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1111:24:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 85, + "nodeType": "ExpressionStatement", + "src": "1111:24:1" + } + ] + }, + "documentation": "@dev The Ownable constructor sets the original `owner` of the contract to the sender\naccount.", + "id": 87, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 77, + "nodeType": "ParameterList", + "parameters": [], + "src": "1095:2:1" + }, + "payable": false, + "returnParameters": { + "id": 78, + "nodeType": "ParameterList", + "parameters": [], + "src": "1105:0:1" + }, + "scope": 184, + "src": "1084:56:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 98, + "nodeType": "Block", + "src": "1241:105:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 90, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1255:5:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 93, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 91, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "1261:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 92, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1261:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1255:17:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7420616c6c6f7765642062792074686520636f6e74726163742e", + "id": 94, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1274:59:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_8291170cda70aa6a33f032b286d45ac3395ac65762e92264c69af22ca29fa73f", + "typeString": "literal_string \"Error: Transaction sender is not allowed by the contract.\"" + }, + "value": "Error: Transaction sender is not allowed by the contract." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_8291170cda70aa6a33f032b286d45ac3395ac65762e92264c69af22ca29fa73f", + "typeString": "literal_string \"Error: Transaction sender is not allowed by the contract.\"" + } + ], + "id": 89, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "1247:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 95, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1247:87:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 96, + "nodeType": "ExpressionStatement", + "src": "1247:87:1" + }, + { + "id": 97, + "nodeType": "PlaceholderStatement", + "src": "1340:1:1" + } + ] + }, + "documentation": "@dev Throws if called by any account other than the owner.", + "id": 99, + "name": "onlyOwner", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 88, + "nodeType": "ParameterList", + "parameters": [], + "src": "1238:2:1" + }, + "src": "1220:126:1", + "visibility": "internal" + }, + { + "body": { + "id": 138, + "nodeType": "Block", + "src": "1674:206:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 113, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 109, + "name": "newOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 101, + "src": "1688:8:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 111, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1708:1:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 110, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1700:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 112, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1700:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1688:22:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c21", + "id": 114, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1712:33:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0cf773df2ba40d551ba87e95013f067aa808666d9d26ad6f662416df58eb7494", + "typeString": "literal_string \"Error: newOwner cannot be null!\"" + }, + "value": "Error: newOwner cannot be null!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0cf773df2ba40d551ba87e95013f067aa808666d9d26ad6f662416df58eb7494", + "typeString": "literal_string \"Error: newOwner cannot be null!\"" + } + ], + "id": 108, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "1680:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 115, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1680:66:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 116, + "nodeType": "ExpressionStatement", + "src": "1680:66:1" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 118, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "1778:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 119, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1778:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 120, + "name": "newOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 101, + "src": "1790:8:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 117, + "name": "OwnershipTransferred", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 68, + "src": "1757:20:1", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", + "typeString": "function (address,address)" + } + }, + "id": 121, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1757:42:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 122, + "nodeType": "EmitStatement", + "src": "1752:47:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 127, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 123, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1805:5:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 125, + "indexExpression": { + "argumentTypes": null, + "id": 124, + "name": "newOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 101, + "src": "1811:8:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1805:15:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 126, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1823:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1805:22:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 128, + "nodeType": "ExpressionStatement", + "src": "1805:22:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 134, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 129, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1833:5:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 132, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 130, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "1839:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 131, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1839:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1833:17:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 133, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1853:5:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "src": "1833:25:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 135, + "nodeType": "ExpressionStatement", + "src": "1833:25:1" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 136, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1871:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 107, + "id": 137, + "nodeType": "Return", + "src": "1864:11:1" + } + ] + }, + "documentation": "@dev Allows the current owner to transfer control of the contract to a newOwner.\n@param newOwner The address to transfer ownership to.\n@return {\"success\" : \"Returns true when successfully transferred ownership\"}", + "id": 139, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 104, + "modifierName": { + "argumentTypes": null, + "id": 103, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "1641:9:1", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "1641:9:1" + } + ], + "name": "transferOwnership", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 102, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 101, + "name": "newOwner", + "nodeType": "VariableDeclaration", + "scope": 139, + "src": "1616:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 100, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1616:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1615:18:1" + }, + "payable": false, + "returnParameters": { + "id": 107, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 106, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 139, + "src": "1660:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 105, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1660:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1659:14:1" + }, + "scope": 184, + "src": "1589:291:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 160, + "nodeType": "Block", + "src": "2215:97:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 152, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 148, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "2221:5:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 150, + "indexExpression": { + "argumentTypes": null, + "id": 149, + "name": "allowedAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 141, + "src": "2227:14:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2221:21:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 151, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2245:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "2221:28:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 153, + "nodeType": "ExpressionStatement", + "src": "2221:28:1" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 155, + "name": "allowedAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 141, + "src": "2275:14:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 154, + "name": "AllowOwnership", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 72, + "src": "2260:14:1", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 156, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2260:30:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 157, + "nodeType": "EmitStatement", + "src": "2255:35:1" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 158, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2303:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 147, + "id": 159, + "nodeType": "Return", + "src": "2296:11:1" + } + ] + }, + "documentation": "@dev Allows interface contracts and accounts to access contract methods (e.g. Storage contract)\n@param allowedAddress The address of new owner\n@return {\"success\" : \"Returns true when successfully allowed ownership\"}", + "id": 161, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 144, + "modifierName": { + "argumentTypes": null, + "id": 143, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "2182:9:1", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2182:9:1" + } + ], + "name": "allowOwnership", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 142, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 141, + "name": "allowedAddress", + "nodeType": "VariableDeclaration", + "scope": 161, + "src": "2151:22:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 140, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2151:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2150:24:1" + }, + "payable": false, + "returnParameters": { + "id": 147, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 146, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 161, + "src": "2201:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 145, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2201:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2200:14:1" + }, + "scope": 184, + "src": "2127:185:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 182, + "nodeType": "Block", + "src": "2660:99:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 174, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 170, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "2666:5:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 172, + "indexExpression": { + "argumentTypes": null, + "id": 171, + "name": "allowedAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 163, + "src": "2672:14:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2666:21:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 173, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2690:5:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "src": "2666:29:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 175, + "nodeType": "ExpressionStatement", + "src": "2666:29:1" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 177, + "name": "allowedAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 163, + "src": "2722:14:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 176, + "name": "RevokeOwnership", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 76, + "src": "2706:15:1", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 178, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2706:31:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 179, + "nodeType": "EmitStatement", + "src": "2701:36:1" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 180, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2750:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 169, + "id": 181, + "nodeType": "Return", + "src": "2743:11:1" + } + ] + }, + "documentation": "@dev Disallows interface contracts and accounts to access contract methods (e.g. Storage contract)\n@param allowedAddress The address to disallow ownership\n@return {\"success\" : \"Returns true when successfully allowed ownership\"}", + "id": 183, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 166, + "modifierName": { + "argumentTypes": null, + "id": 165, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "2627:9:1", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2627:9:1" + } + ], + "name": "removeOwnership", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 164, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 163, + "name": "allowedAddress", + "nodeType": "VariableDeclaration", + "scope": 183, + "src": "2596:22:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 162, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2596:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2595:24:1" + }, + "payable": false, + "returnParameters": { + "id": 169, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 168, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 183, + "src": "2646:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 167, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2646:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2645:14:1" + }, + "scope": 184, + "src": "2571:188:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 185, + "src": "703:2059:1" + } + ], + "src": "0:2763:1" + }, + "legacyAST": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "exportedSymbols": { + "Ownable": [ + 184 + ] + }, + "id": 185, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 58, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:1" + }, + { + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": "COPYRIGHT 2018 Token, Inc.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n@title Ownable\n@dev The Ownable contract has an owner address, and provides basic authorization control\nfunctions, this simplifies the implementation of \"user permissions\".", + "fullyImplemented": true, + "id": 184, + "linearizedBaseContracts": [ + 184 + ], + "name": "Ownable", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 62, + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 184, + "src": "725:37:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "typeName": { + "id": 61, + "keyType": { + "id": 59, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "733:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "725:24:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "valueType": { + "id": 60, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "744:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + }, + "value": null, + "visibility": "public" + }, + { + "anonymous": false, + "documentation": null, + "id": 68, + "name": "OwnershipTransferred", + "nodeType": "EventDefinition", + "parameters": { + "id": 67, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 64, + "indexed": true, + "name": "previousOwner", + "nodeType": "VariableDeclaration", + "scope": 68, + "src": "794:29:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 63, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "794:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 66, + "indexed": true, + "name": "newOwner", + "nodeType": "VariableDeclaration", + "scope": 68, + "src": "825:24:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 65, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "825:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "793:57:1" + }, + "src": "767:84:1" + }, + { + "anonymous": false, + "documentation": null, + "id": 72, + "name": "AllowOwnership", + "nodeType": "EventDefinition", + "parameters": { + "id": 71, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 70, + "indexed": true, + "name": "allowedAddress", + "nodeType": "VariableDeclaration", + "scope": 72, + "src": "875:30:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 69, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "875:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "874:32:1" + }, + "src": "854:53:1" + }, + { + "anonymous": false, + "documentation": null, + "id": 76, + "name": "RevokeOwnership", + "nodeType": "EventDefinition", + "parameters": { + "id": 75, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 74, + "indexed": true, + "name": "allowedAddress", + "nodeType": "VariableDeclaration", + "scope": 76, + "src": "932:30:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 73, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "932:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "931:32:1" + }, + "src": "910:54:1" + }, + { + "body": { + "id": 86, + "nodeType": "Block", + "src": "1105:35:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 84, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 79, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1111:5:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 82, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 80, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "1117:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 81, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1117:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1111:17:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 83, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1131:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1111:24:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 85, + "nodeType": "ExpressionStatement", + "src": "1111:24:1" + } + ] + }, + "documentation": "@dev The Ownable constructor sets the original `owner` of the contract to the sender\naccount.", + "id": 87, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 77, + "nodeType": "ParameterList", + "parameters": [], + "src": "1095:2:1" + }, + "payable": false, + "returnParameters": { + "id": 78, + "nodeType": "ParameterList", + "parameters": [], + "src": "1105:0:1" + }, + "scope": 184, + "src": "1084:56:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 98, + "nodeType": "Block", + "src": "1241:105:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 90, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1255:5:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 93, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 91, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "1261:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 92, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1261:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1255:17:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7420616c6c6f7765642062792074686520636f6e74726163742e", + "id": 94, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1274:59:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_8291170cda70aa6a33f032b286d45ac3395ac65762e92264c69af22ca29fa73f", + "typeString": "literal_string \"Error: Transaction sender is not allowed by the contract.\"" + }, + "value": "Error: Transaction sender is not allowed by the contract." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_8291170cda70aa6a33f032b286d45ac3395ac65762e92264c69af22ca29fa73f", + "typeString": "literal_string \"Error: Transaction sender is not allowed by the contract.\"" + } + ], + "id": 89, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "1247:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 95, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1247:87:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 96, + "nodeType": "ExpressionStatement", + "src": "1247:87:1" + }, + { + "id": 97, + "nodeType": "PlaceholderStatement", + "src": "1340:1:1" + } + ] + }, + "documentation": "@dev Throws if called by any account other than the owner.", + "id": 99, + "name": "onlyOwner", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 88, + "nodeType": "ParameterList", + "parameters": [], + "src": "1238:2:1" + }, + "src": "1220:126:1", + "visibility": "internal" + }, + { + "body": { + "id": 138, + "nodeType": "Block", + "src": "1674:206:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 113, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 109, + "name": "newOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 101, + "src": "1688:8:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 111, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1708:1:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 110, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1700:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 112, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1700:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1688:22:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c21", + "id": 114, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1712:33:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0cf773df2ba40d551ba87e95013f067aa808666d9d26ad6f662416df58eb7494", + "typeString": "literal_string \"Error: newOwner cannot be null!\"" + }, + "value": "Error: newOwner cannot be null!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0cf773df2ba40d551ba87e95013f067aa808666d9d26ad6f662416df58eb7494", + "typeString": "literal_string \"Error: newOwner cannot be null!\"" + } + ], + "id": 108, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "1680:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 115, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1680:66:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 116, + "nodeType": "ExpressionStatement", + "src": "1680:66:1" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 118, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "1778:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 119, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1778:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 120, + "name": "newOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 101, + "src": "1790:8:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 117, + "name": "OwnershipTransferred", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 68, + "src": "1757:20:1", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", + "typeString": "function (address,address)" + } + }, + "id": 121, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1757:42:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 122, + "nodeType": "EmitStatement", + "src": "1752:47:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 127, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 123, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1805:5:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 125, + "indexExpression": { + "argumentTypes": null, + "id": 124, + "name": "newOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 101, + "src": "1811:8:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1805:15:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 126, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1823:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1805:22:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 128, + "nodeType": "ExpressionStatement", + "src": "1805:22:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 134, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 129, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1833:5:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 132, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 130, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "1839:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 131, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1839:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1833:17:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 133, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1853:5:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "src": "1833:25:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 135, + "nodeType": "ExpressionStatement", + "src": "1833:25:1" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 136, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1871:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 107, + "id": 137, + "nodeType": "Return", + "src": "1864:11:1" + } + ] + }, + "documentation": "@dev Allows the current owner to transfer control of the contract to a newOwner.\n@param newOwner The address to transfer ownership to.\n@return {\"success\" : \"Returns true when successfully transferred ownership\"}", + "id": 139, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 104, + "modifierName": { + "argumentTypes": null, + "id": 103, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "1641:9:1", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "1641:9:1" + } + ], + "name": "transferOwnership", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 102, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 101, + "name": "newOwner", + "nodeType": "VariableDeclaration", + "scope": 139, + "src": "1616:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 100, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1616:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1615:18:1" + }, + "payable": false, + "returnParameters": { + "id": 107, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 106, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 139, + "src": "1660:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 105, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1660:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1659:14:1" + }, + "scope": 184, + "src": "1589:291:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 160, + "nodeType": "Block", + "src": "2215:97:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 152, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 148, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "2221:5:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 150, + "indexExpression": { + "argumentTypes": null, + "id": 149, + "name": "allowedAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 141, + "src": "2227:14:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2221:21:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 151, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2245:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "2221:28:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 153, + "nodeType": "ExpressionStatement", + "src": "2221:28:1" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 155, + "name": "allowedAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 141, + "src": "2275:14:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 154, + "name": "AllowOwnership", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 72, + "src": "2260:14:1", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 156, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2260:30:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 157, + "nodeType": "EmitStatement", + "src": "2255:35:1" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 158, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2303:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 147, + "id": 159, + "nodeType": "Return", + "src": "2296:11:1" + } + ] + }, + "documentation": "@dev Allows interface contracts and accounts to access contract methods (e.g. Storage contract)\n@param allowedAddress The address of new owner\n@return {\"success\" : \"Returns true when successfully allowed ownership\"}", + "id": 161, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 144, + "modifierName": { + "argumentTypes": null, + "id": 143, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "2182:9:1", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2182:9:1" + } + ], + "name": "allowOwnership", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 142, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 141, + "name": "allowedAddress", + "nodeType": "VariableDeclaration", + "scope": 161, + "src": "2151:22:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 140, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2151:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2150:24:1" + }, + "payable": false, + "returnParameters": { + "id": 147, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 146, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 161, + "src": "2201:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 145, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2201:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2200:14:1" + }, + "scope": 184, + "src": "2127:185:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 182, + "nodeType": "Block", + "src": "2660:99:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 174, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 170, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "2666:5:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 172, + "indexExpression": { + "argumentTypes": null, + "id": 171, + "name": "allowedAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 163, + "src": "2672:14:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2666:21:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 173, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2690:5:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "src": "2666:29:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 175, + "nodeType": "ExpressionStatement", + "src": "2666:29:1" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 177, + "name": "allowedAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 163, + "src": "2722:14:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 176, + "name": "RevokeOwnership", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 76, + "src": "2706:15:1", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 178, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2706:31:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 179, + "nodeType": "EmitStatement", + "src": "2701:36:1" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 180, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2750:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 169, + "id": 181, + "nodeType": "Return", + "src": "2743:11:1" + } + ] + }, + "documentation": "@dev Disallows interface contracts and accounts to access contract methods (e.g. Storage contract)\n@param allowedAddress The address to disallow ownership\n@return {\"success\" : \"Returns true when successfully allowed ownership\"}", + "id": 183, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 166, + "modifierName": { + "argumentTypes": null, + "id": 165, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "2627:9:1", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2627:9:1" + } + ], + "name": "removeOwnership", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 164, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 163, + "name": "allowedAddress", + "nodeType": "VariableDeclaration", + "scope": 183, + "src": "2596:22:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 162, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2596:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2595:24:1" + }, + "payable": false, + "returnParameters": { + "id": 169, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 168, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 183, + "src": "2646:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 167, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2646:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2645:14:1" + }, + "scope": 184, + "src": "2571:188:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 185, + "src": "703:2059:1" + } + ], + "src": "0:2763:1" + }, + "compiler": { + "name": "solc", + "version": "0.4.24+commit.e67f0147.Emscripten.clang" + }, + "networks": {}, + "schemaVersion": "2.0.1", + "updatedAt": "2018-09-18T18:14:09.109Z" +} \ No newline at end of file diff --git a/deployed/mainnet-deprecated/SafeMath.json b/deployed/mainnet-deprecated/SafeMath.json new file mode 100644 index 0000000..59a3efc --- /dev/null +++ b/deployed/mainnet-deprecated/SafeMath.json @@ -0,0 +1,2630 @@ +{ + "contractName": "SafeMath", + "abi": [], + "bytecode": "0x604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f30073000000000000000000000000000000000000000030146080604052600080fd00a165627a7a7230582050f4e221bb4114d8270b88c8af6307ea6c60ecc6f0aaf838d598316e5204a3930029", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fd00a165627a7a7230582050f4e221bb4114d8270b88c8af6307ea6c60ecc6f0aaf838d598316e5204a3930029", + "sourceMap": "119:1597:2:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24", + "deployedSourceMap": "119:1597:2:-;;;;;;;;", + "source": "pragma solidity 0.4.24;\n\n\n/**\n * @title SafeMath\n * @notice Math operations with safety checks that throw on error\n */\nlibrary SafeMath {\n\n /**\n * @notice Multiplies two numbers, throws on overflow.\n * @param a Multiplier\n * @param b Multiplicand\n * @return {\"result\" : \"Returns product\"}\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256 result) {\n if (a == 0) {\n return 0;\n }\n uint256 c = a * b;\n require(c / a == b, \"Error: Unsafe multiplication operation!\");\n return c;\n }\n\n /**\n * @notice Integer division of two numbers, truncating the quotient.\n * @param a Dividend\n * @param b Divisor\n * @return {\"result\" : \"Returns quotient\"}\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256 result) {\n // @dev require(b > 0); // Solidity automatically throws when dividing by 0\n uint256 c = a / b;\n // @dev require(a == b * c + a % b); // There is no case in which this doesn't hold\n return c;\n }\n\n /**\n * @notice Subtracts two numbers, throws on underflow.\n * @param a Subtrahend\n * @param b Minuend\n * @return {\"result\" : \"Returns difference\"}\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256 result) {\n // @dev throws on overflow (i.e. if subtrahend is greater than minuend)\n require(b <= a, \"Error: Unsafe subtraction operation!\");\n return a - b;\n }\n\n /**\n * @notice Adds two numbers, throws on overflow.\n * @param a First addend\n * @param b Second addend\n * @return {\"result\" : \"Returns summation\"}\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256 result) {\n uint256 c = a + b;\n require(c >= a, \"Error: Unsafe addition operation!\");\n return c;\n }\n}\n", + "sourcePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/SafeMath.sol", + "ast": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/SafeMath.sol", + "exportedSymbols": { + "SafeMath": [ + 285 + ] + }, + "id": 286, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 186, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:2" + }, + { + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "documentation": "@title SafeMath\n@notice Math operations with safety checks that throw on error", + "fullyImplemented": true, + "id": 285, + "linearizedBaseContracts": [ + 285 + ], + "name": "SafeMath", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 219, + "nodeType": "Block", + "src": "375:150:2", + "statements": [ + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 197, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 195, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 188, + "src": "385:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 196, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "390:1:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "385:6:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 201, + "nodeType": "IfStatement", + "src": "381:35:2", + "trueBody": { + "id": 200, + "nodeType": "Block", + "src": "393:23:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "hexValue": "30", + "id": 198, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "408:1:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 194, + "id": 199, + "nodeType": "Return", + "src": "401:8:2" + } + ] + } + }, + { + "assignments": [ + 203 + ], + "declarations": [ + { + "constant": false, + "id": 203, + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 220, + "src": "421:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 202, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "421:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 207, + "initialValue": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 206, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 204, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 188, + "src": "433:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "argumentTypes": null, + "id": 205, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 190, + "src": "437:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "433:5:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "421:17:2" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 213, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 211, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 209, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 203, + "src": "452:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 210, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 188, + "src": "456:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "452:5:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 212, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 190, + "src": "461:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "452:10:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e73616665206d756c7469706c69636174696f6e206f7065726174696f6e21", + "id": 214, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "464:41:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_49c093c4aaac6a69427fb8661ed09ebf27cf7be118643b83a9b37c894f827a15", + "typeString": "literal_string \"Error: Unsafe multiplication operation!\"" + }, + "value": "Error: Unsafe multiplication operation!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_49c093c4aaac6a69427fb8661ed09ebf27cf7be118643b83a9b37c894f827a15", + "typeString": "literal_string \"Error: Unsafe multiplication operation!\"" + } + ], + "id": 208, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "444:7:2", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 215, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "444:62:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 216, + "nodeType": "ExpressionStatement", + "src": "444:62:2" + }, + { + "expression": { + "argumentTypes": null, + "id": 217, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 203, + "src": "519:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 194, + "id": 218, + "nodeType": "Return", + "src": "512:8:2" + } + ] + }, + "documentation": "@notice Multiplies two numbers, throws on overflow.\n@param a Multiplier\n@param b Multiplicand\n@return {\"result\" : \"Returns product\"}", + "id": 220, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "mul", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 191, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 188, + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 220, + "src": "314:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 187, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "314:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 190, + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 220, + "src": "325:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 189, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "325:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "313:22:2" + }, + "payable": false, + "returnParameters": { + "id": 194, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 193, + "name": "result", + "nodeType": "VariableDeclaration", + "scope": 220, + "src": "359:14:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 192, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "359:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "358:16:2" + }, + "scope": 285, + "src": "301:224:2", + "stateMutability": "pure", + "superFunction": null, + "visibility": "internal" + }, + { + "body": { + "id": 237, + "nodeType": "Block", + "src": "771:210:2", + "statements": [ + { + "assignments": [ + 230 + ], + "declarations": [ + { + "constant": false, + "id": 230, + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 238, + "src": "857:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 229, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "857:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 234, + "initialValue": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 233, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 231, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 222, + "src": "869:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 232, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 224, + "src": "873:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "869:5:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "857:17:2" + }, + { + "expression": { + "argumentTypes": null, + "id": 235, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 230, + "src": "975:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 228, + "id": 236, + "nodeType": "Return", + "src": "968:8:2" + } + ] + }, + "documentation": "@notice Integer division of two numbers, truncating the quotient.\n@param a Dividend\n@param b Divisor\n@return {\"result\" : \"Returns quotient\"}", + "id": 238, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "div", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 225, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 222, + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 238, + "src": "710:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 221, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "710:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 224, + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 238, + "src": "721:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 223, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "721:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "709:22:2" + }, + "payable": false, + "returnParameters": { + "id": 228, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 227, + "name": "result", + "nodeType": "VariableDeclaration", + "scope": 238, + "src": "755:14:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 226, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "755:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "754:16:2" + }, + "scope": 285, + "src": "697:284:2", + "stateMutability": "pure", + "superFunction": null, + "visibility": "internal" + }, + { + "body": { + "id": 258, + "nodeType": "Block", + "src": "1217:160:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 250, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 248, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 242, + "src": "1307:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "argumentTypes": null, + "id": 249, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 240, + "src": "1312:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1307:6:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e73616665207375627472616374696f6e206f7065726174696f6e21", + "id": 251, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1315:38:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f18cbb1620e3a8d0fe2c5bbe86168dc13c8076938e9197b95da6e0f94a6aec73", + "typeString": "literal_string \"Error: Unsafe subtraction operation!\"" + }, + "value": "Error: Unsafe subtraction operation!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_f18cbb1620e3a8d0fe2c5bbe86168dc13c8076938e9197b95da6e0f94a6aec73", + "typeString": "literal_string \"Error: Unsafe subtraction operation!\"" + } + ], + "id": 247, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "1299:7:2", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 252, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1299:55:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 253, + "nodeType": "ExpressionStatement", + "src": "1299:55:2" + }, + { + "expression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 256, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 254, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 240, + "src": "1367:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "argumentTypes": null, + "id": 255, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 242, + "src": "1371:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1367:5:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 246, + "id": 257, + "nodeType": "Return", + "src": "1360:12:2" + } + ] + }, + "documentation": "@notice Subtracts two numbers, throws on underflow.\n@param a Subtrahend\n@param b Minuend\n@return {\"result\" : \"Returns difference\"}", + "id": 259, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "sub", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 243, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 240, + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 259, + "src": "1156:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 239, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1156:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 242, + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 259, + "src": "1167:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 241, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1167:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1155:22:2" + }, + "payable": false, + "returnParameters": { + "id": 246, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 245, + "name": "result", + "nodeType": "VariableDeclaration", + "scope": 259, + "src": "1201:14:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 244, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1201:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1200:16:2" + }, + "scope": 285, + "src": "1143:234:2", + "stateMutability": "pure", + "superFunction": null, + "visibility": "internal" + }, + { + "body": { + "id": 283, + "nodeType": "Block", + "src": "1614:100:2", + "statements": [ + { + "assignments": [ + 269 + ], + "declarations": [ + { + "constant": false, + "id": 269, + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 284, + "src": "1620:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 268, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1620:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 273, + "initialValue": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 272, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 270, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 261, + "src": "1632:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "argumentTypes": null, + "id": 271, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 263, + "src": "1636:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1632:5:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1620:17:2" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 277, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 275, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 269, + "src": "1651:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "argumentTypes": null, + "id": 276, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 261, + "src": "1656:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1651:6:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e73616665206164646974696f6e206f7065726174696f6e21", + "id": 278, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1659:35:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_dac03c1cef2f037b40233270a73516c3c6e3467d614e4cdde1fac39b0472de4a", + "typeString": "literal_string \"Error: Unsafe addition operation!\"" + }, + "value": "Error: Unsafe addition operation!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_dac03c1cef2f037b40233270a73516c3c6e3467d614e4cdde1fac39b0472de4a", + "typeString": "literal_string \"Error: Unsafe addition operation!\"" + } + ], + "id": 274, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "1643:7:2", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 279, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1643:52:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 280, + "nodeType": "ExpressionStatement", + "src": "1643:52:2" + }, + { + "expression": { + "argumentTypes": null, + "id": 281, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 269, + "src": "1708:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 267, + "id": 282, + "nodeType": "Return", + "src": "1701:8:2" + } + ] + }, + "documentation": "@notice Adds two numbers, throws on overflow.\n@param a First addend\n@param b Second addend\n@return {\"result\" : \"Returns summation\"}", + "id": 284, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "add", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 264, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 261, + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 284, + "src": "1553:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 260, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1553:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 263, + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 284, + "src": "1564:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 262, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1564:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1552:22:2" + }, + "payable": false, + "returnParameters": { + "id": 267, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 266, + "name": "result", + "nodeType": "VariableDeclaration", + "scope": 284, + "src": "1598:14:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 265, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1598:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1597:16:2" + }, + "scope": 285, + "src": "1540:174:2", + "stateMutability": "pure", + "superFunction": null, + "visibility": "internal" + } + ], + "scope": 286, + "src": "119:1597:2" + } + ], + "src": "0:1717:2" + }, + "legacyAST": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/SafeMath.sol", + "exportedSymbols": { + "SafeMath": [ + 285 + ] + }, + "id": 286, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 186, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:2" + }, + { + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "documentation": "@title SafeMath\n@notice Math operations with safety checks that throw on error", + "fullyImplemented": true, + "id": 285, + "linearizedBaseContracts": [ + 285 + ], + "name": "SafeMath", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 219, + "nodeType": "Block", + "src": "375:150:2", + "statements": [ + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 197, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 195, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 188, + "src": "385:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 196, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "390:1:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "385:6:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 201, + "nodeType": "IfStatement", + "src": "381:35:2", + "trueBody": { + "id": 200, + "nodeType": "Block", + "src": "393:23:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "hexValue": "30", + "id": 198, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "408:1:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 194, + "id": 199, + "nodeType": "Return", + "src": "401:8:2" + } + ] + } + }, + { + "assignments": [ + 203 + ], + "declarations": [ + { + "constant": false, + "id": 203, + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 220, + "src": "421:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 202, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "421:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 207, + "initialValue": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 206, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 204, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 188, + "src": "433:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "argumentTypes": null, + "id": 205, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 190, + "src": "437:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "433:5:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "421:17:2" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 213, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 211, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 209, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 203, + "src": "452:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 210, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 188, + "src": "456:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "452:5:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 212, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 190, + "src": "461:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "452:10:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e73616665206d756c7469706c69636174696f6e206f7065726174696f6e21", + "id": 214, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "464:41:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_49c093c4aaac6a69427fb8661ed09ebf27cf7be118643b83a9b37c894f827a15", + "typeString": "literal_string \"Error: Unsafe multiplication operation!\"" + }, + "value": "Error: Unsafe multiplication operation!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_49c093c4aaac6a69427fb8661ed09ebf27cf7be118643b83a9b37c894f827a15", + "typeString": "literal_string \"Error: Unsafe multiplication operation!\"" + } + ], + "id": 208, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "444:7:2", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 215, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "444:62:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 216, + "nodeType": "ExpressionStatement", + "src": "444:62:2" + }, + { + "expression": { + "argumentTypes": null, + "id": 217, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 203, + "src": "519:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 194, + "id": 218, + "nodeType": "Return", + "src": "512:8:2" + } + ] + }, + "documentation": "@notice Multiplies two numbers, throws on overflow.\n@param a Multiplier\n@param b Multiplicand\n@return {\"result\" : \"Returns product\"}", + "id": 220, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "mul", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 191, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 188, + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 220, + "src": "314:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 187, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "314:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 190, + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 220, + "src": "325:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 189, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "325:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "313:22:2" + }, + "payable": false, + "returnParameters": { + "id": 194, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 193, + "name": "result", + "nodeType": "VariableDeclaration", + "scope": 220, + "src": "359:14:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 192, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "359:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "358:16:2" + }, + "scope": 285, + "src": "301:224:2", + "stateMutability": "pure", + "superFunction": null, + "visibility": "internal" + }, + { + "body": { + "id": 237, + "nodeType": "Block", + "src": "771:210:2", + "statements": [ + { + "assignments": [ + 230 + ], + "declarations": [ + { + "constant": false, + "id": 230, + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 238, + "src": "857:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 229, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "857:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 234, + "initialValue": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 233, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 231, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 222, + "src": "869:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 232, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 224, + "src": "873:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "869:5:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "857:17:2" + }, + { + "expression": { + "argumentTypes": null, + "id": 235, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 230, + "src": "975:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 228, + "id": 236, + "nodeType": "Return", + "src": "968:8:2" + } + ] + }, + "documentation": "@notice Integer division of two numbers, truncating the quotient.\n@param a Dividend\n@param b Divisor\n@return {\"result\" : \"Returns quotient\"}", + "id": 238, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "div", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 225, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 222, + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 238, + "src": "710:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 221, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "710:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 224, + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 238, + "src": "721:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 223, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "721:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "709:22:2" + }, + "payable": false, + "returnParameters": { + "id": 228, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 227, + "name": "result", + "nodeType": "VariableDeclaration", + "scope": 238, + "src": "755:14:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 226, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "755:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "754:16:2" + }, + "scope": 285, + "src": "697:284:2", + "stateMutability": "pure", + "superFunction": null, + "visibility": "internal" + }, + { + "body": { + "id": 258, + "nodeType": "Block", + "src": "1217:160:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 250, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 248, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 242, + "src": "1307:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "argumentTypes": null, + "id": 249, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 240, + "src": "1312:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1307:6:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e73616665207375627472616374696f6e206f7065726174696f6e21", + "id": 251, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1315:38:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f18cbb1620e3a8d0fe2c5bbe86168dc13c8076938e9197b95da6e0f94a6aec73", + "typeString": "literal_string \"Error: Unsafe subtraction operation!\"" + }, + "value": "Error: Unsafe subtraction operation!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_f18cbb1620e3a8d0fe2c5bbe86168dc13c8076938e9197b95da6e0f94a6aec73", + "typeString": "literal_string \"Error: Unsafe subtraction operation!\"" + } + ], + "id": 247, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "1299:7:2", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 252, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1299:55:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 253, + "nodeType": "ExpressionStatement", + "src": "1299:55:2" + }, + { + "expression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 256, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 254, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 240, + "src": "1367:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "argumentTypes": null, + "id": 255, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 242, + "src": "1371:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1367:5:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 246, + "id": 257, + "nodeType": "Return", + "src": "1360:12:2" + } + ] + }, + "documentation": "@notice Subtracts two numbers, throws on underflow.\n@param a Subtrahend\n@param b Minuend\n@return {\"result\" : \"Returns difference\"}", + "id": 259, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "sub", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 243, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 240, + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 259, + "src": "1156:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 239, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1156:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 242, + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 259, + "src": "1167:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 241, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1167:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1155:22:2" + }, + "payable": false, + "returnParameters": { + "id": 246, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 245, + "name": "result", + "nodeType": "VariableDeclaration", + "scope": 259, + "src": "1201:14:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 244, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1201:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1200:16:2" + }, + "scope": 285, + "src": "1143:234:2", + "stateMutability": "pure", + "superFunction": null, + "visibility": "internal" + }, + { + "body": { + "id": 283, + "nodeType": "Block", + "src": "1614:100:2", + "statements": [ + { + "assignments": [ + 269 + ], + "declarations": [ + { + "constant": false, + "id": 269, + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 284, + "src": "1620:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 268, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1620:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 273, + "initialValue": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 272, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 270, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 261, + "src": "1632:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "argumentTypes": null, + "id": 271, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 263, + "src": "1636:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1632:5:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1620:17:2" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 277, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 275, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 269, + "src": "1651:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "argumentTypes": null, + "id": 276, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 261, + "src": "1656:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1651:6:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e73616665206164646974696f6e206f7065726174696f6e21", + "id": 278, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1659:35:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_dac03c1cef2f037b40233270a73516c3c6e3467d614e4cdde1fac39b0472de4a", + "typeString": "literal_string \"Error: Unsafe addition operation!\"" + }, + "value": "Error: Unsafe addition operation!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_dac03c1cef2f037b40233270a73516c3c6e3467d614e4cdde1fac39b0472de4a", + "typeString": "literal_string \"Error: Unsafe addition operation!\"" + } + ], + "id": 274, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "1643:7:2", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 279, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1643:52:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 280, + "nodeType": "ExpressionStatement", + "src": "1643:52:2" + }, + { + "expression": { + "argumentTypes": null, + "id": 281, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 269, + "src": "1708:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 267, + "id": 282, + "nodeType": "Return", + "src": "1701:8:2" + } + ] + }, + "documentation": "@notice Adds two numbers, throws on overflow.\n@param a First addend\n@param b Second addend\n@return {\"result\" : \"Returns summation\"}", + "id": 284, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "add", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 264, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 261, + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 284, + "src": "1553:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 260, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1553:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 263, + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 284, + "src": "1564:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 262, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1564:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1552:22:2" + }, + "payable": false, + "returnParameters": { + "id": 267, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 266, + "name": "result", + "nodeType": "VariableDeclaration", + "scope": 284, + "src": "1598:14:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 265, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1598:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1597:16:2" + }, + "scope": 285, + "src": "1540:174:2", + "stateMutability": "pure", + "superFunction": null, + "visibility": "internal" + } + ], + "scope": 286, + "src": "119:1597:2" + } + ], + "src": "0:1717:2" + }, + "compiler": { + "name": "solc", + "version": "0.4.24+commit.e67f0147.Emscripten.clang" + }, + "networks": { + "1": { + "events": {}, + "links": {}, + "address": "0x2a171070a2a1eb945cda041326a0516d728ac45b", + "transactionHash": "0x3eeafe8ad9a6eba728dcba9ff2676fdae91de48d0a2d37186bdce8505745c918" + } + }, + "schemaVersion": "2.0.1", + "updatedAt": "2018-09-18T18:57:45.565Z" +} \ No newline at end of file diff --git a/deployed/mainnet-deprecated/TokenIOAuthority.json b/deployed/mainnet-deprecated/TokenIOAuthority.json new file mode 100644 index 0000000..139676f --- /dev/null +++ b/deployed/mainnet-deprecated/TokenIOAuthority.json @@ -0,0 +1,5066 @@ +{ + "contractName": "TokenIOAuthority", + "abi": [ + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "allowOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "removeOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "", + "type": "address" + } + ], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "name": "_storageContract", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "AllowOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "RevokeOwnership", + "type": "event" + }, + { + "constant": false, + "inputs": [ + { + "name": "firmName", + "type": "string" + }, + { + "name": "_authorized", + "type": "bool" + } + ], + "name": "setRegisteredFirm", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "firmName", + "type": "string" + }, + { + "name": "authority", + "type": "address" + }, + { + "name": "_authorized", + "type": "bool" + } + ], + "name": "setRegisteredAuthority", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "authority", + "type": "address" + } + ], + "name": "getFirmFromAuthority", + "outputs": [ + { + "name": "firm", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "firmName", + "type": "string" + } + ], + "name": "isRegisteredFirm", + "outputs": [ + { + "name": "status", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "firmName", + "type": "string" + }, + { + "name": "authority", + "type": "address" + } + ], + "name": "isRegisteredToFirm", + "outputs": [ + { + "name": "registered", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "authority", + "type": "address" + } + ], + "name": "isRegisteredAuthority", + "outputs": [ + { + "name": "registered", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "feeContract", + "type": "address" + } + ], + "name": "setMasterFeeContract", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051602080611d64833981016040908152905133600090815260208190529182208054600160ff19918216811783558054600160a060020a031916600160a060020a039094169390931783558154169091179055611cee90819061007690396000f3006080604052600436106100ae5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663339282b781146100b3578063339e2c45146100e857806341ade6b71461014c5780634bbc142c146101a9578063666a3427146101ca578063666e1b39146101eb578063acca2c241461020c578063ee5493b6146102a2578063f03529c3146102fb578063f2fde38b1461031c578063f3f969a01461033d575b600080fd5b3480156100bf57600080fd5b506100d4600160a060020a03600435166103a6565b604080519115158252519081900360200190f35b3480156100f457600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100d494369492936024939284019190819084018382808284375094975050509235600160a060020a031693506103bf92505050565b34801561015857600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100d49436949293602493928401919081908401838280828437509497505050509135151592506103da915050565b3480156101b557600080fd5b506100d4600160a060020a036004351661056c565b3480156101d657600080fd5b506100d4600160a060020a0360043516610628565b3480156101f757600080fd5b506100d4600160a060020a03600435166106e1565b34801561021857600080fd5b5061022d600160a060020a03600435166106f6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561026757818101518382015260200161024f565b50505050905090810190601f1680156102945780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102ae57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100d49436949293602493928401919081908401838280828437509497506107099650505050505050565b34801561030757600080fd5b506100d4600160a060020a036004351661071c565b34801561032857600080fd5b506100d4600160a060020a0360043516610842565b34801561034957600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100d494369492936024939284019190819084018382808284375094975050600160a060020a0385351695505050505060200135151561097c565b60006103b960018363ffffffff610aac16565b92915050565b60006103d36001848463ffffffff610c7216565b9392505050565b336000818152602081905260408120549091849160ff168061040957506104096001838363ffffffff610c7216565b15156104ab576040805160e560020a62461bcd02815260206004820152604660248201527f4572726f723a205472616e73616374696f6e2073656e64657220646f6573206e60448201527f6f742068617665207065726d697373696f6e20666f722074686973206f70657260648201527f6174696f6e210000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6104bd6001868663ffffffff610e2716565b151561055f576040805160e560020a62461bcd02815260206004820152605260248201527f4572726f723a204661696c656420746f207265676973746572206669726d207760448201527f6974682073746f7261676520636f6e74726163742120506c656173652063686560648201527f636b20796f757220617267756d656e74732e0000000000000000000000000000608482015290519081900360a40190fd5b600192505b505092915050565b3360009081526020819052604081205460ff1615156105d7576040805160e560020a62461bcd0281526020600482015260396024820152600080516020611ca38339815191526044820152600080516020611c63833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b3360009081526020819052604081205460ff161515610693576040805160e560020a62461bcd0281526020600482015260396024820152600080516020611ca38339815191526044820152600080516020611c63833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b60606103b960018363ffffffff61106a16565b60006103b960018363ffffffff61122f16565b3360009081526020819052604081205460ff161515610787576040805160e560020a62461bcd0281526020600482015260396024820152600080516020611ca38339815191526044820152600080516020611c63833981519152606482015290519081900360840190fd5b61079860018363ffffffff6112ef16565b151561083a576040805160e560020a62461bcd02815260206004820152606060248201527f4572726f723a20556e61626c6520746f20736574206d6173746572206665652060448201527f636f6e74726163742e20506c6561736520656e737572652066656520636f6e7460648201527f72616374206861732074686520636f727265637420706172616d65746572732e608482015290519081900360a40190fd5b506001919050565b3360009081526020819052604081205460ff1615156108ad576040805160e560020a62461bcd0281526020600482015260396024820152600080516020611ca38339815191526044820152600080516020611c63833981519152606482015290519081900360840190fd5b600160a060020a038216151561090d576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b336000818152602081905260408120549091859160ff16806109ab57506109ab6001838363ffffffff610c7216565b1515610a4d576040805160e560020a62461bcd02815260206004820152604660248201527f4572726f723a205472616e73616374696f6e2073656e64657220646f6573206e60448201527f6f742068617665207065726d697373696f6e20666f722074686973206f70657260648201527f6174696f6e210000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b610a60600187878763ffffffff6114e316565b1515610aa05760405160e560020a62461bcd0281526004018080602001828103825260b2815260200180611bb160b2913960c00191505060405180910390fd5b50600195945050505050565b600080610ac284610abd8686611a39565b61106a565b610acc8585611a39565b60405160200180807f726567697374657265642e617574686f7269747900000000000000000000000081525060140183805190602001908083835b60208310610b265780518252601f199092019160209182019101610b07565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610bb15780518252601f199092019160209182019101610b92565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547f7ae1cfca000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a039094169550637ae1cfca945060248083019491935090918290030181600087803b158015610c3e57600080fd5b505af1158015610c52573d6000803e3d6000fd5b505050506040513d6020811015610c6857600080fd5b5051949350505050565b60008083610c808685611a39565b60405160200180807f726567697374657265642e617574686f7269747900000000000000000000000081525060140183805190602001908083835b60208310610cda5780518252601f199092019160209182019101610cbb565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610d655780518252601f199092019160209182019101610d46565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f7ae1cfca000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a039094169550637ae1cfca945060248083019491935090918290030181600087803b158015610df257600080fd5b505af1158015610e06573d6000803e3d6000fd5b505050506040513d6020811015610e1c57600080fd5b505195945050505050565b6000808360405160200180807f726567697374657265642e6669726d0000000000000000000000000000000000815250600f0182805190602001908083835b60208310610e855780518252601f199092019160209182019101610e66565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310610ee85780518252601f199092019160209182019101610ec9565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547fabfdcced000000000000000000000000000000000000000000000000000000008452600484018290528a151560248501529451909750600160a060020a03909416955063abfdcced945060448083019491935090918290030181600087803b158015610f7d57600080fd5b505af1158015610f91573d6000803e3d6000fd5b505050506040513d6020811015610fa757600080fd5b5051151561105f576040805160e560020a62461bcd0281526020600482015260696024820152600080516020611c8383398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b506001949350505050565b606060006110788484611a39565b60405160200180807f726567697374657265642e617574686f726974792e6669726d0000000000000081525060190182600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b6020831061110f5780518252601f1990920191602091820191016110f0565b5181516020939093036101000a60001901801990911692169190911790526040805191909301819003812089547f986e791a000000000000000000000000000000000000000000000000000000008352600483018290529351909650600160a060020a03909316945063986e791a9350602480820193600093509182900301818387803b15801561119f57600080fd5b505af11580156111b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156111dc57600080fd5b8101908080516401000000008111156111f457600080fd5b8201602081018481111561120757600080fd5b815164010000000081118282018710171561122157600080fd5b509098975050505050505050565b6000808260405160200180807f726567697374657265642e6669726d0000000000000000000000000000000000815250600f0182805190602001908083835b6020831061128d5780518252601f19909201916020918201910161126e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405260405180828051906020019080838360208310610bb15780518252601f199092019160209182019101610b92565b60008060405160200180807f6665652e636f6e74726163742e6d61737465720000000000000000000000000081525060130190506040516020818303038152906040526040518082805190602001908083835b602083106113615780518252601f199092019160209182019101611342565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547fca446dd900000000000000000000000000000000000000000000000000000000845260048401829052600160a060020a038b81166024860152955191985094909416955063ca446dd9945060448083019491935090918290030181600087803b1580156113f757600080fd5b505af115801561140b573d6000803e3d6000fd5b505050506040513d602081101561142157600080fd5b505115156114d9576040805160e560020a62461bcd0281526020600482015260686024820152600080516020611c8383398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b5060019392505050565b60008060006114f2878761122f565b151561156e576040805160e560020a62461bcd02815260206004820152602760248201527f4572726f723a20606973737565724669726d60206d757374206265207265676960448201527f7374657265642e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b858560405160200180807f726567697374657265642e617574686f7269747900000000000000000000000081525060140183805190602001908083835b602083106115ca5780518252601f1990920191602091820191016115ab565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106116555780518252601f199092019160209182019101611636565b51815160209384036101000a6000190180199092169116179052604080519290940182900382207f726567697374657265642e617574686f726974792e6669726d0000000000000083830152600160a060020a038c166c010000000000000000000000000260398401528451808403602d018152604d9093019485905282519098509195509293508392850191508083835b602083106117065780518252601f1990920191602091820191016116e7565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208d547fabfdcced000000000000000000000000000000000000000000000000000000008452600484018a90528b151560248501529451909750600160a060020a03909416955063abfdcced945060448083019491935090918290030181600087803b15801561179b57600080fd5b505af11580156117af573d6000803e3d6000fd5b505050506040513d60208110156117c557600080fd5b5051151561187d576040805160e560020a62461bcd0281526020600482015260696024820152600080516020611c8383398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b8654604080517f6e8995500000000000000000000000000000000000000000000000000000000081526004810184815260248201928352895160448301528951600160a060020a0390941693636e8995509386938c9392606490910190602085019080838360005b838110156118fd5781810151838201526020016118e5565b50505050905090810190601f16801561192a5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15801561194a57600080fd5b505af115801561195e573d6000803e3d6000fd5b505050506040513d602081101561197457600080fd5b50511515611a2c576040805160e560020a62461bcd0281526020600482015260696024820152600080516020611c8383398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b5060019695505050505050565b60008060008360405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611ad65780518252601f199092019160209182019101611ab7565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015611b6357600080fd5b505af1158015611b77573d6000803e3d6000fd5b505050506040513d6020811015611b8d57600080fd5b50519050600160a060020a03811615611ba857809250610564565b83925061056456004572726f723a204661696c656420746f20726567697374657220617574686f7269747920666f7220697373756572206669726d20776974682073746f7261676520636f6e74726163742120506c6561736520636865636b20796f757220617267756d656e747320616e6420656e73757265206669726d4e616d652069732072656769737465726564206265666f726520616c6c6f77696e6720616e20617574686f72697479206f662073616964206669726d20616c6c6f7765642062792074686520636f6e74726163742e000000000000004572726f723a20556e61626c6520746f207365742073746f726167652076616c4572726f723a205472616e73616374696f6e2073656e646572206973206e6f74a165627a7a72305820c63567ca5f96382038fa1dd4daa39dbde12f257c3f669d7b7afc85f74e1bbffe0029", + "deployedBytecode": "0x6080604052600436106100ae5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663339282b781146100b3578063339e2c45146100e857806341ade6b71461014c5780634bbc142c146101a9578063666a3427146101ca578063666e1b39146101eb578063acca2c241461020c578063ee5493b6146102a2578063f03529c3146102fb578063f2fde38b1461031c578063f3f969a01461033d575b600080fd5b3480156100bf57600080fd5b506100d4600160a060020a03600435166103a6565b604080519115158252519081900360200190f35b3480156100f457600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100d494369492936024939284019190819084018382808284375094975050509235600160a060020a031693506103bf92505050565b34801561015857600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100d49436949293602493928401919081908401838280828437509497505050509135151592506103da915050565b3480156101b557600080fd5b506100d4600160a060020a036004351661056c565b3480156101d657600080fd5b506100d4600160a060020a0360043516610628565b3480156101f757600080fd5b506100d4600160a060020a03600435166106e1565b34801561021857600080fd5b5061022d600160a060020a03600435166106f6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561026757818101518382015260200161024f565b50505050905090810190601f1680156102945780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102ae57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100d49436949293602493928401919081908401838280828437509497506107099650505050505050565b34801561030757600080fd5b506100d4600160a060020a036004351661071c565b34801561032857600080fd5b506100d4600160a060020a0360043516610842565b34801561034957600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100d494369492936024939284019190819084018382808284375094975050600160a060020a0385351695505050505060200135151561097c565b60006103b960018363ffffffff610aac16565b92915050565b60006103d36001848463ffffffff610c7216565b9392505050565b336000818152602081905260408120549091849160ff168061040957506104096001838363ffffffff610c7216565b15156104ab576040805160e560020a62461bcd02815260206004820152604660248201527f4572726f723a205472616e73616374696f6e2073656e64657220646f6573206e60448201527f6f742068617665207065726d697373696f6e20666f722074686973206f70657260648201527f6174696f6e210000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6104bd6001868663ffffffff610e2716565b151561055f576040805160e560020a62461bcd02815260206004820152605260248201527f4572726f723a204661696c656420746f207265676973746572206669726d207760448201527f6974682073746f7261676520636f6e74726163742120506c656173652063686560648201527f636b20796f757220617267756d656e74732e0000000000000000000000000000608482015290519081900360a40190fd5b600192505b505092915050565b3360009081526020819052604081205460ff1615156105d7576040805160e560020a62461bcd0281526020600482015260396024820152600080516020611ca38339815191526044820152600080516020611c63833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b3360009081526020819052604081205460ff161515610693576040805160e560020a62461bcd0281526020600482015260396024820152600080516020611ca38339815191526044820152600080516020611c63833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b60606103b960018363ffffffff61106a16565b60006103b960018363ffffffff61122f16565b3360009081526020819052604081205460ff161515610787576040805160e560020a62461bcd0281526020600482015260396024820152600080516020611ca38339815191526044820152600080516020611c63833981519152606482015290519081900360840190fd5b61079860018363ffffffff6112ef16565b151561083a576040805160e560020a62461bcd02815260206004820152606060248201527f4572726f723a20556e61626c6520746f20736574206d6173746572206665652060448201527f636f6e74726163742e20506c6561736520656e737572652066656520636f6e7460648201527f72616374206861732074686520636f727265637420706172616d65746572732e608482015290519081900360a40190fd5b506001919050565b3360009081526020819052604081205460ff1615156108ad576040805160e560020a62461bcd0281526020600482015260396024820152600080516020611ca38339815191526044820152600080516020611c63833981519152606482015290519081900360840190fd5b600160a060020a038216151561090d576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b336000818152602081905260408120549091859160ff16806109ab57506109ab6001838363ffffffff610c7216565b1515610a4d576040805160e560020a62461bcd02815260206004820152604660248201527f4572726f723a205472616e73616374696f6e2073656e64657220646f6573206e60448201527f6f742068617665207065726d697373696f6e20666f722074686973206f70657260648201527f6174696f6e210000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b610a60600187878763ffffffff6114e316565b1515610aa05760405160e560020a62461bcd0281526004018080602001828103825260b2815260200180611bb160b2913960c00191505060405180910390fd5b50600195945050505050565b600080610ac284610abd8686611a39565b61106a565b610acc8585611a39565b60405160200180807f726567697374657265642e617574686f7269747900000000000000000000000081525060140183805190602001908083835b60208310610b265780518252601f199092019160209182019101610b07565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610bb15780518252601f199092019160209182019101610b92565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547f7ae1cfca000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a039094169550637ae1cfca945060248083019491935090918290030181600087803b158015610c3e57600080fd5b505af1158015610c52573d6000803e3d6000fd5b505050506040513d6020811015610c6857600080fd5b5051949350505050565b60008083610c808685611a39565b60405160200180807f726567697374657265642e617574686f7269747900000000000000000000000081525060140183805190602001908083835b60208310610cda5780518252601f199092019160209182019101610cbb565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610d655780518252601f199092019160209182019101610d46565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f7ae1cfca000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a039094169550637ae1cfca945060248083019491935090918290030181600087803b158015610df257600080fd5b505af1158015610e06573d6000803e3d6000fd5b505050506040513d6020811015610e1c57600080fd5b505195945050505050565b6000808360405160200180807f726567697374657265642e6669726d0000000000000000000000000000000000815250600f0182805190602001908083835b60208310610e855780518252601f199092019160209182019101610e66565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310610ee85780518252601f199092019160209182019101610ec9565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547fabfdcced000000000000000000000000000000000000000000000000000000008452600484018290528a151560248501529451909750600160a060020a03909416955063abfdcced945060448083019491935090918290030181600087803b158015610f7d57600080fd5b505af1158015610f91573d6000803e3d6000fd5b505050506040513d6020811015610fa757600080fd5b5051151561105f576040805160e560020a62461bcd0281526020600482015260696024820152600080516020611c8383398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b506001949350505050565b606060006110788484611a39565b60405160200180807f726567697374657265642e617574686f726974792e6669726d0000000000000081525060190182600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b6020831061110f5780518252601f1990920191602091820191016110f0565b5181516020939093036101000a60001901801990911692169190911790526040805191909301819003812089547f986e791a000000000000000000000000000000000000000000000000000000008352600483018290529351909650600160a060020a03909316945063986e791a9350602480820193600093509182900301818387803b15801561119f57600080fd5b505af11580156111b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156111dc57600080fd5b8101908080516401000000008111156111f457600080fd5b8201602081018481111561120757600080fd5b815164010000000081118282018710171561122157600080fd5b509098975050505050505050565b6000808260405160200180807f726567697374657265642e6669726d0000000000000000000000000000000000815250600f0182805190602001908083835b6020831061128d5780518252601f19909201916020918201910161126e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405260405180828051906020019080838360208310610bb15780518252601f199092019160209182019101610b92565b60008060405160200180807f6665652e636f6e74726163742e6d61737465720000000000000000000000000081525060130190506040516020818303038152906040526040518082805190602001908083835b602083106113615780518252601f199092019160209182019101611342565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547fca446dd900000000000000000000000000000000000000000000000000000000845260048401829052600160a060020a038b81166024860152955191985094909416955063ca446dd9945060448083019491935090918290030181600087803b1580156113f757600080fd5b505af115801561140b573d6000803e3d6000fd5b505050506040513d602081101561142157600080fd5b505115156114d9576040805160e560020a62461bcd0281526020600482015260686024820152600080516020611c8383398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b5060019392505050565b60008060006114f2878761122f565b151561156e576040805160e560020a62461bcd02815260206004820152602760248201527f4572726f723a20606973737565724669726d60206d757374206265207265676960448201527f7374657265642e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b858560405160200180807f726567697374657265642e617574686f7269747900000000000000000000000081525060140183805190602001908083835b602083106115ca5780518252601f1990920191602091820191016115ab565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106116555780518252601f199092019160209182019101611636565b51815160209384036101000a6000190180199092169116179052604080519290940182900382207f726567697374657265642e617574686f726974792e6669726d0000000000000083830152600160a060020a038c166c010000000000000000000000000260398401528451808403602d018152604d9093019485905282519098509195509293508392850191508083835b602083106117065780518252601f1990920191602091820191016116e7565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208d547fabfdcced000000000000000000000000000000000000000000000000000000008452600484018a90528b151560248501529451909750600160a060020a03909416955063abfdcced945060448083019491935090918290030181600087803b15801561179b57600080fd5b505af11580156117af573d6000803e3d6000fd5b505050506040513d60208110156117c557600080fd5b5051151561187d576040805160e560020a62461bcd0281526020600482015260696024820152600080516020611c8383398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b8654604080517f6e8995500000000000000000000000000000000000000000000000000000000081526004810184815260248201928352895160448301528951600160a060020a0390941693636e8995509386938c9392606490910190602085019080838360005b838110156118fd5781810151838201526020016118e5565b50505050905090810190601f16801561192a5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15801561194a57600080fd5b505af115801561195e573d6000803e3d6000fd5b505050506040513d602081101561197457600080fd5b50511515611a2c576040805160e560020a62461bcd0281526020600482015260696024820152600080516020611c8383398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b5060019695505050505050565b60008060008360405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611ad65780518252601f199092019160209182019101611ab7565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015611b6357600080fd5b505af1158015611b77573d6000803e3d6000fd5b505050506040513d6020811015611b8d57600080fd5b50519050600160a060020a03811615611ba857809250610564565b83925061056456004572726f723a204661696c656420746f20726567697374657220617574686f7269747920666f7220697373756572206669726d20776974682073746f7261676520636f6e74726163742120506c6561736520636865636b20796f757220617267756d656e747320616e6420656e73757265206669726d4e616d652069732072656769737465726564206265666f726520616c6c6f77696e6720616e20617574686f72697479206f662073616964206669726d20616c6c6f7765642062792074686520636f6e74726163742e000000000000004572726f723a20556e61626c6520746f207365742073746f726167652076616c4572726f723a205472616e73616374696f6e2073656e646572206973206e6f74a165627a7a72305820c63567ca5f96382038fa1dd4daa39dbde12f257c3f669d7b7afc85f74e1bbffe0029", + "sourceMap": "871:4829:3:-;;;1214:515;8:9:-1;5:2;;;30:1;27;20:12;5:2;1214:515:3;;;;;;;;;;;;;;;;1117:10:1;1111:5;:17;;;1214:515:3;1111:17:1;;;;;;:24;;1131:4;-1:-1:-1;;1111:24:1;;;;;;;1592:46:3;;-1:-1:-1;;;;;;1592:46:3;-1:-1:-1;;;;;1592:46:3;;;;;;;;;1698:24;;;;;;;;871:4829;;;;;;;;", + "deployedSourceMap": "871:4829:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4581:198;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4581:198:3;-1:-1:-1;;;;;4581:198:3;;;;;;;;;;;;;;;;;;;;;;;4150:217;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4150:217:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4150:217:3;;-1:-1:-1;;;4150:217:3;;-1:-1:-1;;;;;4150:217:3;;-1:-1:-1;4150:217:3;;-1:-1:-1;;;4150:217:3;1969:384;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1969:384:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1969:384:3;;-1:-1:-1;;;;1969:384:3;;;;;-1:-1:-1;1969:384:3;;-1:-1:-1;;1969:384:3;2127:185:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2127:185:1;-1:-1:-1;;;;;2127:185:1;;;;;2571:188;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2571:188:1;-1:-1:-1;;;;;2571:188:1;;;;;725:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;725:37:1;-1:-1:-1;;;;;725:37:1;;;;;3384:142:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3384:142:3;-1:-1:-1;;;;;3384:142:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3384:142:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3698:184;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3698:184:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3698:184:3;;-1:-1:-1;3698:184:3;;-1:-1:-1;;;;;;;3698:184:3;4998:351;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4998:351:3;-1:-1:-1;;;;;4998:351:3;;;;;1589:291:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1589:291:1;-1:-1:-1;;;;;1589:291:1;;;;;2677:529:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2677:529:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2677:529:3;;-1:-1:-1;;;;;;;2677:529:3;;;;-1:-1:-1;;;;;2677:529:3;;;;;;;4581:198;4652:15;4736:36;:3;4762:9;4736:36;:25;:36;:::i;:::-;4729:43;4581:198;-1:-1:-1;;4581:198:3:o;4150:217::-;4235:15;4317:43;:3;4340:8;4350:9;4317:43;:22;:43;:::i;:::-;4310:50;4150:217;-1:-1:-1;;;4150:217:3:o;1969:384::-;2062:10;2083:12;5522:16;;;;;;;;;;;2083:12;;2052:8;;5522:16;;;:63;;-1:-1:-1;5542:43:3;:3;5565:8;5575:9;5542:43;:22;:43;:::i;:::-;5514:165;;;;;;;-1:-1:-1;;;;;5514:165:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2175:44;:3;2197:8;2207:11;2175:44;:21;:44;:::i;:::-;2156:169;;;;;;;-1:-1:-1;;;;;2156:169:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2342:4;2335:11;;5689:1;1969:384;;;;;;:::o;2127:185:1:-;1261:10;2201:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;2221:21:1;;:5;:21;;;;;;;;;;;:28;;-1:-1:-1;;2221:28:1;2245:4;2221:28;;;2260:30;;;2221:5;2260:30;-1:-1:-1;2303:4:1;2127:185;;;:::o;2571:188::-;1261:10;2646:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;2666:21:1;;2690:5;2666:21;;;;;;;;;;;:29;;-1:-1:-1;;2666:29:1;;;2706:31;;;2690:5;2706:31;-1:-1:-1;2750:4:1;2571:188;;;:::o;725:37::-;;;;;;;;;;;;;;;;:::o;3384:142:3:-;3454:11;3484:35;:3;3509:9;3484:35;:24;:35;:::i;3698:184::-;3762:11;3845:30;:3;3866:8;3845:30;:20;:30;:::i;4998:351::-;1261:10:1;5075:12:3;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;5162:37:3;:3;5187:11;5162:37;:24;:37;:::i;:::-;5143:176;;;;;;;-1:-1:-1;;;;;5143:176:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5336:4:3;4998:351;;;:::o;1589:291:1:-;1261:10;1660:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;1688:22:1;;;;1680:66;;;;;-1:-1:-1;;;;;1680:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1757:42;;-1:-1:-1;;;;;1757:42:1;;;1778:10;;1757:42;;;;;-1:-1:-1;;;;;;1805:15:1;:5;:15;;;;;;;;;;;:22;;1823:4;-1:-1:-1;;1805:22:1;;;;;;;;1839:10;1833:17;;;;;;:25;;;;;;;1823:4;1589:291::o;2677:529:3:-;2794:10;2815:12;5522:16;;;;;;;;;;;2815:12;;2784:8;;5522:16;;;:63;;-1:-1:-1;5542:43:3;:3;5565:8;5575:9;5542:43;:22;:43;:::i;:::-;5514:165;;;;;;;-1:-1:-1;;;;;5514:165:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2916:60;:3;2943:8;2953:9;2964:11;2916:60;:26;:60;:::i;:::-;2897:281;;;;;;-1:-1:-1;;;;;2897:281:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3195:4:3;;2677:529;-1:-1:-1;;;;;2677:529:3:o;50232:346:8:-;50331:15;50354:10;50418:71;50439:4;50445:43;50465:4;50471:16;50445:19;:43::i;:::-;50418:20;:71::i;:::-;50491:43;50511:4;50517:16;50491:19;:43::i;:::-;50377:158;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;50377:158:8;;;;;;;-1:-1:-1;;;;;50377:158:8;-1:-1:-1;;;;;50377:158:8;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;50377:158:8;;;50367:169;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;50367:169:8;;;;;;;;;;;;50549:12;;:24;;;;;;;;;;;50367:169;;-1:-1:-1;;;;;;50549:12:8;;;;-1:-1:-1;50549:20:8;;-1:-1:-1;50549:24:8;;;;;263:2:-1;;-1:-1;50549:24:8;;;;;;;-1:-1:-1;50549:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;50549:24:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;50549:24:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;50549:24:8;;50232:346;-1:-1:-1;;;;50232:346:8:o;49571:301::-;49686:15;49709:10;49773;49785:43;49805:4;49811:16;49785:19;:43::i;:::-;49732:97;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;49732:97:8;;;;;;;-1:-1:-1;;;;;49732:97:8;-1:-1:-1;;;;;49732:97:8;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;49732:97:8;;;49722:108;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;49722:108:8;;;;;;;;;;;;49843:12;;:24;;;;;;;;;;;49722:108;;-1:-1:-1;;;;;;49843:12:8;;;;-1:-1:-1;49843:20:8;;-1:-1:-1;49843:24:8;;;;;263:2:-1;;-1:-1;49843:24:8;;;;;;;-1:-1:-1;49843:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;49843:24:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;49843:24:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49843:24:8;;49571:301;-1:-1:-1;;;;;49571:301:8:o;46103:387::-;46201:12;46221:10;46280;46244:47;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;46244:47:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;46244:47:8;;;46234:58;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;46234:58:8;;;;;;;;;;;;46313:12;;:34;;;;;;;;;;;;;;;;;;46234:58;;-1:-1:-1;;;;;;46313:12:8;;;;-1:-1:-1;46313:20:8;;-1:-1:-1;46313:34:8;;;;;263:2:-1;;-1:-1;46313:34:8;;;;;;;-1:-1:-1;46313:12:8;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;46313:34:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;46313:34:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;46313:34:8;46298:170;;;;;;;-1:-1:-1;;;;;46298:170:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;46298:170:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46481:4:8;;46103:387;-1:-1:-1;;;;46103:387:8:o;48373:281::-;48471:17;48496:10;48565:43;48585:4;48591:16;48565:19;:43::i;:::-;48519:90;;;;;;;;;;;;;-1:-1:-1;;;;;48519:90:8;-1:-1:-1;;;;;48519:90:8;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;48519:90:8;;;48509:101;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;48509:101:8;;;;;;;;;;;;48623:12;;:26;;;;;;;;;;;48509:101;;-1:-1:-1;;;;;;48623:12:8;;;;-1:-1:-1;48623:22:8;;-1:-1:-1;48623:26:8;;;;;-1:-1:-1;;;48623:26:8;;;;;;-1:-1:-1;48623:12:8;:26;;;5:2:-1;;;;30:1;27;20:12;5:2;48623:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48623:26:8;;;;;;39:16:-1;36:1;17:17;2:54;101:4;48623:26:8;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;48623:26:8;;;;;;20:11:-1;15:3;12:20;9:2;;;45:1;42;35:12;9:2;64:21;;126:4;117:14;;142:31;;;139:2;;;186:1;183;176:12;139:2;218:10;;268:11;251:29;;293:43;;;290:58;-1:-1;239:118;236:2;;;370:1;367;360:12;236:2;-1:-1;48623:26:8;;48373:281;-1:-1:-1;;;;;;;;48373:281:8:o;48948:223::-;49035:15;49058:10;49117;49081:47;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;49081:47:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;49081:47:8;;;49071:58;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;25250:382:8;25342:12;25362:10;25385:39;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;25385:39:8;;;25375:50;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;25375:50:8;;;;;;;;;;;;25446:12;;:44;;;;;;;;;-1:-1:-1;;;;;25446:44:8;;;;;;;;;25375:50;;-1:-1:-1;25446:12:8;;;;;-1:-1:-1;25446:23:8;;-1:-1:-1;25446:44:8;;;;;263:2:-1;;-1:-1;25446:44:8;;;;;;;-1:-1:-1;25446:12:8;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;25446:44:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25446:44:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25446:44:8;25431:179;;;;;;;-1:-1:-1;;;;;25431:179:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25431:179:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25623:4:8;;25250:382;-1:-1:-1;;;25250:382:8:o;47180:822::-;47309:12;47435;47537;47344:34;47361:4;47367:10;47344:16;:34::i;:::-;47329:99;;;;;;;-1:-1:-1;;;;;47329:99:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47501:10;47513:16;47460:70;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;47460:70:8;;;;;;;-1:-1:-1;;;;;47460:70:8;-1:-1:-1;;;;;47460:70:8;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;47460:70:8;;;47450:81;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;47450:81:8;;;;;;;;;;;;47562:63;;;;;-1:-1:-1;;;;;47562:63:8;;;;;;;;;;26:21:-1;;;22:32;;6:49;;47562:63:8;;;;;;;;47552:74;;47450:81;;-1:-1:-1;47562:63:8;;-1:-1:-1;47562:63:8;;-1:-1:-1;47562:63:8;;47552:74;;;-1:-1:-1;47552:74:8;47562:63;47552:74;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;47552:74:8;;;;;;;;;;;;47648:12;;:36;;;;;;;;;;;;;;;;;;47552:74;;-1:-1:-1;;;;;;47648:12:8;;;;-1:-1:-1;47648:20:8;;-1:-1:-1;47648:36:8;;;;;263:2:-1;;-1:-1;47648:36:8;;;;;;;-1:-1:-1;47648:12:8;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;47648:36:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47648:36:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;47648:36:8;47633:167;;;;;;;-1:-1:-1;;;;;47633:167:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;47633:167:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47822:12;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47822:12:8;;;;:22;;47845:4;;47851:10;;47822:40;;;;;;;;;;;;;:12;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;47822:40:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47822:40:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47822:40:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;47822:40:8;47807:171;;;;;;;-1:-1:-1;;;;;47807:171:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;47807:171:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47993:4:8;;47180:822;-1:-1:-1;;;;;;47180:822:8:o;16402:357::-;16490:25;16523:10;16596:23;16581:7;16546:43;;;;;;;;;;;;;-1:-1:-1;;;;;16546:43:8;-1:-1:-1;;;;;16546:43:8;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16546:43:8;;;16536:54;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;16536:54:8;;;;;;;;;;;;16622:12;;:27;;;;;;;;;;;16536:54;;-1:-1:-1;;;;;;16622:12:8;;;;-1:-1:-1;16622:23:8;;-1:-1:-1;16622:27:8;;;;;263:2:-1;;-1:-1;16622:27:8;;;;;;;-1:-1:-1;16622:12:8;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;16622:27:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16622:27:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16622:27:8;;-1:-1:-1;;;;;;16659:22:8;;;16655:100;;16698:15;16691:22;;;;16655:100;16741:7;16734:14;;;", + "source": "pragma solidity 0.4.24;\n\n/*\nCOPYRIGHT 2018 Token, Inc.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\n\n/**\n@title TokenIOAuthority - Authority Smart Contract for Token, Inc.\n\n@author Ryan Tate , Sean Pollock \n\n@notice Contract uses generalized storage contract, `TokenIOStorage`, for\nupgradeability of interface contract.\n*/\n\nimport \"./Ownable.sol\";\nimport \"./TokenIOStorage.sol\";\nimport \"./TokenIOLib.sol\";\n\ncontract TokenIOAuthority is Ownable {\n\n /// @dev Set reference to TokenIOLib interface which proxies to TokenIOStorage\n using TokenIOLib for TokenIOLib.Data;\n TokenIOLib.Data lib;\n\n /**\n * @notice Constructor method for Authority contract\n * @param _storageContract Ethereum Address of TokenIOStorage contract\n */\n constructor(address _storageContract) public {\n /*\n * @notice Set the storage contract for the interface\n * @dev This contract will be unable to use the storage constract until\n * @dev contract address is authorized with the storage contract\n * @dev Once authorized, you can setRegisteredFirm and setRegisteredAuthority\n */\n lib.Storage = TokenIOStorage(_storageContract);\n\n /// @dev set owner to contract initiator\n owner[msg.sender] = true;\n }\n\n /**\n * @notice Registers a firm as authorized true/false\n * @param firmName Name of firm\n * @param _authorized Authorization status\n * @return {\"success\" : \"Returns true if lib.setRegisteredFirm succeeds\"}\n */\n function setRegisteredFirm(string firmName, bool _authorized) public onlyAuthority(firmName, msg.sender) returns (bool success) {\n /// @notice set firm registration status\n require(\n lib.setRegisteredFirm(firmName, _authorized),\n \"Error: Failed to register firm with storage contract! Please check your arguments.\"\n );\n return true;\n }\n\n /**\n * @notice Registers an authority asoociated with the given firm as true/false\n * @param firmName Name of firm\n * @param authority Address of authority account\n * @param _authorized Authorization status\n * @return {\"success\" : \"Returns true if lib.setRegisteredAuthority succeeds\"}\n */\n function setRegisteredAuthority(string firmName, address authority, bool _authorized) public onlyAuthority(firmName, msg.sender) returns (bool success) {\n /// @notice set authority of firm to given status\n require(\n lib.setRegisteredAuthority(firmName, authority, _authorized),\n \"Error: Failed to register authority for issuer firm with storage contract! Please check your arguments and ensure firmName is registered before allowing an authority of said firm\"\n );\n return true;\n }\n\n /**\n * @notice Gets firm asoociated with an authority address\n * @param authority Address of authority account\n * @return {\"firm\" : \"name of firm\"}\n */\n function getFirmFromAuthority(address authority) public view returns (string firm) {\n return lib.getFirmFromAuthority(authority);\n }\n\n /**\n * @notice Gets status of firm registration\n * @param firmName Name of firm\n * @return {\"status\" : \"Returns status of firm registration\"}\n */\n function isRegisteredFirm(string firmName) public view returns (bool status) {\n /// @notice check firm's registration status\n return lib.isRegisteredFirm(firmName);\n }\n\n /**\n * @notice Checks if an authority account is registered to a given firm\n * @param firmName Name of firm\n * @param authority Address of authority account\n * @return {\"registered\" : \"Returns status of account registration to firm\"}\n */\n function isRegisteredToFirm(string firmName, address authority) public view returns (bool registered) {\n /// @notice check if registered to firm\n return lib.isRegisteredToFirm(firmName, authority);\n }\n\n /**\n * @notice Gets status of authority registration\n * @param authority Address of authority account\n * @return { \"registered\" : \"Returns true if account is a registered authority\" }\n */\n function isRegisteredAuthority(address authority) public view returns (bool registered) {\n /// @notice check if registered authority\n return lib.isRegisteredAuthority(authority);\n }\n\n /**\n * @notice Sets contract which specifies fee parameters\n * @param feeContract Address of the fee contract\n * @return { \"success\" : \"Returns true if lib.setMasterFeeContract succeeds\" }\n */\n function setMasterFeeContract(address feeContract) public onlyOwner returns (bool success) {\n /// @notice set master fee contract\n require(\n lib.setMasterFeeContract(feeContract),\n \"Error: Unable to set master fee contract. Please ensure fee contract has the correct parameters.\"\n );\n return true;\n }\n\n\n modifier onlyAuthority(string firmName, address authority) {\n /// @notice throws if not an owner authority or not registered to the given firm\n require(owner[authority] || lib.isRegisteredToFirm(firmName, authority),\n \"Error: Transaction sender does not have permission for this operation!\"\n );\n _;\n }\n\n}\n", + "sourcePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOAuthority.sol", + "ast": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOAuthority.sol", + "exportedSymbols": { + "TokenIOAuthority": [ + 470 + ] + }, + "id": 471, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 287, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:3" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 288, + "nodeType": "ImportDirective", + "scope": 471, + "sourceUnit": 185, + "src": "788:23:3", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 289, + "nodeType": "ImportDirective", + "scope": 471, + "sourceUnit": 5242, + "src": "812:30:3", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 290, + "nodeType": "ImportDirective", + "scope": 471, + "sourceUnit": 4623, + "src": "843:26:3", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 291, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "900:7:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 292, + "nodeType": "InheritanceSpecifier", + "src": "900:7:3" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 470, + "linearizedBaseContracts": [ + 470, + 184 + ], + "name": "TokenIOAuthority", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 295, + "libraryName": { + "contractScope": null, + "id": 293, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4622, + "src": "1004:10:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4622", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "998:37:3", + "typeName": { + "contractScope": null, + "id": 294, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1019:15:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 297, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 470, + "src": "1040:19:3", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 296, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1040:15:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 317, + "nodeType": "Block", + "src": "1259:470:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 308, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 302, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "1592:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 304, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1645, + "src": "1592:11:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 306, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 299, + "src": "1621:16:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 305, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5241, + "src": "1606:14:3", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5241_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 307, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1606:32:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1592:46:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "id": 309, + "nodeType": "ExpressionStatement", + "src": "1592:46:3" + }, + { + "expression": { + "argumentTypes": null, + "id": 315, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 310, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1698:5:3", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 313, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 311, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "1704:3:3", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 312, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1704:10:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1698:17:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 314, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1718:4:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1698:24:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 316, + "nodeType": "ExpressionStatement", + "src": "1698:24:3" + } + ] + }, + "documentation": "@notice Constructor method for Authority contract\n@param _storageContract Ethereum Address of TokenIOStorage contract", + "id": 318, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 300, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 299, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 318, + "src": "1226:24:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 298, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1226:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1225:26:3" + }, + "payable": false, + "returnParameters": { + "id": 301, + "nodeType": "ParameterList", + "parameters": [], + "src": "1259:0:3" + }, + "scope": 470, + "src": "1214:515:3", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 343, + "nodeType": "Block", + "src": "2097:256:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 335, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 320, + "src": "2197:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 336, + "name": "_authorized", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 322, + "src": "2207:11:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "expression": { + "argumentTypes": null, + "id": 333, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "2175:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 334, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setRegisteredFirm", + "nodeType": "MemberAccess", + "referencedDeclaration": 3780, + "src": "2175:21:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_bool_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,bool) returns (bool)" + } + }, + "id": 337, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2175:44:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a204661696c656420746f207265676973746572206669726d20776974682073746f7261676520636f6e74726163742120506c6561736520636865636b20796f757220617267756d656e74732e", + "id": 338, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2231:84:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7c061aadab049d8f25969f3d079d42a1e8f36ec72210e2d32fa2967857012c0f", + "typeString": "literal_string \"Error: Failed to register firm with storage contract! Please check your arguments.\"" + }, + "value": "Error: Failed to register firm with storage contract! Please check your arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7c061aadab049d8f25969f3d079d42a1e8f36ec72210e2d32fa2967857012c0f", + "typeString": "literal_string \"Error: Failed to register firm with storage contract! Please check your arguments.\"" + } + ], + "id": 332, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2156:7:3", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 339, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2156:169:3", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 340, + "nodeType": "ExpressionStatement", + "src": "2156:169:3" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 341, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2342:4:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 331, + "id": 342, + "nodeType": "Return", + "src": "2335:11:3" + } + ] + }, + "documentation": "@notice Registers a firm as authorized true/false\n@param firmName Name of firm\n@param _authorized Authorization status\n@return {\"success\" : \"Returns true if lib.setRegisteredFirm succeeds\"}", + "id": 344, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 325, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 320, + "src": "2052:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 326, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "2062:3:3", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 327, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2062:10:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 328, + "modifierName": { + "argumentTypes": null, + "id": 324, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 469, + "src": "2038:13:3", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "2038:35:3" + } + ], + "name": "setRegisteredFirm", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 323, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 320, + "name": "firmName", + "nodeType": "VariableDeclaration", + "scope": 344, + "src": "1996:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 319, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1996:6:3", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 322, + "name": "_authorized", + "nodeType": "VariableDeclaration", + "scope": 344, + "src": "2013:16:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 321, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2013:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1995:35:3" + }, + "payable": false, + "returnParameters": { + "id": 331, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 330, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 344, + "src": "2083:12:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 329, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2083:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2082:14:3" + }, + "scope": 470, + "src": "1969:384:3", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 372, + "nodeType": "Block", + "src": "2829:377:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 363, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 346, + "src": "2943:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 364, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 348, + "src": "2953:9:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 365, + "name": "_authorized", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 350, + "src": "2964:11:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "expression": { + "argumentTypes": null, + "id": 361, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "2916:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 362, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setRegisteredAuthority", + "nodeType": "MemberAccess", + "referencedDeclaration": 3845, + "src": "2916:26:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_bool_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,bool) returns (bool)" + } + }, + "id": 366, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2916:60:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a204661696c656420746f20726567697374657220617574686f7269747920666f7220697373756572206669726d20776974682073746f7261676520636f6e74726163742120506c6561736520636865636b20796f757220617267756d656e747320616e6420656e73757265206669726d4e616d652069732072656769737465726564206265666f726520616c6c6f77696e6720616e20617574686f72697479206f662073616964206669726d", + "id": 367, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2988:180:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_2d4a4b60f49ee08372af5e34c3f2336392554fd91a2dbaa0c7da248171f215ec", + "typeString": "literal_string \"Error: Failed to register authority for issuer firm with storage contract! Please check your arguments and ensure firmName is registered before allowing an authority of said firm\"" + }, + "value": "Error: Failed to register authority for issuer firm with storage contract! Please check your arguments and ensure firmName is registered before allowing an authority of said firm" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_2d4a4b60f49ee08372af5e34c3f2336392554fd91a2dbaa0c7da248171f215ec", + "typeString": "literal_string \"Error: Failed to register authority for issuer firm with storage contract! Please check your arguments and ensure firmName is registered before allowing an authority of said firm\"" + } + ], + "id": 360, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2897:7:3", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 368, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2897:281:3", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 369, + "nodeType": "ExpressionStatement", + "src": "2897:281:3" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 370, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3195:4:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 359, + "id": 371, + "nodeType": "Return", + "src": "3188:11:3" + } + ] + }, + "documentation": "@notice Registers an authority asoociated with the given firm as true/false\n@param firmName Name of firm\n@param authority Address of authority account\n@param _authorized Authorization status\n@return {\"success\" : \"Returns true if lib.setRegisteredAuthority succeeds\"}", + "id": 373, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 353, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 346, + "src": "2784:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 354, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "2794:3:3", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 355, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2794:10:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 356, + "modifierName": { + "argumentTypes": null, + "id": 352, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 469, + "src": "2770:13:3", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "2770:35:3" + } + ], + "name": "setRegisteredAuthority", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 351, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 346, + "name": "firmName", + "nodeType": "VariableDeclaration", + "scope": 373, + "src": "2709:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 345, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2709:6:3", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 348, + "name": "authority", + "nodeType": "VariableDeclaration", + "scope": 373, + "src": "2726:17:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 347, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2726:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 350, + "name": "_authorized", + "nodeType": "VariableDeclaration", + "scope": 373, + "src": "2745:16:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 349, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2745:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2708:54:3" + }, + "payable": false, + "returnParameters": { + "id": 359, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 358, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 373, + "src": "2815:12:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 357, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2815:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2814:14:3" + }, + "scope": 470, + "src": "2677:529:3", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 385, + "nodeType": "Block", + "src": "3467:59:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 382, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 375, + "src": "3509:9:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 380, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "3484:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 381, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFirmFromAuthority", + "nodeType": "MemberAccess", + "referencedDeclaration": 3874, + "src": "3484:24:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 383, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3484:35:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 379, + "id": 384, + "nodeType": "Return", + "src": "3477:42:3" + } + ] + }, + "documentation": "@notice Gets firm asoociated with an authority address\n@param authority Address of authority account\n@return {\"firm\" : \"name of firm\"}", + "id": 386, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getFirmFromAuthority", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 376, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 375, + "name": "authority", + "nodeType": "VariableDeclaration", + "scope": 386, + "src": "3414:17:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 374, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3414:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3413:19:3" + }, + "payable": false, + "returnParameters": { + "id": 379, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 378, + "name": "firm", + "nodeType": "VariableDeclaration", + "scope": 386, + "src": "3454:11:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 377, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3454:6:3", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3453:13:3" + }, + "scope": 470, + "src": "3384:142:3", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 398, + "nodeType": "Block", + "src": "3775:107:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 395, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 388, + "src": "3866:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 393, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "3845:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 394, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "isRegisteredFirm", + "nodeType": "MemberAccess", + "referencedDeclaration": 3900, + "src": "3845:20:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) view returns (bool)" + } + }, + "id": 396, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3845:30:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 392, + "id": 397, + "nodeType": "Return", + "src": "3838:37:3" + } + ] + }, + "documentation": "@notice Gets status of firm registration\n@param firmName Name of firm\n@return {\"status\" : \"Returns status of firm registration\"}", + "id": 399, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "isRegisteredFirm", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 389, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 388, + "name": "firmName", + "nodeType": "VariableDeclaration", + "scope": 399, + "src": "3724:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 387, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3724:6:3", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3723:17:3" + }, + "payable": false, + "returnParameters": { + "id": 392, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 391, + "name": "status", + "nodeType": "VariableDeclaration", + "scope": 399, + "src": "3762:11:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 390, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3762:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3761:13:3" + }, + "scope": 470, + "src": "3698:184:3", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 414, + "nodeType": "Block", + "src": "4252:115:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 410, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 401, + "src": "4340:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 411, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 403, + "src": "4350:9:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 408, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "4317:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 409, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "isRegisteredToFirm", + "nodeType": "MemberAccess", + "referencedDeclaration": 3932, + "src": "4317:22:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address) view returns (bool)" + } + }, + "id": 412, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4317:43:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 407, + "id": 413, + "nodeType": "Return", + "src": "4310:50:3" + } + ] + }, + "documentation": "@notice Checks if an authority account is registered to a given firm\n@param firmName Name of firm\n@param authority Address of authority account\n@return {\"registered\" : \"Returns status of account registration to firm\"}", + "id": 415, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "isRegisteredToFirm", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 404, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 401, + "name": "firmName", + "nodeType": "VariableDeclaration", + "scope": 415, + "src": "4178:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 400, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "4178:6:3", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 403, + "name": "authority", + "nodeType": "VariableDeclaration", + "scope": 415, + "src": "4195:17:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 402, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4195:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4177:36:3" + }, + "payable": false, + "returnParameters": { + "id": 407, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 406, + "name": "registered", + "nodeType": "VariableDeclaration", + "scope": 415, + "src": "4235:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 405, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4235:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4234:17:3" + }, + "scope": 470, + "src": "4150:217:3", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 427, + "nodeType": "Block", + "src": "4669:110:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 424, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 417, + "src": "4762:9:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 422, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "4736:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 423, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "isRegisteredAuthority", + "nodeType": "MemberAccess", + "referencedDeclaration": 3968, + "src": "4736:25:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bool)" + } + }, + "id": 425, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4736:36:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 421, + "id": 426, + "nodeType": "Return", + "src": "4729:43:3" + } + ] + }, + "documentation": "@notice Gets status of authority registration\n@param authority Address of authority account\n@return { \"registered\" : \"Returns true if account is a registered authority\" }", + "id": 428, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "isRegisteredAuthority", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 418, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 417, + "name": "authority", + "nodeType": "VariableDeclaration", + "scope": 428, + "src": "4612:17:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 416, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4612:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4611:19:3" + }, + "payable": false, + "returnParameters": { + "id": 421, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 420, + "name": "registered", + "nodeType": "VariableDeclaration", + "scope": 428, + "src": "4652:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 419, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4652:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4651:17:3" + }, + "scope": 470, + "src": "4581:198:3", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 447, + "nodeType": "Block", + "src": "5089:260:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 440, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 430, + "src": "5187:11:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 438, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "5162:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 439, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setMasterFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2673, + "src": "5162:24:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) returns (bool)" + } + }, + "id": 441, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5162:37:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20736574206d61737465722066656520636f6e74726163742e20506c6561736520656e737572652066656520636f6e7472616374206861732074686520636f727265637420706172616d65746572732e", + "id": 442, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5211:98:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_a96b771d97a968a04d199c5b6408cd38e4f78c25aa05fad6c1579ba20e33b4e4", + "typeString": "literal_string \"Error: Unable to set master fee contract. Please ensure fee contract has the correct parameters.\"" + }, + "value": "Error: Unable to set master fee contract. Please ensure fee contract has the correct parameters." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_a96b771d97a968a04d199c5b6408cd38e4f78c25aa05fad6c1579ba20e33b4e4", + "typeString": "literal_string \"Error: Unable to set master fee contract. Please ensure fee contract has the correct parameters.\"" + } + ], + "id": 437, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "5143:7:3", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 443, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5143:176:3", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 444, + "nodeType": "ExpressionStatement", + "src": "5143:176:3" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 445, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5336:4:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 436, + "id": 446, + "nodeType": "Return", + "src": "5329:11:3" + } + ] + }, + "documentation": "@notice Sets contract which specifies fee parameters\n@param feeContract Address of the fee contract\n@return { \"success\" : \"Returns true if lib.setMasterFeeContract succeeds\" }", + "id": 448, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 433, + "modifierName": { + "argumentTypes": null, + "id": 432, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "5056:9:3", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "5056:9:3" + } + ], + "name": "setMasterFeeContract", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 431, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 430, + "name": "feeContract", + "nodeType": "VariableDeclaration", + "scope": 448, + "src": "5028:19:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 429, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5028:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5027:21:3" + }, + "payable": false, + "returnParameters": { + "id": 436, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 435, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 448, + "src": "5075:12:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 434, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5075:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5074:14:3" + }, + "scope": 470, + "src": "4998:351:3", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 468, + "nodeType": "Block", + "src": "5415:282:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 463, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 455, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "5522:5:3", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 457, + "indexExpression": { + "argumentTypes": null, + "id": 456, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 452, + "src": "5528:9:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5522:16:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 460, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 450, + "src": "5565:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 461, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 452, + "src": "5575:9:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 458, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "5542:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 459, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "isRegisteredToFirm", + "nodeType": "MemberAccess", + "referencedDeclaration": 3932, + "src": "5542:22:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address) view returns (bool)" + } + }, + "id": 462, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5542:43:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5522:63:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a205472616e73616374696f6e2073656e64657220646f6573206e6f742068617665207065726d697373696f6e20666f722074686973206f7065726174696f6e21", + "id": 464, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5597:72:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d3def153e2e51aa28ae18a72fd9db16026b538556464ddd7af6de088c3965fad", + "typeString": "literal_string \"Error: Transaction sender does not have permission for this operation!\"" + }, + "value": "Error: Transaction sender does not have permission for this operation!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d3def153e2e51aa28ae18a72fd9db16026b538556464ddd7af6de088c3965fad", + "typeString": "literal_string \"Error: Transaction sender does not have permission for this operation!\"" + } + ], + "id": 454, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "5514:7:3", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 465, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5514:165:3", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 466, + "nodeType": "ExpressionStatement", + "src": "5514:165:3" + }, + { + "id": 467, + "nodeType": "PlaceholderStatement", + "src": "5689:1:3" + } + ] + }, + "documentation": null, + "id": 469, + "name": "onlyAuthority", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 453, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 450, + "name": "firmName", + "nodeType": "VariableDeclaration", + "scope": 469, + "src": "5379:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 449, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "5379:6:3", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 452, + "name": "authority", + "nodeType": "VariableDeclaration", + "scope": 469, + "src": "5396:17:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 451, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5396:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5378:36:3" + }, + "src": "5356:341:3", + "visibility": "internal" + } + ], + "scope": 471, + "src": "871:4829:3" + } + ], + "src": "0:5701:3" + }, + "legacyAST": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOAuthority.sol", + "exportedSymbols": { + "TokenIOAuthority": [ + 470 + ] + }, + "id": 471, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 287, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:3" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 288, + "nodeType": "ImportDirective", + "scope": 471, + "sourceUnit": 185, + "src": "788:23:3", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 289, + "nodeType": "ImportDirective", + "scope": 471, + "sourceUnit": 5242, + "src": "812:30:3", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 290, + "nodeType": "ImportDirective", + "scope": 471, + "sourceUnit": 4623, + "src": "843:26:3", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 291, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "900:7:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 292, + "nodeType": "InheritanceSpecifier", + "src": "900:7:3" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 470, + "linearizedBaseContracts": [ + 470, + 184 + ], + "name": "TokenIOAuthority", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 295, + "libraryName": { + "contractScope": null, + "id": 293, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4622, + "src": "1004:10:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4622", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "998:37:3", + "typeName": { + "contractScope": null, + "id": 294, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1019:15:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 297, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 470, + "src": "1040:19:3", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 296, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1040:15:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 317, + "nodeType": "Block", + "src": "1259:470:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 308, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 302, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "1592:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 304, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1645, + "src": "1592:11:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 306, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 299, + "src": "1621:16:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 305, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5241, + "src": "1606:14:3", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5241_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 307, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1606:32:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1592:46:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "id": 309, + "nodeType": "ExpressionStatement", + "src": "1592:46:3" + }, + { + "expression": { + "argumentTypes": null, + "id": 315, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 310, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1698:5:3", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 313, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 311, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "1704:3:3", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 312, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1704:10:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1698:17:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 314, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1718:4:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1698:24:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 316, + "nodeType": "ExpressionStatement", + "src": "1698:24:3" + } + ] + }, + "documentation": "@notice Constructor method for Authority contract\n@param _storageContract Ethereum Address of TokenIOStorage contract", + "id": 318, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 300, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 299, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 318, + "src": "1226:24:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 298, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1226:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1225:26:3" + }, + "payable": false, + "returnParameters": { + "id": 301, + "nodeType": "ParameterList", + "parameters": [], + "src": "1259:0:3" + }, + "scope": 470, + "src": "1214:515:3", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 343, + "nodeType": "Block", + "src": "2097:256:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 335, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 320, + "src": "2197:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 336, + "name": "_authorized", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 322, + "src": "2207:11:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "expression": { + "argumentTypes": null, + "id": 333, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "2175:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 334, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setRegisteredFirm", + "nodeType": "MemberAccess", + "referencedDeclaration": 3780, + "src": "2175:21:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_bool_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,bool) returns (bool)" + } + }, + "id": 337, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2175:44:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a204661696c656420746f207265676973746572206669726d20776974682073746f7261676520636f6e74726163742120506c6561736520636865636b20796f757220617267756d656e74732e", + "id": 338, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2231:84:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7c061aadab049d8f25969f3d079d42a1e8f36ec72210e2d32fa2967857012c0f", + "typeString": "literal_string \"Error: Failed to register firm with storage contract! Please check your arguments.\"" + }, + "value": "Error: Failed to register firm with storage contract! Please check your arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7c061aadab049d8f25969f3d079d42a1e8f36ec72210e2d32fa2967857012c0f", + "typeString": "literal_string \"Error: Failed to register firm with storage contract! Please check your arguments.\"" + } + ], + "id": 332, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2156:7:3", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 339, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2156:169:3", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 340, + "nodeType": "ExpressionStatement", + "src": "2156:169:3" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 341, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2342:4:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 331, + "id": 342, + "nodeType": "Return", + "src": "2335:11:3" + } + ] + }, + "documentation": "@notice Registers a firm as authorized true/false\n@param firmName Name of firm\n@param _authorized Authorization status\n@return {\"success\" : \"Returns true if lib.setRegisteredFirm succeeds\"}", + "id": 344, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 325, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 320, + "src": "2052:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 326, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "2062:3:3", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 327, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2062:10:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 328, + "modifierName": { + "argumentTypes": null, + "id": 324, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 469, + "src": "2038:13:3", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "2038:35:3" + } + ], + "name": "setRegisteredFirm", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 323, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 320, + "name": "firmName", + "nodeType": "VariableDeclaration", + "scope": 344, + "src": "1996:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 319, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1996:6:3", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 322, + "name": "_authorized", + "nodeType": "VariableDeclaration", + "scope": 344, + "src": "2013:16:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 321, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2013:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1995:35:3" + }, + "payable": false, + "returnParameters": { + "id": 331, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 330, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 344, + "src": "2083:12:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 329, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2083:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2082:14:3" + }, + "scope": 470, + "src": "1969:384:3", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 372, + "nodeType": "Block", + "src": "2829:377:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 363, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 346, + "src": "2943:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 364, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 348, + "src": "2953:9:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 365, + "name": "_authorized", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 350, + "src": "2964:11:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "expression": { + "argumentTypes": null, + "id": 361, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "2916:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 362, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setRegisteredAuthority", + "nodeType": "MemberAccess", + "referencedDeclaration": 3845, + "src": "2916:26:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_bool_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,bool) returns (bool)" + } + }, + "id": 366, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2916:60:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a204661696c656420746f20726567697374657220617574686f7269747920666f7220697373756572206669726d20776974682073746f7261676520636f6e74726163742120506c6561736520636865636b20796f757220617267756d656e747320616e6420656e73757265206669726d4e616d652069732072656769737465726564206265666f726520616c6c6f77696e6720616e20617574686f72697479206f662073616964206669726d", + "id": 367, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2988:180:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_2d4a4b60f49ee08372af5e34c3f2336392554fd91a2dbaa0c7da248171f215ec", + "typeString": "literal_string \"Error: Failed to register authority for issuer firm with storage contract! Please check your arguments and ensure firmName is registered before allowing an authority of said firm\"" + }, + "value": "Error: Failed to register authority for issuer firm with storage contract! Please check your arguments and ensure firmName is registered before allowing an authority of said firm" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_2d4a4b60f49ee08372af5e34c3f2336392554fd91a2dbaa0c7da248171f215ec", + "typeString": "literal_string \"Error: Failed to register authority for issuer firm with storage contract! Please check your arguments and ensure firmName is registered before allowing an authority of said firm\"" + } + ], + "id": 360, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2897:7:3", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 368, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2897:281:3", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 369, + "nodeType": "ExpressionStatement", + "src": "2897:281:3" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 370, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3195:4:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 359, + "id": 371, + "nodeType": "Return", + "src": "3188:11:3" + } + ] + }, + "documentation": "@notice Registers an authority asoociated with the given firm as true/false\n@param firmName Name of firm\n@param authority Address of authority account\n@param _authorized Authorization status\n@return {\"success\" : \"Returns true if lib.setRegisteredAuthority succeeds\"}", + "id": 373, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 353, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 346, + "src": "2784:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 354, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "2794:3:3", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 355, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2794:10:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 356, + "modifierName": { + "argumentTypes": null, + "id": 352, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 469, + "src": "2770:13:3", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "2770:35:3" + } + ], + "name": "setRegisteredAuthority", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 351, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 346, + "name": "firmName", + "nodeType": "VariableDeclaration", + "scope": 373, + "src": "2709:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 345, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2709:6:3", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 348, + "name": "authority", + "nodeType": "VariableDeclaration", + "scope": 373, + "src": "2726:17:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 347, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2726:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 350, + "name": "_authorized", + "nodeType": "VariableDeclaration", + "scope": 373, + "src": "2745:16:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 349, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2745:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2708:54:3" + }, + "payable": false, + "returnParameters": { + "id": 359, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 358, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 373, + "src": "2815:12:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 357, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2815:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2814:14:3" + }, + "scope": 470, + "src": "2677:529:3", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 385, + "nodeType": "Block", + "src": "3467:59:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 382, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 375, + "src": "3509:9:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 380, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "3484:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 381, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFirmFromAuthority", + "nodeType": "MemberAccess", + "referencedDeclaration": 3874, + "src": "3484:24:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 383, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3484:35:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 379, + "id": 384, + "nodeType": "Return", + "src": "3477:42:3" + } + ] + }, + "documentation": "@notice Gets firm asoociated with an authority address\n@param authority Address of authority account\n@return {\"firm\" : \"name of firm\"}", + "id": 386, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getFirmFromAuthority", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 376, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 375, + "name": "authority", + "nodeType": "VariableDeclaration", + "scope": 386, + "src": "3414:17:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 374, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3414:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3413:19:3" + }, + "payable": false, + "returnParameters": { + "id": 379, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 378, + "name": "firm", + "nodeType": "VariableDeclaration", + "scope": 386, + "src": "3454:11:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 377, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3454:6:3", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3453:13:3" + }, + "scope": 470, + "src": "3384:142:3", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 398, + "nodeType": "Block", + "src": "3775:107:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 395, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 388, + "src": "3866:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 393, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "3845:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 394, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "isRegisteredFirm", + "nodeType": "MemberAccess", + "referencedDeclaration": 3900, + "src": "3845:20:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) view returns (bool)" + } + }, + "id": 396, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3845:30:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 392, + "id": 397, + "nodeType": "Return", + "src": "3838:37:3" + } + ] + }, + "documentation": "@notice Gets status of firm registration\n@param firmName Name of firm\n@return {\"status\" : \"Returns status of firm registration\"}", + "id": 399, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "isRegisteredFirm", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 389, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 388, + "name": "firmName", + "nodeType": "VariableDeclaration", + "scope": 399, + "src": "3724:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 387, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3724:6:3", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3723:17:3" + }, + "payable": false, + "returnParameters": { + "id": 392, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 391, + "name": "status", + "nodeType": "VariableDeclaration", + "scope": 399, + "src": "3762:11:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 390, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3762:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3761:13:3" + }, + "scope": 470, + "src": "3698:184:3", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 414, + "nodeType": "Block", + "src": "4252:115:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 410, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 401, + "src": "4340:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 411, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 403, + "src": "4350:9:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 408, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "4317:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 409, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "isRegisteredToFirm", + "nodeType": "MemberAccess", + "referencedDeclaration": 3932, + "src": "4317:22:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address) view returns (bool)" + } + }, + "id": 412, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4317:43:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 407, + "id": 413, + "nodeType": "Return", + "src": "4310:50:3" + } + ] + }, + "documentation": "@notice Checks if an authority account is registered to a given firm\n@param firmName Name of firm\n@param authority Address of authority account\n@return {\"registered\" : \"Returns status of account registration to firm\"}", + "id": 415, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "isRegisteredToFirm", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 404, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 401, + "name": "firmName", + "nodeType": "VariableDeclaration", + "scope": 415, + "src": "4178:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 400, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "4178:6:3", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 403, + "name": "authority", + "nodeType": "VariableDeclaration", + "scope": 415, + "src": "4195:17:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 402, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4195:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4177:36:3" + }, + "payable": false, + "returnParameters": { + "id": 407, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 406, + "name": "registered", + "nodeType": "VariableDeclaration", + "scope": 415, + "src": "4235:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 405, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4235:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4234:17:3" + }, + "scope": 470, + "src": "4150:217:3", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 427, + "nodeType": "Block", + "src": "4669:110:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 424, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 417, + "src": "4762:9:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 422, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "4736:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 423, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "isRegisteredAuthority", + "nodeType": "MemberAccess", + "referencedDeclaration": 3968, + "src": "4736:25:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bool)" + } + }, + "id": 425, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4736:36:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 421, + "id": 426, + "nodeType": "Return", + "src": "4729:43:3" + } + ] + }, + "documentation": "@notice Gets status of authority registration\n@param authority Address of authority account\n@return { \"registered\" : \"Returns true if account is a registered authority\" }", + "id": 428, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "isRegisteredAuthority", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 418, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 417, + "name": "authority", + "nodeType": "VariableDeclaration", + "scope": 428, + "src": "4612:17:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 416, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4612:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4611:19:3" + }, + "payable": false, + "returnParameters": { + "id": 421, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 420, + "name": "registered", + "nodeType": "VariableDeclaration", + "scope": 428, + "src": "4652:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 419, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4652:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4651:17:3" + }, + "scope": 470, + "src": "4581:198:3", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 447, + "nodeType": "Block", + "src": "5089:260:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 440, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 430, + "src": "5187:11:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 438, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "5162:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 439, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setMasterFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2673, + "src": "5162:24:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) returns (bool)" + } + }, + "id": 441, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5162:37:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20736574206d61737465722066656520636f6e74726163742e20506c6561736520656e737572652066656520636f6e7472616374206861732074686520636f727265637420706172616d65746572732e", + "id": 442, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5211:98:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_a96b771d97a968a04d199c5b6408cd38e4f78c25aa05fad6c1579ba20e33b4e4", + "typeString": "literal_string \"Error: Unable to set master fee contract. Please ensure fee contract has the correct parameters.\"" + }, + "value": "Error: Unable to set master fee contract. Please ensure fee contract has the correct parameters." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_a96b771d97a968a04d199c5b6408cd38e4f78c25aa05fad6c1579ba20e33b4e4", + "typeString": "literal_string \"Error: Unable to set master fee contract. Please ensure fee contract has the correct parameters.\"" + } + ], + "id": 437, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "5143:7:3", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 443, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5143:176:3", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 444, + "nodeType": "ExpressionStatement", + "src": "5143:176:3" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 445, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5336:4:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 436, + "id": 446, + "nodeType": "Return", + "src": "5329:11:3" + } + ] + }, + "documentation": "@notice Sets contract which specifies fee parameters\n@param feeContract Address of the fee contract\n@return { \"success\" : \"Returns true if lib.setMasterFeeContract succeeds\" }", + "id": 448, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 433, + "modifierName": { + "argumentTypes": null, + "id": 432, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "5056:9:3", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "5056:9:3" + } + ], + "name": "setMasterFeeContract", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 431, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 430, + "name": "feeContract", + "nodeType": "VariableDeclaration", + "scope": 448, + "src": "5028:19:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 429, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5028:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5027:21:3" + }, + "payable": false, + "returnParameters": { + "id": 436, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 435, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 448, + "src": "5075:12:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 434, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5075:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5074:14:3" + }, + "scope": 470, + "src": "4998:351:3", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 468, + "nodeType": "Block", + "src": "5415:282:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 463, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 455, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "5522:5:3", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 457, + "indexExpression": { + "argumentTypes": null, + "id": 456, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 452, + "src": "5528:9:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5522:16:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 460, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 450, + "src": "5565:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 461, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 452, + "src": "5575:9:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 458, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "5542:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 459, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "isRegisteredToFirm", + "nodeType": "MemberAccess", + "referencedDeclaration": 3932, + "src": "5542:22:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address) view returns (bool)" + } + }, + "id": 462, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5542:43:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5522:63:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a205472616e73616374696f6e2073656e64657220646f6573206e6f742068617665207065726d697373696f6e20666f722074686973206f7065726174696f6e21", + "id": 464, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5597:72:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d3def153e2e51aa28ae18a72fd9db16026b538556464ddd7af6de088c3965fad", + "typeString": "literal_string \"Error: Transaction sender does not have permission for this operation!\"" + }, + "value": "Error: Transaction sender does not have permission for this operation!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d3def153e2e51aa28ae18a72fd9db16026b538556464ddd7af6de088c3965fad", + "typeString": "literal_string \"Error: Transaction sender does not have permission for this operation!\"" + } + ], + "id": 454, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "5514:7:3", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 465, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5514:165:3", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 466, + "nodeType": "ExpressionStatement", + "src": "5514:165:3" + }, + { + "id": 467, + "nodeType": "PlaceholderStatement", + "src": "5689:1:3" + } + ] + }, + "documentation": null, + "id": 469, + "name": "onlyAuthority", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 453, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 450, + "name": "firmName", + "nodeType": "VariableDeclaration", + "scope": 469, + "src": "5379:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 449, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "5379:6:3", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 452, + "name": "authority", + "nodeType": "VariableDeclaration", + "scope": 469, + "src": "5396:17:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 451, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5396:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5378:36:3" + }, + "src": "5356:341:3", + "visibility": "internal" + } + ], + "scope": 471, + "src": "871:4829:3" + } + ], + "src": "0:5701:3" + }, + "compiler": { + "name": "solc", + "version": "0.4.24+commit.e67f0147.Emscripten.clang" + }, + "networks": { + "1": { + "events": {}, + "links": {}, + "address": "0x4cd9ce52daef9234897d7cba73857347c6b4d11b", + "transactionHash": "0xc4efdffd30c140e223b202b373cdc2b932397898dbcbec9a2d39b05e9d8697a0" + } + }, + "schemaVersion": "2.0.1", + "updatedAt": "2018-09-18T18:57:45.575Z" +} \ No newline at end of file diff --git a/deployed/mainnet-deprecated/TokenIOCurrencyAuthority.json b/deployed/mainnet-deprecated/TokenIOCurrencyAuthority.json new file mode 100644 index 0000000..5b4b9c5 --- /dev/null +++ b/deployed/mainnet-deprecated/TokenIOCurrencyAuthority.json @@ -0,0 +1,13012 @@ +{ + "contractName": "TokenIOCurrencyAuthority", + "abi": [ + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "allowOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "removeOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "", + "type": "address" + } + ], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "name": "_storageContract", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "AllowOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "RevokeOwnership", + "type": "event" + }, + { + "constant": true, + "inputs": [ + { + "name": "currency", + "type": "string" + }, + { + "name": "account", + "type": "address" + } + ], + "name": "getTokenBalance", + "outputs": [ + { + "name": "balance", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "currency", + "type": "string" + } + ], + "name": "getTokenSupply", + "outputs": [ + { + "name": "supply", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "account", + "type": "address" + }, + { + "name": "isAllowed", + "type": "bool" + }, + { + "name": "issuerFirm", + "type": "string" + } + ], + "name": "freezeAccount", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "account", + "type": "address" + }, + { + "name": "isApproved", + "type": "bool" + }, + { + "name": "limit", + "type": "uint256" + }, + { + "name": "issuerFirm", + "type": "string" + } + ], + "name": "approveKYC", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "currency", + "type": "string" + }, + { + "name": "account", + "type": "address" + }, + { + "name": "amount", + "type": "uint256" + }, + { + "name": "limit", + "type": "uint256" + }, + { + "name": "issuerFirm", + "type": "string" + } + ], + "name": "approveKYCAndDeposit", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "account", + "type": "address" + }, + { + "name": "limit", + "type": "uint256" + }, + { + "name": "issuerFirm", + "type": "string" + } + ], + "name": "setAccountSpendingLimit", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "account", + "type": "address" + } + ], + "name": "getAccountSpendingRemaining", + "outputs": [ + { + "name": "spendingRemaining", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "account", + "type": "address" + } + ], + "name": "getAccountSpendingLimit", + "outputs": [ + { + "name": "spendingLimit", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "currency", + "type": "string" + }, + { + "name": "bpsRate", + "type": "uint256" + }, + { + "name": "issuerFirm", + "type": "string" + } + ], + "name": "setFxBpsRate", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "currency", + "type": "string" + }, + { + "name": "fxAmount", + "type": "uint256" + } + ], + "name": "getFxUSDAmount", + "outputs": [ + { + "name": "usdAmount", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "originalAccount", + "type": "address" + }, + { + "name": "updatedAccount", + "type": "address" + }, + { + "name": "issuerFirm", + "type": "string" + } + ], + "name": "approveForwardedAccount", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "currency", + "type": "string" + }, + { + "name": "account", + "type": "address" + }, + { + "name": "amount", + "type": "uint256" + }, + { + "name": "issuerFirm", + "type": "string" + } + ], + "name": "deposit", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "currency", + "type": "string" + }, + { + "name": "account", + "type": "address" + }, + { + "name": "amount", + "type": "uint256" + }, + { + "name": "issuerFirm", + "type": "string" + } + ], + "name": "withdraw", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5060405160208061457b833981016040908152905133600090815260208190529182208054600160ff19918216811783558054600160a060020a031916600160a060020a03909416939093178355815416909117905561450590819061007690396000f3006080604052600436106100d75763ffffffff60e060020a60003504166328e53bb281146100dc57806329db8ec4146101a25780633cdb9762146101d5578063448900141461023957806346e06634146102d65780634bbc142c146103445780635d586bfd1461036557806361e7662b14610412578063666a342714610433578063666e1b391461045457806379662bd5146104755780638a8f1f2514610522578063a0776a591461058b578063e354a3f2146105e4578063e6562fe11461064f578063f2de12fc146106be578063f2fde38b14610719575b600080fd5b3480156100e857600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261018e94369492936024939284019190819084018382808284375050604080516020601f60608a01358b0180359182018390048302840183018552818452989b600160a060020a038b35169b838c01359b958601359a91995097506080909401955091935091820191819084018382808284375094975061073a9650505050505050565b604080519115158252519081900360200190f35b3480156101ae57600080fd5b506101c3600160a060020a0360043516610b8f565b60408051918252519081900360200190f35b3480156101e157600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101c394369492936024939284019190819084018382808284375094975050509235600160a060020a03169350610ba892505050565b34801561024557600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261018e94369492936024939284019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b8a359b909a909994019750919550918201935091508190840183828082843750949750610bc39650505050505050565b3480156102e257600080fd5b50604080516020601f60643560048181013592830184900484028501840190955281845261018e94600160a060020a0381351694602480351515956044359536956084949301918190840183828082843750949750610cf19650505050505050565b34801561035057600080fd5b5061018e600160a060020a036004351661108f565b34801561037157600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261018e94369492936024939284019190819084018382808284375050604080516020888301358a018035601f8101839004830284018301909452838352979a8935600160a060020a03169a8a8301359a9199909850606090910196509194509081019250819084018382808284375094975061116f9650505050505050565b34801561041e57600080fd5b506101c3600160a060020a03600435166112fa565b34801561043f57600080fd5b5061018e600160a060020a036004351661130d565b34801561046057600080fd5b5061018e600160a060020a03600435166113ea565b34801561048157600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261018e94369492936024939284019190819084018382808284375050604080516020888301358a018035601f8101839004830284018301909452838352979a8935600160a060020a03169a8a8301359a919990985060609091019650919450908101925081908401838280828437509497506113ff9650505050505050565b34801561052e57600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261018e948235600160a060020a03169460248035953695946064949201919081908401838280828437509497506115289650505050505050565b34801561059757600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101c39436949293602493928401919081908401838280828437509497506116709650505050505050565b3480156105f057600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261018e948235600160a060020a031694602480351515953695946064949201919081908401838280828437509497506116839650505050505050565b34801561065b57600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261018e948235600160a060020a03908116956024803590921695369594606494929301919081908401838280828437509497506117a69650505050505050565b3480156106ca57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101c394369492936024939284019190819084018382808284375094975050933594506118ee9350505050565b34801561072557600080fd5b5061018e600160a060020a0360043516611902565b600081336107506001838363ffffffff611a6016565b15156107a8576040805160e560020a62461bcd02815260206004820152603a60248201526000805160206143948339815191526044820152600080516020614434833981519152606482015290519081900360840190fd5b6107bb600188818763ffffffff611c0c16565b151561085d576040805160e560020a62461bcd02815260206004820152605b60248201527f4572726f723a20556e61626c6520746f20617070726f7665206163636f756e7460448201527f2e20506c6561736520636865636b206973737565724669726d20616e6420666960648201527f726d20617574686f726974792061726520726567697374657265640000000000608482015290519081900360a40190fd5b610870600188818763ffffffff611ed916565b1515610912576040805160e560020a62461bcd02815260206004820152605e60248201527f4572726f723a20556e61626c6520746f20736574206163636f756e742073746160448201527f7475732e20506c6561736520636865636b206973737565724669726d20616e6460648201527f206669726d20617574686f726974792061726520726567697374657265640000608482015290519081900360a40190fd5b61092660018989898863ffffffff61215e16565b15156109c8576040805160e560020a62461bcd02815260206004820152605960248201527f4572726f723a20556e61626c6520746f206465706f7369742066756e64732e2060448201527f506c6561736520636865636b206973737565724669726d20616e64206669726d60648201527f20617574686f7269747920617265207265676973746572656400000000000000608482015290519081900360a40190fd5b6109da6001888763ffffffff6129db16565b1515610aa2576040805160e560020a62461bcd02815260206004820152607260248201527f4572726f723a20556e61626c6520746f2073657420696e697469616c2073706560448201527f6e64696e67206c696d697420666f72206163636f756e742e20506c656173652060648201527f636865636b206973737565724669726d20616e64206669726d20617574686f7260848201527f697479206172652072656769737465726564000000000000000000000000000060a482015290519081900360c40190fd5b610ab960018862015180420163ffffffff612bee16565b1515610b81576040805160e560020a62461bcd02815260206004820152606b60248201527f4572726f723a20556e61626c6520746f20736574207370656e64696e6720706560448201527f72696f6420666f72206163636f756e742e20506c6561736520636865636b206960648201527f73737565724669726d20616e64206669726d20617574686f726974792061726560848201527f207265676973746572656400000000000000000000000000000000000000000060a482015290519081900360c40190fd5b506001979650505050505050565b6000610ba260018363ffffffff612c7f16565b92915050565b6000610bbc6001848463ffffffff612ca416565b9392505050565b60008133610bd96001838363ffffffff611a6016565b1515610c31576040805160e560020a62461bcd02815260206004820152603a60248201526000805160206143948339815191526044820152600080516020614434833981519152606482015290519081900360840190fd5b610c436001878763ffffffff612e0516565b1515610ce5576040805160e560020a62461bcd02815260206004820152605560248201527f4572726f723a20556e61626c6520746f2073657420465820555344206261736960448201527f7320706f696e747320726174652e20506c6561736520656e737572652069737360648201527f7565724669726d20697320617574686f72697a65640000000000000000000000608482015290519081900360a40190fd5b50600195945050505050565b60008133610d076001838363ffffffff611a6016565b1515610d5f576040805160e560020a62461bcd02815260206004820152603a60248201526000805160206143948339815191526044820152600080516020614434833981519152606482015290519081900360840190fd5b610d72600188888763ffffffff611c0c16565b1515610e14576040805160e560020a62461bcd02815260206004820152605b60248201527f4572726f723a20556e61626c6520746f20617070726f7665206163636f756e7460448201527f2e20506c6561736520636865636b206973737565724669726d20616e6420666960648201527f726d20617574686f726974792061726520726567697374657265640000000000608482015290519081900360a40190fd5b610e27600188888763ffffffff611ed916565b1515610ec9576040805160e560020a62461bcd02815260206004820152605e60248201527f4572726f723a20556e61626c6520746f20736574206163636f756e742073746160448201527f7475732e20506c6561736520636865636b206973737565724669726d20616e6460648201527f206669726d20617574686f726974792061726520726567697374657265640000608482015290519081900360a40190fd5b610edb6001888763ffffffff6129db16565b1515610fa3576040805160e560020a62461bcd02815260206004820152607260248201527f4572726f723a20556e61626c6520746f2073657420696e697469616c2073706560448201527f6e64696e67206c696d697420666f72206163636f756e742e20506c656173652060648201527f636865636b206973737565724669726d20616e64206669726d20617574686f7260848201527f697479206172652072656769737465726564000000000000000000000000000060a482015290519081900360c40190fd5b610fba60018862015180420163ffffffff612bee16565b1515611082576040805160e560020a62461bcd02815260206004820152606b60248201527f4572726f723a20556e61626c6520746f20736574207370656e64696e6720706560448201527f72696f6420666f72206163636f756e742e20506c6561736520636865636b206960648201527f73737565724669726d20616e64206669726d20617574686f726974792061726560848201527f207265676973746572656400000000000000000000000000000000000000000060a482015290519081900360c40190fd5b5060019695505050505050565b3360009081526020819052604081205460ff16151561111e576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b600081336111856001838363ffffffff611a6016565b15156111dd576040805160e560020a62461bcd02815260206004820152603a60248201526000805160206143948339815191526044820152600080516020614434833981519152606482015290519081900360840190fd5b6111ee60018763ffffffff61300216565b1515611244576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a204163636f756e74206973206e6f742076657269666965642100604482015290519081900360640190fd5b61125860018888888863ffffffff61215e16565b1515611082576040805160e560020a62461bcd02815260206004820152605960248201527f4572726f723a20556e61626c6520746f206465706f7369742066756e64732e2060448201527f506c6561736520636865636b206973737565724669726d20616e64206669726d60648201527f20617574686f7269747920617265207265676973746572656400000000000000608482015290519081900360a40190fd5b6000610ba260018363ffffffff61311916565b3360009081526020819052604081205460ff16151561139c576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b600081336114156001838363ffffffff611a6016565b151561146d576040805160e560020a62461bcd02815260206004820152603a60248201526000805160206143948339815191526044820152600080516020614434833981519152606482015290519081900360840190fd5b61147e60018763ffffffff61300216565b15156114d4576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a204163636f756e74206973206e6f742076657269666965642100604482015290519081900360640190fd5b6114e860018888888863ffffffff61325816565b15156110825760405160e560020a62461bcd0281526004018080602001828103825260868152602001806144546086913960a00191505060405180910390fd5b6000813361153e6001838363ffffffff611a6016565b1515611596576040805160e560020a62461bcd02815260206004820152603a60248201526000805160206143948339815191526044820152600080516020614434833981519152606482015290519081900360840190fd5b6115a86001878763ffffffff6129db16565b1515610ce5576040805160e560020a62461bcd02815260206004820152607260248201527f4572726f723a20556e61626c6520746f2073657420696e697469616c2073706560448201527f6e64696e67206c696d697420666f72206163636f756e742e20506c656173652060648201527f636865636b206973737565724669726d20616e64206669726d20617574686f7260848201527f697479206172652072656769737465726564000000000000000000000000000060a482015290519081900360c40190fd5b6000610ba260018363ffffffff613a2816565b600081336116996001838363ffffffff611a6016565b15156116f1576040805160e560020a62461bcd02815260206004820152603a60248201526000805160206143948339815191526044820152600080516020614434833981519152606482015290519081900360840190fd5b611704600187878763ffffffff611ed916565b1515610ce5576040805160e560020a62461bcd02815260206004820152605a60248201527f4572726f723a20556e61626c6520746f20667265657a65206163636f756e742e60448201527f20506c6561736520636865636b206973737565724669726d20616e642066697260648201527f6d20617574686f72697479206172652072656769737465726564000000000000608482015290519081900360a40190fd5b600081336117bc6001838363ffffffff611a6016565b1515611814576040805160e560020a62461bcd02815260206004820152603a60248201526000805160206143948339815191526044820152600080516020614434833981519152606482015290519081900360840190fd5b6118266001878763ffffffff613ae816565b1515610ce5576040805160e560020a62461bcd02815260206004820152606d60248201527f4572726f723a20556e61626c6520746f2073657420666f72776172646564206160448201527f64647265737320666f72206163636f756e742e20506c6561736520636865636b60648201527f206973737565724669726d20616e64206669726d20617574686f72697479206160848201527f726520726567697374657265640000000000000000000000000000000000000060a482015290519081900360c40190fd5b6000610bbc6001848463ffffffff613c1016565b3360009081526020819052604081205460ff161515611991576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a03821615156119f1576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b60008083611a6e8685613cb4565b60405160200180807f726567697374657265642e617574686f7269747900000000000000000000000081525060140183805190602001908083835b60208310611ac85780518252601f199092019160209182019101611aa9565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310611b4a5780518252601f199092019160209182019101611b2b565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f7ae1cfca000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a039094169550637ae1cfca945060248083019491935090918290030181600087803b158015611bd757600080fd5b505af1158015611beb573d6000803e3d6000fd5b505050506040513d6020811015611c0157600080fd5b505195945050505050565b600080611c198686613cb4565b60405160200180807f6163636f756e742e6b7963000000000000000000000000000000000000000000815250600b0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611ca75780518252601f199092019160209182019101611c88565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208c547fabfdcced000000000000000000000000000000000000000000000000000000008452600484018290528b151560248501529451909750600160a060020a03909416955063abfdcced945060448083019491935090918290030181600087803b158015611d3c57600080fd5b505af1158015611d50573d6000803e3d6000fd5b505050506040513d6020811015611d6657600080fd5b50511515611e1e576040805160e560020a62461bcd02815260206004820152606860248201526000805160206143f483398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b84600160a060020a03167fab56f1457128531bea5d39a6dbdbcdc655f2b2959bd7ee369f6461581aa6444d8585604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611e92578181015183820152602001611e7a565b50505050905090810190601f168015611ebf5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a250600195945050505050565b600080611ee68686613cb4565b60405160200180807f6163636f756e742e616c6c6f7765640000000000000000000000000000000000815250600f0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611f745780518252601f199092019160209182019101611f55565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208c547fabfdcced000000000000000000000000000000000000000000000000000000008452600484018290528b151560248501529451909750600160a060020a03909416955063abfdcced945060448083019491935090918290030181600087803b15801561200957600080fd5b505af115801561201d573d6000803e3d6000fd5b505050506040513d602081101561203357600080fd5b505115156120eb576040805160e560020a62461bcd02815260206004820152606860248201526000805160206143f483398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b84600160a060020a03167f1d71109398f40d30b03a3640657b60db5013a5e75026c3db99007b43bede166585856040518083151515158152602001806020018281038252838181518152602001915080519060200190808383600083811015611e92578181015183820152602001611e7a565b6000806000808761216f8a89613cb4565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b602083106121c95780518252601f1990920191602091820191016121aa565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b6020831061224b5780518252601f19909201916020918201910161222c565b51815160001960209485036101000a019081169019919091161790526040519390910183900383207f746f6b656e2e69737375656400000000000000000000000000000000000000008483019081528e519199508e96508b955093602c019250908501908083835b602083106122d25780518252601f1990920191602091820191016122b3565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b6020831061231a5780518252601f1990920191602091820191016122fb565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b6020831061237e5780518252601f19909201916020918201910161235f565b51815160209384036101000a60001901801990921691161790526040519190930181900381207f746f6b656e2e737570706c7900000000000000000000000000000000000000008285019081528e519198508e96509450602c90910192850191508083835b602083106124025780518252601f1990920191602091820191016123e3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083106124655780518252601f199092019160209182019101612446565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208f5460e060020a63bd02d0f5028452600484018b90529451909750600160a060020a03909416955063e2a4853a9450889361252093508c92879263bd02d0f5926024808401938290030181600087803b1580156124e857600080fd5b505af11580156124fc573d6000803e3d6000fd5b505050506040513d602081101561251257600080fd5b50519063ffffffff613e2616565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b15801561256857600080fd5b505af115801561257c573d6000803e3d6000fd5b505050506040513d602081101561259257600080fd5b50511515612614576040805160e560020a62461bcd02815260206004820152606960248201526000805160206143f483398151915260448201526000805160206143d483398151915260648201526000805160206143b4833981519152608482015260008051602061441483398151915260a482015290519081900360c40190fd5b88546040805160e060020a63bd02d0f5028152600481018590529051600160a060020a039092169163e2a4853a918591612673918b91869163bd02d0f59160248083019260209291908290030181600087803b1580156124e857600080fd5b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b1580156126bb57600080fd5b505af11580156126cf573d6000803e3d6000fd5b505050506040513d60208110156126e557600080fd5b50511515612767576040805160e560020a62461bcd02815260206004820152606960248201526000805160206143f483398151915260448201526000805160206143d483398151915260648201526000805160206143b4833981519152608482015260008051602061441483398151915260a482015290519081900360c40190fd5b88546040805160e060020a63bd02d0f5028152600481018490529051600160a060020a039092169163e2a4853a9184916127c6918b91869163bd02d0f59160248083019260209291908290030181600087803b1580156124e857600080fd5b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b15801561280e57600080fd5b505af1158015612822573d6000803e3d6000fd5b505050506040513d602081101561283857600080fd5b505115156128ba576040805160e560020a62461bcd02815260206004820152606960248201526000805160206143f483398151915260448201526000805160206143d483398151915260648201526000805160206143b4833981519152608482015260008051602061441483398151915260a482015290519081900360c40190fd5b86600160a060020a03167fb20a35859ac659f96b757a0975ff35141c00728783cc1b222c2fc323ed8a34ea898888604051808060200184815260200180602001838103835286818151815260200191508051906020019080838360005b8381101561292f578181015183820152602001612917565b50505050905090810190601f16801561295c5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561298f578181015183820152602001612977565b50505050905090810190601f1680156129bc5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a250600198975050505050505050565b6000808360405160200180807f6163636f756e742e7370656e64696e672e6c696d69740000000000000000000081525060160182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310612a6d5780518252601f199092019160209182019101612a4e565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547fe2a4853a00000000000000000000000000000000000000000000000000000000845260048401829052602484018b90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b158015612b0157600080fd5b505af1158015612b15573d6000803e3d6000fd5b505050506040513d6020811015612b2b57600080fd5b50511515612be3576040805160e560020a62461bcd02815260206004820152606860248201526000805160206143f483398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b506001949350505050565b6000808360405160200180807f6c696d69742e7370656e64696e672e706572696f64000000000000000000000081525060150182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310612a6d5780518252601f199092019160209182019101612a4e565b6000610bbc612c8e8484613ea9565b612c988585613119565b9063ffffffff613f4b16565b60008083612cb28685613cb4565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b60208310612d0c5780518252601f199092019160209182019101612ced565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310612d8e5780518252601f199092019160209182019101612d6f565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b158015611bd757600080fd5b6000808360405160200180807f66782e7573642e72617465000000000000000000000000000000000000000000815250600b0182805190602001908083835b60208310612e635780518252601f199092019160209182019101612e44565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310612ec65780518252601f199092019160209182019101612ea7565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547fe2a4853a00000000000000000000000000000000000000000000000000000000845260048401829052602484018b90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b158015612f5a57600080fd5b505af1158015612f6e573d6000803e3d6000fd5b505050506040513d6020811015612f8457600080fd5b50511515612be3576040805160e560020a62461bcd02815260206004820152603060248201527f4572726f723a20556e61626c6520746f20757064617465206163636f756e742060448201527f7370656e64696e6720706572696f642e00000000000000000000000000000000606482015290519081900360840190fd5b600061300e8383613fd0565b151561308a576040805160e560020a62461bcd02815260206004820152602a60248201527f4572726f723a204163636f756e7420646f6573206e6f742068617665204b594360448201527f20617070726f76616c2e00000000000000000000000000000000000000000000606482015290519081900360840190fd5b61309483836140f8565b1515613110576040805160e560020a62461bcd02815260206004820152602481018290527f4572726f723a204163636f756e7420737461747573206973206066616c73656060448201527f2e204163636f756e7420737461747573206d757374206265206074727565602e606482015290519081900360840190fd5b50600192915050565b6000808260405160200180807f6163636f756e742e7370656e64696e672e6c696d69740000000000000000000081525060160182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106131ab5780518252601f19909201916020918201910161318c565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b15801561322257600080fd5b505af1158015613236573d6000803e3d6000fd5b505050506040513d602081101561324c57600080fd5b505191505b5092915050565b600080600080876132698a89613cb4565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b602083106132c35780518252601f1990920191602091820191016132a4565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106133455780518252601f199092019160209182019101613326565b51815160001960209485036101000a019081169019919091161790526040519390910183900383207f746f6b656e2e69737375656400000000000000000000000000000000000000008483019081528e519199508e96508b955093602c019250908501908083835b602083106133cc5780518252601f1990920191602091820191016133ad565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106134145780518252601f1990920191602091820191016133f5565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b602083106134785780518252601f199092019160209182019101613459565b51815160209384036101000a60001901801990921691161790526040519190930181900381207f746f6b656e2e737570706c7900000000000000000000000000000000000000008285019081528e519198508e96509450602c90910192850191508083835b602083106134fc5780518252601f1990920191602091820191016134dd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b6020831061355f5780518252601f199092019160209182019101613540565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208f5460e060020a63bd02d0f5028452600484018b90529451909750600160a060020a03909416955063e2a4853a9450889361361a93508c92879263bd02d0f5926024808401938290030181600087803b1580156135e257600080fd5b505af11580156135f6573d6000803e3d6000fd5b505050506040513d602081101561360c57600080fd5b50519063ffffffff613f4b16565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b15801561366257600080fd5b505af1158015613676573d6000803e3d6000fd5b505050506040513d602081101561368c57600080fd5b5051151561370e576040805160e560020a62461bcd02815260206004820152606960248201526000805160206143f483398151915260448201526000805160206143d483398151915260648201526000805160206143b4833981519152608482015260008051602061441483398151915260a482015290519081900360c40190fd5b88546040805160e060020a63bd02d0f5028152600481018590529051600160a060020a039092169163e2a4853a91859161376d918b91869163bd02d0f59160248083019260209291908290030181600087803b1580156135e257600080fd5b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b1580156137b557600080fd5b505af11580156137c9573d6000803e3d6000fd5b505050506040513d60208110156137df57600080fd5b50511515613861576040805160e560020a62461bcd02815260206004820152606960248201526000805160206143f483398151915260448201526000805160206143d483398151915260648201526000805160206143b4833981519152608482015260008051602061441483398151915260a482015290519081900360c40190fd5b88546040805160e060020a63bd02d0f5028152600481018490529051600160a060020a039092169163e2a4853a9184916138c0918b91869163bd02d0f59160248083019260209291908290030181600087803b1580156135e257600080fd5b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b15801561390857600080fd5b505af115801561391c573d6000803e3d6000fd5b505050506040513d602081101561393257600080fd5b505115156139b4576040805160e560020a62461bcd02815260206004820152606960248201526000805160206143f483398151915260448201526000805160206143d483398151915260648201526000805160206143b4833981519152608482015260008051602061441483398151915260a482015290519081900360c40190fd5b86600160a060020a03167fbe0071d3ab0eb6dc7f33a38ba50120d775cd62fa123f3b59c193caf48e44bb4c898888604051808060200184815260200180602001838103835286818151815260200191508051906020019080838360008381101561292f578181015183820152602001612917565b6000808260405160200180807f746f6b656e2e737570706c790000000000000000000000000000000000000000815250600c0182805190602001908083835b60208310613a865780518252601f199092019160209182019101613a67565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052604051808280519060200190808383602083106131ab5780518252601f19909201916020918201910161318c565b6000808260405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310613b7a5780518252601f199092019160209182019101613b5b565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547fca446dd900000000000000000000000000000000000000000000000000000000845260048401829052600160a060020a038c81166024860152955191985094909416955063ca446dd9945060448083019491935090918290030181600087803b158015612b0157600080fd5b600080600080613c55876040805190810160405280600481526020017f5553447800000000000000000000000000000000000000000000000000000000815250614192565b9250613c618787614192565b9150613ca982600a0a613c9185600a0a613c9d612710613c91613c848e8e6141ef565b8c9063ffffffff61424c16565b9063ffffffff6142eb16565b9063ffffffff61424c16565b979650505050505050565b60008060008360405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310613d485780518252601f199092019160209182019101613d29565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015613dd557600080fd5b505af1158015613de9573d6000803e3d6000fd5b505050506040513d6020811015613dff57600080fd5b50519050600160a060020a03811615613e1a57809250613e1e565b8392505b505092915050565b600082820183811015610bbc576040805160e560020a62461bcd02815260206004820152602160248201527f4572726f723a20556e73616665206164646974696f6e206f7065726174696f6e60448201527f2100000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008082613eb78585614302565b60405160200180807f6163636f756e742e7370656e64696e672e616d6f756e7400000000000000000081525060170183600160a060020a0316600160a060020a0316606060020a02815260140182815260200192505050604051602081830303815290604052604051808280519060200190808383602083106131ab5780518252601f19909201916020918201910161318c565b600082821115613fca576040805160e560020a62461bcd028152602060048201526024808201527f4572726f723a20556e73616665207375627472616374696f6e206f706572617460448201527f696f6e2100000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50900390565b600080613fdd8484613cb4565b60405160200180807f6163636f756e742e6b7963000000000000000000000000000000000000000000815250600b0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b6020831061406b5780518252601f19909201916020918201910161404c565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547f7ae1cfca000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a039094169550637ae1cfca945060248083019491935090918290030181600087803b15801561322257600080fd5b6000806141058484613cb4565b60405160200180807f6163636f756e742e616c6c6f7765640000000000000000000000000000000000815250600f0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083836020831061406b5780518252601f19909201916020918201910161404c565b6000808260405160200180807f746f6b656e2e646563696d616c73000000000000000000000000000000000000815250600e01828051906020019080838360208310613a865780518252601f199092019160209182019101613a67565b6000808260405160200180807f66782e7573642e72617465000000000000000000000000000000000000000000815250600b01828051906020019080838360208310613a865780518252601f199092019160209182019101613a67565b60008083151561425f5760009150613251565b5082820282848281151561426f57fe5b0414610bbc576040805160e560020a62461bcd02815260206004820152602760248201527f4572726f723a20556e73616665206d756c7469706c69636174696f6e206f706560448201527f726174696f6e2100000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008082848115156142f957fe5b04949350505050565b6000808260405160200180807f6c696d69742e7370656e64696e672e706572696f64000000000000000000000081525060150182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106131ab5780518252601f19909201916020918201910161318c56004572726f723a206973737565724669726d20616e642f6f72206669726d2061756c6c6f776564207065726d697373696f6e7320776974682073746f726167652075652e20506c6561736520656e7375726520636f6e74726163742068617320614572726f723a20556e61626c6520746f207365742073746f726167652076616c636f6e74726163742e000000000000000000000000000000000000000000000074686f7269747920617265206e6f7420726567697374657265640000000000004572726f723a20556e61626c6520746f2077697468647261772066756e64732e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f7269747920617265207265676973746572656420616e642068617665206973737565642066756e647320746861742063616e2062652077697468647261776ea165627a7a72305820a0eb788fffd99d155740f884f5f313458d7a83f1900c5ff2906357db56c5fd780029", + "deployedBytecode": "0x6080604052600436106100d75763ffffffff60e060020a60003504166328e53bb281146100dc57806329db8ec4146101a25780633cdb9762146101d5578063448900141461023957806346e06634146102d65780634bbc142c146103445780635d586bfd1461036557806361e7662b14610412578063666a342714610433578063666e1b391461045457806379662bd5146104755780638a8f1f2514610522578063a0776a591461058b578063e354a3f2146105e4578063e6562fe11461064f578063f2de12fc146106be578063f2fde38b14610719575b600080fd5b3480156100e857600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261018e94369492936024939284019190819084018382808284375050604080516020601f60608a01358b0180359182018390048302840183018552818452989b600160a060020a038b35169b838c01359b958601359a91995097506080909401955091935091820191819084018382808284375094975061073a9650505050505050565b604080519115158252519081900360200190f35b3480156101ae57600080fd5b506101c3600160a060020a0360043516610b8f565b60408051918252519081900360200190f35b3480156101e157600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101c394369492936024939284019190819084018382808284375094975050509235600160a060020a03169350610ba892505050565b34801561024557600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261018e94369492936024939284019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b8a359b909a909994019750919550918201935091508190840183828082843750949750610bc39650505050505050565b3480156102e257600080fd5b50604080516020601f60643560048181013592830184900484028501840190955281845261018e94600160a060020a0381351694602480351515956044359536956084949301918190840183828082843750949750610cf19650505050505050565b34801561035057600080fd5b5061018e600160a060020a036004351661108f565b34801561037157600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261018e94369492936024939284019190819084018382808284375050604080516020888301358a018035601f8101839004830284018301909452838352979a8935600160a060020a03169a8a8301359a9199909850606090910196509194509081019250819084018382808284375094975061116f9650505050505050565b34801561041e57600080fd5b506101c3600160a060020a03600435166112fa565b34801561043f57600080fd5b5061018e600160a060020a036004351661130d565b34801561046057600080fd5b5061018e600160a060020a03600435166113ea565b34801561048157600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261018e94369492936024939284019190819084018382808284375050604080516020888301358a018035601f8101839004830284018301909452838352979a8935600160a060020a03169a8a8301359a919990985060609091019650919450908101925081908401838280828437509497506113ff9650505050505050565b34801561052e57600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261018e948235600160a060020a03169460248035953695946064949201919081908401838280828437509497506115289650505050505050565b34801561059757600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101c39436949293602493928401919081908401838280828437509497506116709650505050505050565b3480156105f057600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261018e948235600160a060020a031694602480351515953695946064949201919081908401838280828437509497506116839650505050505050565b34801561065b57600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261018e948235600160a060020a03908116956024803590921695369594606494929301919081908401838280828437509497506117a69650505050505050565b3480156106ca57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101c394369492936024939284019190819084018382808284375094975050933594506118ee9350505050565b34801561072557600080fd5b5061018e600160a060020a0360043516611902565b600081336107506001838363ffffffff611a6016565b15156107a8576040805160e560020a62461bcd02815260206004820152603a60248201526000805160206143948339815191526044820152600080516020614434833981519152606482015290519081900360840190fd5b6107bb600188818763ffffffff611c0c16565b151561085d576040805160e560020a62461bcd02815260206004820152605b60248201527f4572726f723a20556e61626c6520746f20617070726f7665206163636f756e7460448201527f2e20506c6561736520636865636b206973737565724669726d20616e6420666960648201527f726d20617574686f726974792061726520726567697374657265640000000000608482015290519081900360a40190fd5b610870600188818763ffffffff611ed916565b1515610912576040805160e560020a62461bcd02815260206004820152605e60248201527f4572726f723a20556e61626c6520746f20736574206163636f756e742073746160448201527f7475732e20506c6561736520636865636b206973737565724669726d20616e6460648201527f206669726d20617574686f726974792061726520726567697374657265640000608482015290519081900360a40190fd5b61092660018989898863ffffffff61215e16565b15156109c8576040805160e560020a62461bcd02815260206004820152605960248201527f4572726f723a20556e61626c6520746f206465706f7369742066756e64732e2060448201527f506c6561736520636865636b206973737565724669726d20616e64206669726d60648201527f20617574686f7269747920617265207265676973746572656400000000000000608482015290519081900360a40190fd5b6109da6001888763ffffffff6129db16565b1515610aa2576040805160e560020a62461bcd02815260206004820152607260248201527f4572726f723a20556e61626c6520746f2073657420696e697469616c2073706560448201527f6e64696e67206c696d697420666f72206163636f756e742e20506c656173652060648201527f636865636b206973737565724669726d20616e64206669726d20617574686f7260848201527f697479206172652072656769737465726564000000000000000000000000000060a482015290519081900360c40190fd5b610ab960018862015180420163ffffffff612bee16565b1515610b81576040805160e560020a62461bcd02815260206004820152606b60248201527f4572726f723a20556e61626c6520746f20736574207370656e64696e6720706560448201527f72696f6420666f72206163636f756e742e20506c6561736520636865636b206960648201527f73737565724669726d20616e64206669726d20617574686f726974792061726560848201527f207265676973746572656400000000000000000000000000000000000000000060a482015290519081900360c40190fd5b506001979650505050505050565b6000610ba260018363ffffffff612c7f16565b92915050565b6000610bbc6001848463ffffffff612ca416565b9392505050565b60008133610bd96001838363ffffffff611a6016565b1515610c31576040805160e560020a62461bcd02815260206004820152603a60248201526000805160206143948339815191526044820152600080516020614434833981519152606482015290519081900360840190fd5b610c436001878763ffffffff612e0516565b1515610ce5576040805160e560020a62461bcd02815260206004820152605560248201527f4572726f723a20556e61626c6520746f2073657420465820555344206261736960448201527f7320706f696e747320726174652e20506c6561736520656e737572652069737360648201527f7565724669726d20697320617574686f72697a65640000000000000000000000608482015290519081900360a40190fd5b50600195945050505050565b60008133610d076001838363ffffffff611a6016565b1515610d5f576040805160e560020a62461bcd02815260206004820152603a60248201526000805160206143948339815191526044820152600080516020614434833981519152606482015290519081900360840190fd5b610d72600188888763ffffffff611c0c16565b1515610e14576040805160e560020a62461bcd02815260206004820152605b60248201527f4572726f723a20556e61626c6520746f20617070726f7665206163636f756e7460448201527f2e20506c6561736520636865636b206973737565724669726d20616e6420666960648201527f726d20617574686f726974792061726520726567697374657265640000000000608482015290519081900360a40190fd5b610e27600188888763ffffffff611ed916565b1515610ec9576040805160e560020a62461bcd02815260206004820152605e60248201527f4572726f723a20556e61626c6520746f20736574206163636f756e742073746160448201527f7475732e20506c6561736520636865636b206973737565724669726d20616e6460648201527f206669726d20617574686f726974792061726520726567697374657265640000608482015290519081900360a40190fd5b610edb6001888763ffffffff6129db16565b1515610fa3576040805160e560020a62461bcd02815260206004820152607260248201527f4572726f723a20556e61626c6520746f2073657420696e697469616c2073706560448201527f6e64696e67206c696d697420666f72206163636f756e742e20506c656173652060648201527f636865636b206973737565724669726d20616e64206669726d20617574686f7260848201527f697479206172652072656769737465726564000000000000000000000000000060a482015290519081900360c40190fd5b610fba60018862015180420163ffffffff612bee16565b1515611082576040805160e560020a62461bcd02815260206004820152606b60248201527f4572726f723a20556e61626c6520746f20736574207370656e64696e6720706560448201527f72696f6420666f72206163636f756e742e20506c6561736520636865636b206960648201527f73737565724669726d20616e64206669726d20617574686f726974792061726560848201527f207265676973746572656400000000000000000000000000000000000000000060a482015290519081900360c40190fd5b5060019695505050505050565b3360009081526020819052604081205460ff16151561111e576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b600081336111856001838363ffffffff611a6016565b15156111dd576040805160e560020a62461bcd02815260206004820152603a60248201526000805160206143948339815191526044820152600080516020614434833981519152606482015290519081900360840190fd5b6111ee60018763ffffffff61300216565b1515611244576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a204163636f756e74206973206e6f742076657269666965642100604482015290519081900360640190fd5b61125860018888888863ffffffff61215e16565b1515611082576040805160e560020a62461bcd02815260206004820152605960248201527f4572726f723a20556e61626c6520746f206465706f7369742066756e64732e2060448201527f506c6561736520636865636b206973737565724669726d20616e64206669726d60648201527f20617574686f7269747920617265207265676973746572656400000000000000608482015290519081900360a40190fd5b6000610ba260018363ffffffff61311916565b3360009081526020819052604081205460ff16151561139c576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b600081336114156001838363ffffffff611a6016565b151561146d576040805160e560020a62461bcd02815260206004820152603a60248201526000805160206143948339815191526044820152600080516020614434833981519152606482015290519081900360840190fd5b61147e60018763ffffffff61300216565b15156114d4576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a204163636f756e74206973206e6f742076657269666965642100604482015290519081900360640190fd5b6114e860018888888863ffffffff61325816565b15156110825760405160e560020a62461bcd0281526004018080602001828103825260868152602001806144546086913960a00191505060405180910390fd5b6000813361153e6001838363ffffffff611a6016565b1515611596576040805160e560020a62461bcd02815260206004820152603a60248201526000805160206143948339815191526044820152600080516020614434833981519152606482015290519081900360840190fd5b6115a86001878763ffffffff6129db16565b1515610ce5576040805160e560020a62461bcd02815260206004820152607260248201527f4572726f723a20556e61626c6520746f2073657420696e697469616c2073706560448201527f6e64696e67206c696d697420666f72206163636f756e742e20506c656173652060648201527f636865636b206973737565724669726d20616e64206669726d20617574686f7260848201527f697479206172652072656769737465726564000000000000000000000000000060a482015290519081900360c40190fd5b6000610ba260018363ffffffff613a2816565b600081336116996001838363ffffffff611a6016565b15156116f1576040805160e560020a62461bcd02815260206004820152603a60248201526000805160206143948339815191526044820152600080516020614434833981519152606482015290519081900360840190fd5b611704600187878763ffffffff611ed916565b1515610ce5576040805160e560020a62461bcd02815260206004820152605a60248201527f4572726f723a20556e61626c6520746f20667265657a65206163636f756e742e60448201527f20506c6561736520636865636b206973737565724669726d20616e642066697260648201527f6d20617574686f72697479206172652072656769737465726564000000000000608482015290519081900360a40190fd5b600081336117bc6001838363ffffffff611a6016565b1515611814576040805160e560020a62461bcd02815260206004820152603a60248201526000805160206143948339815191526044820152600080516020614434833981519152606482015290519081900360840190fd5b6118266001878763ffffffff613ae816565b1515610ce5576040805160e560020a62461bcd02815260206004820152606d60248201527f4572726f723a20556e61626c6520746f2073657420666f72776172646564206160448201527f64647265737320666f72206163636f756e742e20506c6561736520636865636b60648201527f206973737565724669726d20616e64206669726d20617574686f72697479206160848201527f726520726567697374657265640000000000000000000000000000000000000060a482015290519081900360c40190fd5b6000610bbc6001848463ffffffff613c1016565b3360009081526020819052604081205460ff161515611991576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a03821615156119f1576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b60008083611a6e8685613cb4565b60405160200180807f726567697374657265642e617574686f7269747900000000000000000000000081525060140183805190602001908083835b60208310611ac85780518252601f199092019160209182019101611aa9565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310611b4a5780518252601f199092019160209182019101611b2b565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f7ae1cfca000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a039094169550637ae1cfca945060248083019491935090918290030181600087803b158015611bd757600080fd5b505af1158015611beb573d6000803e3d6000fd5b505050506040513d6020811015611c0157600080fd5b505195945050505050565b600080611c198686613cb4565b60405160200180807f6163636f756e742e6b7963000000000000000000000000000000000000000000815250600b0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611ca75780518252601f199092019160209182019101611c88565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208c547fabfdcced000000000000000000000000000000000000000000000000000000008452600484018290528b151560248501529451909750600160a060020a03909416955063abfdcced945060448083019491935090918290030181600087803b158015611d3c57600080fd5b505af1158015611d50573d6000803e3d6000fd5b505050506040513d6020811015611d6657600080fd5b50511515611e1e576040805160e560020a62461bcd02815260206004820152606860248201526000805160206143f483398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b84600160a060020a03167fab56f1457128531bea5d39a6dbdbcdc655f2b2959bd7ee369f6461581aa6444d8585604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611e92578181015183820152602001611e7a565b50505050905090810190601f168015611ebf5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a250600195945050505050565b600080611ee68686613cb4565b60405160200180807f6163636f756e742e616c6c6f7765640000000000000000000000000000000000815250600f0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611f745780518252601f199092019160209182019101611f55565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208c547fabfdcced000000000000000000000000000000000000000000000000000000008452600484018290528b151560248501529451909750600160a060020a03909416955063abfdcced945060448083019491935090918290030181600087803b15801561200957600080fd5b505af115801561201d573d6000803e3d6000fd5b505050506040513d602081101561203357600080fd5b505115156120eb576040805160e560020a62461bcd02815260206004820152606860248201526000805160206143f483398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b84600160a060020a03167f1d71109398f40d30b03a3640657b60db5013a5e75026c3db99007b43bede166585856040518083151515158152602001806020018281038252838181518152602001915080519060200190808383600083811015611e92578181015183820152602001611e7a565b6000806000808761216f8a89613cb4565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b602083106121c95780518252601f1990920191602091820191016121aa565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b6020831061224b5780518252601f19909201916020918201910161222c565b51815160001960209485036101000a019081169019919091161790526040519390910183900383207f746f6b656e2e69737375656400000000000000000000000000000000000000008483019081528e519199508e96508b955093602c019250908501908083835b602083106122d25780518252601f1990920191602091820191016122b3565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b6020831061231a5780518252601f1990920191602091820191016122fb565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b6020831061237e5780518252601f19909201916020918201910161235f565b51815160209384036101000a60001901801990921691161790526040519190930181900381207f746f6b656e2e737570706c7900000000000000000000000000000000000000008285019081528e519198508e96509450602c90910192850191508083835b602083106124025780518252601f1990920191602091820191016123e3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083106124655780518252601f199092019160209182019101612446565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208f5460e060020a63bd02d0f5028452600484018b90529451909750600160a060020a03909416955063e2a4853a9450889361252093508c92879263bd02d0f5926024808401938290030181600087803b1580156124e857600080fd5b505af11580156124fc573d6000803e3d6000fd5b505050506040513d602081101561251257600080fd5b50519063ffffffff613e2616565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b15801561256857600080fd5b505af115801561257c573d6000803e3d6000fd5b505050506040513d602081101561259257600080fd5b50511515612614576040805160e560020a62461bcd02815260206004820152606960248201526000805160206143f483398151915260448201526000805160206143d483398151915260648201526000805160206143b4833981519152608482015260008051602061441483398151915260a482015290519081900360c40190fd5b88546040805160e060020a63bd02d0f5028152600481018590529051600160a060020a039092169163e2a4853a918591612673918b91869163bd02d0f59160248083019260209291908290030181600087803b1580156124e857600080fd5b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b1580156126bb57600080fd5b505af11580156126cf573d6000803e3d6000fd5b505050506040513d60208110156126e557600080fd5b50511515612767576040805160e560020a62461bcd02815260206004820152606960248201526000805160206143f483398151915260448201526000805160206143d483398151915260648201526000805160206143b4833981519152608482015260008051602061441483398151915260a482015290519081900360c40190fd5b88546040805160e060020a63bd02d0f5028152600481018490529051600160a060020a039092169163e2a4853a9184916127c6918b91869163bd02d0f59160248083019260209291908290030181600087803b1580156124e857600080fd5b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b15801561280e57600080fd5b505af1158015612822573d6000803e3d6000fd5b505050506040513d602081101561283857600080fd5b505115156128ba576040805160e560020a62461bcd02815260206004820152606960248201526000805160206143f483398151915260448201526000805160206143d483398151915260648201526000805160206143b4833981519152608482015260008051602061441483398151915260a482015290519081900360c40190fd5b86600160a060020a03167fb20a35859ac659f96b757a0975ff35141c00728783cc1b222c2fc323ed8a34ea898888604051808060200184815260200180602001838103835286818151815260200191508051906020019080838360005b8381101561292f578181015183820152602001612917565b50505050905090810190601f16801561295c5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561298f578181015183820152602001612977565b50505050905090810190601f1680156129bc5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a250600198975050505050505050565b6000808360405160200180807f6163636f756e742e7370656e64696e672e6c696d69740000000000000000000081525060160182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310612a6d5780518252601f199092019160209182019101612a4e565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547fe2a4853a00000000000000000000000000000000000000000000000000000000845260048401829052602484018b90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b158015612b0157600080fd5b505af1158015612b15573d6000803e3d6000fd5b505050506040513d6020811015612b2b57600080fd5b50511515612be3576040805160e560020a62461bcd02815260206004820152606860248201526000805160206143f483398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b506001949350505050565b6000808360405160200180807f6c696d69742e7370656e64696e672e706572696f64000000000000000000000081525060150182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310612a6d5780518252601f199092019160209182019101612a4e565b6000610bbc612c8e8484613ea9565b612c988585613119565b9063ffffffff613f4b16565b60008083612cb28685613cb4565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b60208310612d0c5780518252601f199092019160209182019101612ced565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310612d8e5780518252601f199092019160209182019101612d6f565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b158015611bd757600080fd5b6000808360405160200180807f66782e7573642e72617465000000000000000000000000000000000000000000815250600b0182805190602001908083835b60208310612e635780518252601f199092019160209182019101612e44565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310612ec65780518252601f199092019160209182019101612ea7565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547fe2a4853a00000000000000000000000000000000000000000000000000000000845260048401829052602484018b90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b158015612f5a57600080fd5b505af1158015612f6e573d6000803e3d6000fd5b505050506040513d6020811015612f8457600080fd5b50511515612be3576040805160e560020a62461bcd02815260206004820152603060248201527f4572726f723a20556e61626c6520746f20757064617465206163636f756e742060448201527f7370656e64696e6720706572696f642e00000000000000000000000000000000606482015290519081900360840190fd5b600061300e8383613fd0565b151561308a576040805160e560020a62461bcd02815260206004820152602a60248201527f4572726f723a204163636f756e7420646f6573206e6f742068617665204b594360448201527f20617070726f76616c2e00000000000000000000000000000000000000000000606482015290519081900360840190fd5b61309483836140f8565b1515613110576040805160e560020a62461bcd02815260206004820152602481018290527f4572726f723a204163636f756e7420737461747573206973206066616c73656060448201527f2e204163636f756e7420737461747573206d757374206265206074727565602e606482015290519081900360840190fd5b50600192915050565b6000808260405160200180807f6163636f756e742e7370656e64696e672e6c696d69740000000000000000000081525060160182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106131ab5780518252601f19909201916020918201910161318c565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b15801561322257600080fd5b505af1158015613236573d6000803e3d6000fd5b505050506040513d602081101561324c57600080fd5b505191505b5092915050565b600080600080876132698a89613cb4565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b602083106132c35780518252601f1990920191602091820191016132a4565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106133455780518252601f199092019160209182019101613326565b51815160001960209485036101000a019081169019919091161790526040519390910183900383207f746f6b656e2e69737375656400000000000000000000000000000000000000008483019081528e519199508e96508b955093602c019250908501908083835b602083106133cc5780518252601f1990920191602091820191016133ad565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106134145780518252601f1990920191602091820191016133f5565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b602083106134785780518252601f199092019160209182019101613459565b51815160209384036101000a60001901801990921691161790526040519190930181900381207f746f6b656e2e737570706c7900000000000000000000000000000000000000008285019081528e519198508e96509450602c90910192850191508083835b602083106134fc5780518252601f1990920191602091820191016134dd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b6020831061355f5780518252601f199092019160209182019101613540565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208f5460e060020a63bd02d0f5028452600484018b90529451909750600160a060020a03909416955063e2a4853a9450889361361a93508c92879263bd02d0f5926024808401938290030181600087803b1580156135e257600080fd5b505af11580156135f6573d6000803e3d6000fd5b505050506040513d602081101561360c57600080fd5b50519063ffffffff613f4b16565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b15801561366257600080fd5b505af1158015613676573d6000803e3d6000fd5b505050506040513d602081101561368c57600080fd5b5051151561370e576040805160e560020a62461bcd02815260206004820152606960248201526000805160206143f483398151915260448201526000805160206143d483398151915260648201526000805160206143b4833981519152608482015260008051602061441483398151915260a482015290519081900360c40190fd5b88546040805160e060020a63bd02d0f5028152600481018590529051600160a060020a039092169163e2a4853a91859161376d918b91869163bd02d0f59160248083019260209291908290030181600087803b1580156135e257600080fd5b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b1580156137b557600080fd5b505af11580156137c9573d6000803e3d6000fd5b505050506040513d60208110156137df57600080fd5b50511515613861576040805160e560020a62461bcd02815260206004820152606960248201526000805160206143f483398151915260448201526000805160206143d483398151915260648201526000805160206143b4833981519152608482015260008051602061441483398151915260a482015290519081900360c40190fd5b88546040805160e060020a63bd02d0f5028152600481018490529051600160a060020a039092169163e2a4853a9184916138c0918b91869163bd02d0f59160248083019260209291908290030181600087803b1580156135e257600080fd5b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b15801561390857600080fd5b505af115801561391c573d6000803e3d6000fd5b505050506040513d602081101561393257600080fd5b505115156139b4576040805160e560020a62461bcd02815260206004820152606960248201526000805160206143f483398151915260448201526000805160206143d483398151915260648201526000805160206143b4833981519152608482015260008051602061441483398151915260a482015290519081900360c40190fd5b86600160a060020a03167fbe0071d3ab0eb6dc7f33a38ba50120d775cd62fa123f3b59c193caf48e44bb4c898888604051808060200184815260200180602001838103835286818151815260200191508051906020019080838360008381101561292f578181015183820152602001612917565b6000808260405160200180807f746f6b656e2e737570706c790000000000000000000000000000000000000000815250600c0182805190602001908083835b60208310613a865780518252601f199092019160209182019101613a67565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052604051808280519060200190808383602083106131ab5780518252601f19909201916020918201910161318c565b6000808260405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310613b7a5780518252601f199092019160209182019101613b5b565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547fca446dd900000000000000000000000000000000000000000000000000000000845260048401829052600160a060020a038c81166024860152955191985094909416955063ca446dd9945060448083019491935090918290030181600087803b158015612b0157600080fd5b600080600080613c55876040805190810160405280600481526020017f5553447800000000000000000000000000000000000000000000000000000000815250614192565b9250613c618787614192565b9150613ca982600a0a613c9185600a0a613c9d612710613c91613c848e8e6141ef565b8c9063ffffffff61424c16565b9063ffffffff6142eb16565b9063ffffffff61424c16565b979650505050505050565b60008060008360405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310613d485780518252601f199092019160209182019101613d29565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015613dd557600080fd5b505af1158015613de9573d6000803e3d6000fd5b505050506040513d6020811015613dff57600080fd5b50519050600160a060020a03811615613e1a57809250613e1e565b8392505b505092915050565b600082820183811015610bbc576040805160e560020a62461bcd02815260206004820152602160248201527f4572726f723a20556e73616665206164646974696f6e206f7065726174696f6e60448201527f2100000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008082613eb78585614302565b60405160200180807f6163636f756e742e7370656e64696e672e616d6f756e7400000000000000000081525060170183600160a060020a0316600160a060020a0316606060020a02815260140182815260200192505050604051602081830303815290604052604051808280519060200190808383602083106131ab5780518252601f19909201916020918201910161318c565b600082821115613fca576040805160e560020a62461bcd028152602060048201526024808201527f4572726f723a20556e73616665207375627472616374696f6e206f706572617460448201527f696f6e2100000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50900390565b600080613fdd8484613cb4565b60405160200180807f6163636f756e742e6b7963000000000000000000000000000000000000000000815250600b0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b6020831061406b5780518252601f19909201916020918201910161404c565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547f7ae1cfca000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a039094169550637ae1cfca945060248083019491935090918290030181600087803b15801561322257600080fd5b6000806141058484613cb4565b60405160200180807f6163636f756e742e616c6c6f7765640000000000000000000000000000000000815250600f0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083836020831061406b5780518252601f19909201916020918201910161404c565b6000808260405160200180807f746f6b656e2e646563696d616c73000000000000000000000000000000000000815250600e01828051906020019080838360208310613a865780518252601f199092019160209182019101613a67565b6000808260405160200180807f66782e7573642e72617465000000000000000000000000000000000000000000815250600b01828051906020019080838360208310613a865780518252601f199092019160209182019101613a67565b60008083151561425f5760009150613251565b5082820282848281151561426f57fe5b0414610bbc576040805160e560020a62461bcd02815260206004820152602760248201527f4572726f723a20556e73616665206d756c7469706c69636174696f6e206f706560448201527f726174696f6e2100000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008082848115156142f957fe5b04949350505050565b6000808260405160200180807f6c696d69742e7370656e64696e672e706572696f64000000000000000000000081525060150182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106131ab5780518252601f19909201916020918201910161318c56004572726f723a206973737565724669726d20616e642f6f72206669726d2061756c6c6f776564207065726d697373696f6e7320776974682073746f726167652075652e20506c6561736520656e7375726520636f6e74726163742068617320614572726f723a20556e61626c6520746f207365742073746f726167652076616c636f6e74726163742e000000000000000000000000000000000000000000000074686f7269747920617265206e6f7420726567697374657265640000000000004572726f723a20556e61626c6520746f2077697468647261772066756e64732e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f7269747920617265207265676973746572656420616e642068617665206973737565642066756e647320746861742063616e2062652077697468647261776ea165627a7a72305820a0eb788fffd99d155740f884f5f313458d7a83f1900c5ff2906357db56c5fd780029", + "sourceMap": "889:11777:4:-;;;1242:430;8:9:-1;5:2;;;30:1;27;20:12;5:2;1242:430:4;;;;;;;;;;;;;;;;1117:10:1;1111:5;:17;;;1242:430:4;1111:17:1;;;;;;:24;;1131:4;-1:-1:-1;;1111:24:1;;;;;;;1536:46:4;;-1:-1:-1;;;;;;1536:46:4;-1:-1:-1;;;;;1536:46:4;;;;;;;;;1641:24;;;;;;;;889:11777;;;;;;;;", + "deployedSourceMap": "889:11777:4:-;;;;;;;;;-1:-1:-1;;;889:11777:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5142:1383;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5142:1383:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5142:1383:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5142:1383:4;;;;;;;;;;;;;;;;-1:-1:-1;5142:1383:4;-1:-1:-1;5142:1383:4;;;;;-1:-1:-1;5142:1383:4;;-1:-1:-1;5142:1383:4;;;;;;;;;;;;;;-1:-1:-1;5142:1383:4;;-1:-1:-1;5142:1383:4;;-1:-1:-1;;;;;;;5142:1383:4;;;;;;;;;;;;;;;;;;;7521:161;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7521:161:4;-1:-1:-1;;;;;7521:161:4;;;;;;;;;;;;;;;;;;;;;1913:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1913:154:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1913:154:4;;-1:-1:-1;;;1913:154:4;;-1:-1:-1;;;;;1913:154:4;;-1:-1:-1;1913:154:4;;-1:-1:-1;;;1913:154:4;8569:334;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8569:334:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8569:334:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8569:334:4;;-1:-1:-1;8569:334:4;;;;-1:-1:-1;8569:334:4;-1:-1:-1;8569:334:4;;;;;;;;;;-1:-1:-1;8569:334:4;;-1:-1:-1;8569:334:4;;-1:-1:-1;;;;;;;8569:334:4;3516:1172;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3516:1172:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3516:1172:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3516:1172:4;;-1:-1:-1;3516:1172:4;;-1:-1:-1;;;;;;;3516:1172:4;2127:185:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2127:185:1;-1:-1:-1;;;;;2127:185:1;;;;;10557:571:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10557:571:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10557:571:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10557:571:4;;;;;;;;;;;-1:-1:-1;10557:571:4;;;;;-1:-1:-1;10557:571:4;;-1:-1:-1;10557:571:4;;;;-1:-1:-1;10557:571:4;;;;;;;;;;-1:-1:-1;10557:571:4;;-1:-1:-1;10557:571:4;;-1:-1:-1;;;;;;;10557:571:4;7913:149;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7913:149:4;-1:-1:-1;;;;;7913:149:4;;;;;2571:188:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2571:188:1;-1:-1:-1;;;;;2571:188:1;;;;;725:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;725:37:1;-1:-1:-1;;;;;725:37:1;;;;;11528:614:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11528:614:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11528:614:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11528:614:4;;;;;;;;;;;-1:-1:-1;11528:614:4;;;;;-1:-1:-1;11528:614:4;;-1:-1:-1;11528:614:4;;;;-1:-1:-1;11528:614:4;;;;;;;;;;-1:-1:-1;11528:614:4;;-1:-1:-1;11528:614:4;;-1:-1:-1;;;;;;;11528:614:4;6891:377;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6891:377:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6891:377:4;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6891:377:4;;-1:-1:-1;6891:377:4;;-1:-1:-1;;;;;;;6891:377:4;2253:125;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2253:125:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2253:125:4;;-1:-1:-1;2253:125:4;;-1:-1:-1;;;;;;;2253:125:4;2728:450;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2728:450:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2728:450:4;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2728:450:4;;-1:-1:-1;2728:450:4;;-1:-1:-1;;;;;;;2728:450:4;9685:503;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9685:503:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9685:503:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9685:503:4;;-1:-1:-1;9685:503:4;;-1:-1:-1;;;;;;;9685:503:4;9211:153;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9211:153:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9211:153:4;;-1:-1:-1;;9211:153:4;;;-1:-1:-1;9211:153:4;;-1:-1:-1;;;;9211:153:4;1589:291:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1589:291:1;-1:-1:-1;;;;;1589:291:1;;;;;5142:1383:4;5304:12;5271:10;5283;12520:43;:3;5271:10;5283;12520:43;:22;:43;:::i;:::-;12501:144;;;;;;;-1:-1:-1;;;;;12501:144:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12501:144:4;;;;-1:-1:-1;;;;;;;;;;;12501:144:4;;;;;;;;;;;;;;;5438:45;5466:4;5457:7;5466:4;5472:10;5438:45;:18;:45;:::i;:::-;5419:179;;;;;;;-1:-1:-1;;;;;5419:179:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5718:47;5748:4;5739:7;5748:4;5754:10;5718:47;:20;:47;:::i;:::-;5699:184;;;;;;;-1:-1:-1;;;;;5699:184:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5912:50;:3;5924:8;5934:7;5943:6;5951:10;5912:50;:11;:50;:::i;:::-;5893:182;;;;;;;-1:-1:-1;;;;;5893:182:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6104:43;:3;6132:7;6141:5;6104:43;:27;:43;:::i;:::-;6085:200;;;;;;;-1:-1:-1;;;;;6085:200:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6314:52;:3;6343:7;6359:5;6353:3;:11;6314:52;:28;:52;:::i;:::-;6295:202;;;;;;;-1:-1:-1;;;;;6295:202:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6514:4:4;;5142:1383;-1:-1:-1;;;;;;;5142:1383:4:o;7521:161::-;7596:22;7635:40;:3;7667:7;7635:40;:31;:40;:::i;:::-;7628:47;7521:161;-1:-1:-1;;7521:161:4:o;1913:154::-;1993:12;2022:38;:3;2042:8;2052:7;2022:38;:19;:38;:::i;:::-;2015:45;1913:154;-1:-1:-1;;;1913:154:4:o;8569:334::-;8695:12;8662:10;8674;12520:43;:3;8662:10;8674;12520:43;:22;:43;:::i;:::-;12501:144;;;;;;;-1:-1:-1;;;;;12501:144:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12501:144:4;;;;-1:-1:-1;;;;;;;;;;;12501:144:4;;;;;;;;;;;;;;;8734:38;:3;8754:8;8764:7;8734:38;:19;:38;:::i;:::-;8717:160;;;;;;;-1:-1:-1;;;;;8717:160:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8892:4:4;;8569:334;-1:-1:-1;;;;;8569:334:4:o;3516:1172::-;3655:12;3622:10;3634;12520:43;:3;3622:10;3634;12520:43;:22;:43;:::i;:::-;12501:144;;;;;;;-1:-1:-1;;;;;12501:144:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12501:144:4;;;;-1:-1:-1;;;;;;;;;;;12501:144:4;;;;;;;;;;;;;;;3787:51;:3;3806:7;3815:10;3827;3787:51;:18;:51;:::i;:::-;3768:185;;;;;;;-1:-1:-1;;;;;3768:185:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4067:53;:3;4088:7;4097:10;4109;4067:53;:20;:53;:::i;:::-;4048:190;;;;;;;-1:-1:-1;;;;;4048:190:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4267:43;:3;4295:7;4304:5;4267:43;:27;:43;:::i;:::-;4248:200;;;;;;;-1:-1:-1;;;;;4248:200:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4477:52;:3;4506:7;4522:5;4516:3;:11;4477:52;:28;:52;:::i;:::-;4458:202;;;;;;;-1:-1:-1;;;;;4458:202:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4677:4:4;;3516:1172;-1:-1:-1;;;;;;3516:1172:4:o;2127:185:1:-;1261:10;2201:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2221:21:1;;:5;:21;;;;;;;;;;;:28;;-1:-1:-1;;2221:28:1;2245:4;2221:28;;;2260:30;;;2221:5;2260:30;-1:-1:-1;2303:4:1;2127:185;;;:::o;10557:571:4:-;10694:12;10661:10;10673;12520:43;:3;10661:10;10673;12520:43;:22;:43;:::i;:::-;12501:144;;;;;;;-1:-1:-1;;;;;12501:144:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12501:144:4;;;;-1:-1:-1;;;;;;;;;;;12501:144:4;;;;;;;;;;;;;;;10737:26;:3;10755:7;10737:26;:17;:26;:::i;:::-;10718:100;;;;;;;-1:-1:-1;;;;;10718:100:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;10937:50;:3;10949:8;10959:7;10968:6;10976:10;10937:50;:11;:50;:::i;:::-;10918:182;;;;;;;-1:-1:-1;;;;;10918:182:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7913:149;7984:18;8019:36;:3;8047:7;8019:36;:27;:36;:::i;2571:188:1:-;1261:10;2646:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2666:21:1;;2690:5;2666:21;;;;;;;;;;;:29;;-1:-1:-1;;2666:29:1;;;2706:31;;;2690:5;2706:31;-1:-1:-1;2750:4:1;2571:188;;;:::o;725:37::-;;;;;;;;;;;;;;;;:::o;11528:614:4:-;11666:12;11633:10;11645;12520:43;:3;11633:10;11645;12520:43;:22;:43;:::i;:::-;12501:144;;;;;;;-1:-1:-1;;;;;12501:144:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12501:144:4;;;;-1:-1:-1;;;;;;;;;;;12501:144:4;;;;;;;;;;;;;;;11709:26;:3;11727:7;11709:26;:17;:26;:::i;:::-;11690:100;;;;;;;-1:-1:-1;;;;;11690:100:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;11905:51;:3;11918:8;11928:7;11937:6;11945:10;11905:51;:12;:51;:::i;:::-;11886:228;;;;;;-1:-1:-1;;;;;11886:228:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6891:377;7026:12;6993:10;7005;12520:43;:3;6993:10;7005;12520:43;:22;:43;:::i;:::-;12501:144;;;;;;;-1:-1:-1;;;;;12501:144:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12501:144:4;;;;-1:-1:-1;;;;;;;;;;;12501:144:4;;;;;;;;;;;;;;;7065:43;:3;7093:7;7102:5;7065:43;:27;:43;:::i;:::-;7048:194;;;;;;;-1:-1:-1;;;;;7048:194:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2253:125;2315:11;2343:28;:3;2362:8;2343:28;:18;:28;:::i;2728:450::-;2857:12;2824:10;2836;12520:43;:3;2824:10;2836;12520:43;:22;:43;:::i;:::-;12501:144;;;;;;;-1:-1:-1;;;;;12501:144:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12501:144:4;;;;-1:-1:-1;;;;;;;;;;;12501:144:4;;;;;;;;;;;;;;;2984:52;:3;3005:7;3014:9;3025:10;2984:52;:20;:52;:::i;:::-;2965:185;;;;;;;-1:-1:-1;;;;;2965:185:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9685:503;9840:12;9807:10;9819;12520:43;:3;9807:10;9819;12520:43;:22;:43;:::i;:::-;12501:144;;;;;;;-1:-1:-1;;;;;12501:144:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12501:144:4;;;;-1:-1:-1;;;;;;;;;;;12501:144:4;;;;;;;;;;;;;;;9971:56;:3;9995:15;10012:14;9971:56;:23;:56;:::i;:::-;9952:208;;;;;;;-1:-1:-1;;;;;9952:208:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9211:153;9288:14;9319:38;:3;9338:8;9348;9319:38;:18;:38;:::i;1589:291:1:-;1261:10;1660:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1688:22:1;;;;1680:66;;;;;-1:-1:-1;;;;;1680:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1757:42;;-1:-1:-1;;;;;1757:42:1;;;1778:10;;1757:42;;;;;-1:-1:-1;;;;;;1805:15:1;:5;:15;;;;;;;;;;;:22;;1823:4;-1:-1:-1;;1805:22:1;;;;;;;;1839:10;1833:17;;;;;;:25;;;;;;;1823:4;1589:291::o;49571:301:8:-;49686:15;49709:10;49773;49785:43;49805:4;49811:16;49785:19;:43::i;:::-;49732:97;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;49732:97:8;;;;;;;-1:-1:-1;;;;;49732:97:8;-1:-1:-1;;;;;49732:97:8;-1:-1:-1;;;49732:97:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;49732:97:8;;;49722:108;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;49722:108:8;;;;;;;;;;;;49843:12;;:24;;;;;;;;;;;49722:108;;-1:-1:-1;;;;;;49843:12:8;;;;-1:-1:-1;49843:20:8;;-1:-1:-1;49843:24:8;;;;;263:2:-1;;-1:-1;49843:24:8;;;;;;;-1:-1:-1;49843:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;49843:24:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;49843:24:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49843:24:8;;49571:301;-1:-1:-1;;;;;49571:301:8:o;12987:563::-;13101:12;13123:10;13178:34;13198:4;13204:7;13178:19;:34::i;:::-;13146:67;;;;;;;;;;;;;-1:-1:-1;;;;;13146:67:8;-1:-1:-1;;;;;13146:67:8;-1:-1:-1;;;13146:67:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;13146:67:8;;;13136:78;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;13136:78:8;;;;;;;;;;;;13239:12;;:36;;;;;;;;;;;;;;;;;;13136:78;;-1:-1:-1;;;;;;13239:12:8;;;;-1:-1:-1;13239:20:8;;-1:-1:-1;13239:36:8;;;;;263:2:-1;;-1:-1;13239:36:8;;;;;;;-1:-1:-1;13239:12:8;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;13239:36:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13239:36:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13239:36:8;13222:177;;;;;;;-1:-1:-1;;;;;13222:177:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13222:177:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13494:7;-1:-1:-1;;;;;13482:44:8;;13503:10;13515;13482:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;13482:44:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13541:4:8;;12987:563;-1:-1:-1;;;;;12987:563:8:o;14216:548::-;14331:12;14351:10;14410:34;14430:4;14436:7;14410:19;:34::i;:::-;14374:71;;;;;;;;;;;;;-1:-1:-1;;;;;14374:71:8;-1:-1:-1;;;;;14374:71:8;-1:-1:-1;;;14374:71:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14374:71:8;;;14364:82;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;14364:82:8;;;;;;;;;;;;14467:12;;:35;;;;;;;;;;;;;;;;;;14364:82;;-1:-1:-1;;;;;;14467:12:8;;;;-1:-1:-1;14467:20:8;;-1:-1:-1;14467:35:8;;;;;263:2:-1;;-1:-1;14467:35:8;;;;;;;-1:-1:-1;14467:12:8;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;14467:35:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14467:35:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14467:35:8;14452:170;;;;;;;-1:-1:-1;;;;;14452:170:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14452:170:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14711:7;-1:-1:-1;;;;;14697:45:8;;14720:9;14731:10;14697:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;42572:1077:8;42692:12;42712;42823;42909;42771:8;42781:34;42801:4;42807:7;42781:19;:34::i;:::-;42737:79;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;42737:79:8;;;;;;;-1:-1:-1;;;;;42737:79:8;-1:-1:-1;;;;;42737:79:8;-1:-1:-1;;;42737:79:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;42737:79:8;;;42727:90;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;-1:-1;;263:2;259:12;;;254:3;250:22;246:30;340:21;;;311:9;;295:26;;;;377:20;365:33;;42727:90:8;;;;;;;;;;;42848:54;;;;;;;;;42727:90;;-1:-1:-1;42881:8:8;;-1:-1:-1;42891:10:8;;-1:-1:-1;42848:54:8;;;;-1:-1:-1;42848:54:8;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;42848:54:8;;;;;;;;;;-1:-1:-1;42848:54:8;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;42848:54:8;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;42848:54:8;;;42838:65;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;42838:65:8;;;;;;;;;;;42934:42;;;;;;;;;42838:65;;-1:-1:-1;42934:42:8;;-1:-1:-1;42934:42:8;-1:-1:-1;42934:42:8;;;;;;;;-1:-1:-1;42934:42:8;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;42934:42:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;42934:42:8;;;42924:53;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;42924:53:8;;;;;;;;;;;;42993:12;;-1:-1:-1;;;;;43020:26:8;;;;;;;;;;42924:53;;-1:-1:-1;;;;;;42993:12:8;;;;-1:-1:-1;42993:20:8;;-1:-1:-1;43020:26:8;;:38;;-1:-1:-1;43051:6:8;;42993:12;;43020:20;;:26;;;;;;;;;;-1:-1:-1;42993:12:8;43020:26;;;5:2:-1;;;;30:1;27;20:12;5:2;43020:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;43020:26:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;43020:26:8;;:38;:30;:38;:::i;:::-;42993:66;;;;;-1:-1:-1;;;42993:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42993:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;42993:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;42993:66:8;42985:190;;;;;;;-1:-1:-1;;;;;42985:190:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;42985:190:8;;;;-1:-1:-1;;;;;;;;;;;42985:190:8;;;;-1:-1:-1;;;;;;;;;;;42985:190:8;;;;-1:-1:-1;;;;;;;;;;;42985:190:8;;;;;;;;;;;;;;;43189:12;;43216:26;;;-1:-1:-1;;;;;43216:26:8;;;;;;;;;;-1:-1:-1;;;;;43189:12:8;;;;:20;;43210:4;;43216:38;;43247:6;;43189:12;;43216:20;;:26;;;;;;;;;;;;;;43189:12;;43216:26;;;5:2:-1;;;;30:1;27;20:12;43216:38:8;43189:66;;;;;-1:-1:-1;;;43189:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;43189:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;43189:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;43189:66:8;43181:190;;;;;;;-1:-1:-1;;;;;43181:190:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;43181:190:8;;;;-1:-1:-1;;;;;;;;;;;43181:190:8;;;;-1:-1:-1;;;;;;;;;;;43181:190:8;;;;-1:-1:-1;;;;;;;;;;;43181:190:8;;;;;;;;;;;;;;;43385:12;;43412:26;;;-1:-1:-1;;;;;43412:26:8;;;;;;;;;;-1:-1:-1;;;;;43385:12:8;;;;:20;;43406:4;;43412:38;;43443:6;;43385:12;;43412:20;;:26;;;;;;;;;;;;;;43385:12;;43412:26;;;5:2:-1;;;;30:1;27;20:12;43412:38:8;43385:66;;;;;-1:-1:-1;;;43385:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;43385:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;43385:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;43385:66:8;43377:190;;;;;;;-1:-1:-1;;;;;43377:190:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;43377:190:8;;;;-1:-1:-1;;;;;;;;;;;43377:190:8;;;;-1:-1:-1;;;;;;;;;;;43377:190:8;;;;-1:-1:-1;;;;;;;;;;;43377:190:8;;;;;;;;;;;;;;;43597:7;-1:-1:-1;;;;;43579:46:8;;43587:8;43606:6;43614:10;43579:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;43579:46:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43579:46:8;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;43579:46:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43639:4:8;;42572:1077;-1:-1:-1;;;;;;;;42572:1077:8:o;58087:377::-;58186:12;58206:10;58272:7;58229:51;;;;;;;;;;;;;-1:-1:-1;;;;;58229:51:8;-1:-1:-1;;;;;58229:51:8;-1:-1:-1;;;58229:51:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;58229:51:8;;;58219:62;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;58219:62:8;;;;;;;;;;;;58295:12;;:31;;;;;;;;;;;;;;;;;58219:62;;-1:-1:-1;;;;;;58295:12:8;;;;-1:-1:-1;58295:20:8;;-1:-1:-1;58295:31:8;;;;;263:2:-1;;-1:-1;58295:31:8;;;;;;;-1:-1:-1;58295:12:8;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;58295:31:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;58295:31:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;58295:31:8;58287:154;;;;;;;-1:-1:-1;;;;;58287:154:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;58287:154:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;58455:4:8;;58087:377;-1:-1:-1;;;;58087:377:8:o;56628:379::-;56729:12;56749:10;56814:7;56772:50;;;;;;;;;;;;;-1:-1:-1;;;;;56772:50:8;-1:-1:-1;;;;;56772:50:8;-1:-1:-1;;;56772:50:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;56772:50:8;;;56762:61;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;62552:218:8;62648:19;62682:83;62725:39;62750:4;62756:7;62725:24;:39::i;:::-;62682:38;62706:4;62712:7;62682:23;:38::i;:::-;:42;:83;:42;:83;:::i;28791:266::-;28892:12;28912:10;28969:8;28979:34;28999:4;29005:7;28979:19;:34::i;:::-;28935:79;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;28935:79:8;;;;;;;-1:-1:-1;;;;;28935:79:8;-1:-1:-1;;;;;28935:79:8;-1:-1:-1;;;28935:79:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;28935:79:8;;;28925:90;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;28925:90:8;;;;;;;;;;;;29028:12;;-1:-1:-1;;;;;29028:24:8;;;;;;;;;;28925:90;;-1:-1:-1;;;;;;29028:12:8;;;;-1:-1:-1;29028:20:8;;-1:-1:-1;29028:24:8;;;;;263:2:-1;;-1:-1;29028:24:8;;;;;;;-1:-1:-1;29028:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;63256:314:8;63349:12;63369:10;63424:8;63392:41;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;63392:41:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;63392:41:8;;;63382:52;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;63382:52:8;;;;;;;;;;;;63455:12;;:33;;;;;;;;;;;;;;;;;63382:52;;-1:-1:-1;;;;;;63455:12:8;;;;-1:-1:-1;63455:20:8;;-1:-1:-1;63455:33:8;;;;;263:2:-1;;-1:-1;63455:33:8;;;;;;;-1:-1:-1;63455:12:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;63455:33:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;63455:33:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;63455:33:8;63440:107;;;;;;;-1:-1:-1;;;;;63440:107:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33117:359;33199:13;33235:29;33250:4;33256:7;33235:14;:29::i;:::-;33220:102;;;;;;;-1:-1:-1;;;;;33220:102:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33343:31;33360:4;33366:7;33343:16;:31::i;:::-;33328:126;;;;;;;-1:-1:-1;;;;;33328:126:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33467:4:8;33117:359;;;;:::o;58785:227::-;58877:10;58895;58961:7;58918:51;;;;;;;;;;;;;-1:-1:-1;;;;;58918:51:8;-1:-1:-1;;;;;58918:51:8;-1:-1:-1;;;58918:51:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;58918:51:8;;;58908:62;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;58908:62:8;;;;;;;;;;;;58983:12;;-1:-1:-1;;;;;58983:24:8;;;;;;;;;;58908:62;;-1:-1:-1;;;;;;58983:12:8;;;;-1:-1:-1;58983:20:8;;-1:-1:-1;58983:24:8;;;;;263:2:-1;;-1:-1;58983:24:8;;;;;;;-1:-1:-1;58983:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;58983:24:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;58983:24:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;58983:24:8;;-1:-1:-1;58785:227:8;;;;;;:::o;44345:1137::-;44466:12;44486;44597;44721;44545:8;44555:34;44575:4;44581:7;44555:19;:34::i;:::-;44511:79;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;44511:79:8;;;;;;;-1:-1:-1;;;;;44511:79:8;-1:-1:-1;;;;;44511:79:8;-1:-1:-1;;;44511:79:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;44511:79:8;;;44501:90;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;-1:-1;;263:2;259:12;;;254:3;250:22;246:30;340:21;;;311:9;;295:26;;;;377:20;365:33;;44501:90:8;;;;;;;;;;;44622:54;;;;;;;;;44501:90;;-1:-1:-1;44655:8:8;;-1:-1:-1;44665:10:8;;-1:-1:-1;44622:54:8;;;;-1:-1:-1;44622:54:8;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;44622:54:8;;;;;;;;;;-1:-1:-1;44622:54:8;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;44622:54:8;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;44622:54:8;;;44612:65;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;44612:65:8;;;;;;;;;;;44746:42;;;;;;;;;44612:65;;-1:-1:-1;44746:42:8;;-1:-1:-1;44746:42:8;-1:-1:-1;44746:42:8;;;;;;;;-1:-1:-1;44746:42:8;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;44746:42:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;44746:42:8;;;44736:53;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;44736:53:8;;;;;;;;;;;;44811:12;;-1:-1:-1;;;;;44838:26:8;;;;;;;;;;44736:53;;-1:-1:-1;;;;;;44811:12:8;;;;-1:-1:-1;44811:20:8;;-1:-1:-1;44838:26:8;;:38;;-1:-1:-1;44869:6:8;;44811:12;;44838:20;;:26;;;;;;;;;;-1:-1:-1;44811:12:8;44838:26;;;5:2:-1;;;;30:1;27;20:12;5:2;44838:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44838:26:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;44838:26:8;;:38;:30;:38;:::i;:::-;44811:66;;;;;-1:-1:-1;;;44811:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44811:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44811:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;44811:66:8;44796:197;;;;;;;-1:-1:-1;;;;;44796:197:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;44796:197:8;;;;-1:-1:-1;;;;;;;;;;;44796:197:8;;;;-1:-1:-1;;;;;;;;;;;44796:197:8;;;;-1:-1:-1;;;;;;;;;;;44796:197:8;;;;;;;;;;;;;;;45014:12;;45041:26;;;-1:-1:-1;;;;;45041:26:8;;;;;;;;;;-1:-1:-1;;;;;45014:12:8;;;;:20;;45035:4;;45041:38;;45072:6;;45014:12;;45041:20;;:26;;;;;;;;;;;;;;45014:12;;45041:26;;;5:2:-1;;;;30:1;27;20:12;45041:38:8;45014:66;;;;;-1:-1:-1;;;45014:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45014:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45014:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;45014:66:8;44999:197;;;;;;;-1:-1:-1;;;;;44999:197:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;44999:197:8;;;;-1:-1:-1;;;;;;;;;;;44999:197:8;;;;-1:-1:-1;;;;;;;;;;;44999:197:8;;;;-1:-1:-1;;;;;;;;;;;44999:197:8;;;;;;;;;;;;;;;45217:12;;45244:26;;;-1:-1:-1;;;;;45244:26:8;;;;;;;;;;-1:-1:-1;;;;;45217:12:8;;;;:20;;45238:4;;45244:38;;45275:6;;45217:12;;45244:20;;:26;;;;;;;;;;;;;;45217:12;;45244:26;;;5:2:-1;;;;30:1;27;20:12;45244:38:8;45217:66;;;;;-1:-1:-1;;;45217:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45217:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45217:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;45217:66:8;45202:197;;;;;;;-1:-1:-1;;;;;45202:197:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;45202:197:8;;;;-1:-1:-1;;;;;;;;;;;45202:197:8;;;;-1:-1:-1;;;;;;;;;;;45202:197:8;;;;-1:-1:-1;;;;;;;;;;;45202:197:8;;;;;;;;;;;;;;;45430:7;-1:-1:-1;;;;;45411:47:8;;45420:8;45439:6;45447:10;45411:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;27457:210:8;27540:11;27559:10;27615:8;27582:42;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;27582:42:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;27582:42:8;;;27572:53;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;15518:420:8;15635:12;15655:10;15713:16;15678:52;;;;;;;;;;;;;-1:-1:-1;;;;;15678:52:8;-1:-1:-1;;;;;15678:52:8;-1:-1:-1;;;15678:52:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15678:52:8;;;15668:63;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;15668:63:8;;;;;;;;;;;;15752:12;;:44;;;;;;;;;-1:-1:-1;;;;;15752:44:8;;;;;;;;;15668:63;;-1:-1:-1;15752:12:8;;;;;-1:-1:-1;15752:23:8;;-1:-1:-1;15752:44:8;;;;;263:2:-1;;-1:-1;15752:44:8;;;;;;;-1:-1:-1;15752:12:8;:44;;;5:2:-1;;;;30:1;27;20:12;64447:441:8;64545:11;64564:16;64619:15;64743:14;64583:30;64600:4;64583:30;;;;;;;;;;;;;;;;;;:16;:30::i;:::-;64564:49;;64637:32;64654:4;64660:8;64637:16;:32::i;:::-;64619:50;;64760:101;64850:10;64846:2;:14;64761:79;64828:11;64824:2;:15;64762:56;64812:5;64762:45;64775:31;64791:4;64797:8;64775:15;:31::i;:::-;64762:8;;:45;:12;:45;:::i;:::-;:49;:56;:49;:56;:::i;:::-;64761:62;:79;:62;:79;:::i;64760:101::-;64743:118;64447:441;-1:-1:-1;;;;;;;64447:441:8:o;16402:357::-;16490:25;16523:10;16596:23;16581:7;16546:43;;;;;;;;;;;;;-1:-1:-1;;;;;16546:43:8;-1:-1:-1;;;;;16546:43:8;-1:-1:-1;;;16546:43:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16546:43:8;;;16536:54;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;16536:54:8;;;;;;;;;;;;16622:12;;:27;;;;;;;;;;;16536:54;;-1:-1:-1;;;;;;16622:12:8;;;;-1:-1:-1;16622:23:8;;-1:-1:-1;16622:27:8;;;;;263:2:-1;;-1:-1;16622:27:8;;;;;;;-1:-1:-1;16622:12:8;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;16622:27:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16622:27:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16622:27:8;;-1:-1:-1;;;;;;16659:22:8;;;16655:100;;16698:15;16691:22;;;;16655:100;16741:7;16734:14;;16655:100;16402:357;;;;;;:::o;1540:174:2:-;1598:14;1632:5;;;1651:6;;;;1643:52;;;;;-1:-1:-1;;;;;1643:52:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61915:271:8;62008:11;62027:10;62094:7;62103:39;62128:4;62134:7;62103:24;:39::i;:::-;62050:93;;;;;;;;;;;;;-1:-1:-1;;;;;62050:93:8;-1:-1:-1;;;;;62050:93:8;-1:-1:-1;;;62050:93:8;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;62050:93:8;;;62040:104;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;1143:234:2;1201:14;1307:6;;;;1299:55;;;;;-1:-1:-1;;;;;1299:55:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1367:5:2;;;1143:234::o;17162:239:8:-;17245:11;17266:10;17321:34;17341:4;17347:7;17321:19;:34::i;:::-;17289:67;;;;;;;;;;;;;-1:-1:-1;;;;;17289:67:8;-1:-1:-1;;;;;17289:67:8;-1:-1:-1;;;17289:67:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;17289:67:8;;;17279:78;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;17279:78:8;;;;;;;;;;;;17372:12;;:24;;;;;;;;;;;17279:78;;-1:-1:-1;;;;;;17372:12:8;;;;-1:-1:-1;17372:20:8;;-1:-1:-1;17372:24:8;;;;;263:2:-1;;-1:-1;17372:24:8;;;;;;;-1:-1:-1;17372:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;17810:241:8;17895:11;17914:10;17973:34;17993:4;17999:7;17973:19;:34::i;:::-;17937:71;;;;;;;;;;;;;-1:-1:-1;;;;;17937:71:8;-1:-1:-1;;;;;17937:71:8;-1:-1:-1;;;17937:71:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;17937:71:8;;;17927:82;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;21585:221:8;21670:18;21696:10;21754:8;21719:44;;;;;;;;;;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;63878:211:8;63962:12;63982:10;64037:8;64005:41;;;;;;;;;;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;301:224:2;359:14;;385:6;;381:35;;;408:1;401:8;;;;381:35;-1:-1:-1;433:5:2;;;437:1;433;:5;452;;;;;;;;:10;444:62;;;;;-1:-1:-1;;;;;444:62:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;697:284;755:14;857:9;873:1;869;:5;;;;;;;;;697:284;-1:-1:-1;;;;697:284:2:o;57486:228:8:-;57579:11;57598:10;57663:7;57621:50;;;;;;;;;;;;;-1:-1:-1;;;;;57621:50:8;-1:-1:-1;;;;;57621:50:8;-1:-1:-1;;;57621:50:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;57621:50:8;;;57611:61;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;", + "source": "pragma solidity 0.4.24;\n\n\n/*\n\nCOPYRIGHT 2018 Token, Inc.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n*/\n\nimport \"./Ownable.sol\";\nimport \"./TokenIOStorage.sol\";\nimport \"./TokenIOLib.sol\";\n\n/*\n@title TokenIOCurrencyAuthority - Currency Authority Smart Contract for Token, Inc.\n\n@author Ryan Tate , Sean Pollock \n\n@notice Contract uses generalized storage contract, `TokenIOStorage`, for\nupgradeability of interface contract.\n*/\n\ncontract TokenIOCurrencyAuthority is Ownable {\n\n /// @dev Set reference to TokenIOLib interface which proxies to TokenIOStorage */\n using TokenIOLib for TokenIOLib.Data;\n TokenIOLib.Data lib;\n\n /**\n * @notice Constructor method for CurrencyAuthority contract\n * @param _storageContract Address of TokenIOStorage contract\n */\n constructor(address _storageContract) public {\n /**\n * @notice Set the storage contract for the interface\n * @dev This contract will be unable to use the storage constract until\n * @dev Contract address is authorized with the storage contract\n */\n lib.Storage = TokenIOStorage(_storageContract);\n\n // @dev set owner to contract initiator\n owner[msg.sender] = true;\n }\n\n /**\n * @notice Gets balance of sepcified account for a given currency\n * @param currency Currency symbol 'USDx'\n * @param account Sepcified account address\n * @return { \"balance\": \"Returns account balance\"}\n */\n function getTokenBalance(string currency, address account) public view returns (uint balance) {\n return lib.getTokenBalance(currency, account);\n }\n\n /**\n * @notice Gets total supply of specified currency\n * @param currency Currency symbol 'USDx'\n * @return { \"supply\": \"Returns total supply of currency\"}\n */\n function getTokenSupply(string currency) public view returns (uint supply) {\n return lib.getTokenSupply(currency);\n }\n\n /**\n * @notice Updates account status. false: frozen, true: un-frozen\n * @param account Sepcified account address\n * @param isAllowed Frozen status\n * @param issuerFirm Name of the issuer firm with authority on account holder;\n * @return { \"success\": \"Returns true if successfully called from another contract\"}\n */\n function freezeAccount(address account, bool isAllowed, string issuerFirm) public onlyAuthority(issuerFirm, msg.sender) returns (bool success) {\n // @notice updates account status\n // @dev !!! mutates storage state\n require(\n lib.setAccountStatus(account, isAllowed, issuerFirm),\n \"Error: Unable to freeze account. Please check issuerFirm and firm authority are registered\"\n );\n return true;\n }\n\n /**\n * @notice Sets approval status of specified account\n * @param account Sepcified account address\n * @param isApproved Frozen status\n * @param issuerFirm Name of the issuer firm with authority on account holder;\n * @return { \"success\": \"Returns true if successfully called from another contract\"}\n */\n function approveKYC(address account, bool isApproved, uint limit, string issuerFirm) public onlyAuthority(issuerFirm, msg.sender) returns (bool success) {\n // @notice updates kyc approval status\n // @dev !!! mutates storage state\n require(\n lib.setKYCApproval(account, isApproved, issuerFirm),\n \"Error: Unable to approve account. Please check issuerFirm and firm authority are registered\"\n );\n // @notice updates account statuss\n // @dev !!! mutates storage state\n require(\n lib.setAccountStatus(account, isApproved, issuerFirm),\n \"Error: Unable to set account status. Please check issuerFirm and firm authority are registered\"\n );\n require(\n lib.setAccountSpendingLimit(account, limit),\n \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"\n );\n require(\n lib.setAccountSpendingPeriod(account, (now + 86400)),\n \"Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered\"\n );\n return true;\n }\n\n /**\n * @notice Approves account and deposits specified amount of given currency\n * @param currency Currency symbol of amount to be deposited;\n * @param account Ethereum address of account holder;\n * @param amount Deposit amount for account holder;\n * @param issuerFirm Name of the issuer firm with authority on account holder;\n * @return { \"success\": \"Returns true if successfully called from another contract\"}\n */\n function approveKYCAndDeposit(string currency, address account, uint amount, uint limit, string issuerFirm) public onlyAuthority(issuerFirm, msg.sender) returns (bool success) {\n /// @notice updates kyc approval status\n /// @dev !!! mutates storage state\n require(\n lib.setKYCApproval(account, true, issuerFirm),\n \"Error: Unable to approve account. Please check issuerFirm and firm authority are registered\"\n );\n /// @notice updates kyc approval status\n /// @dev !!! mutates storage state\n require(\n lib.setAccountStatus(account, true, issuerFirm),\n \"Error: Unable to set account status. Please check issuerFirm and firm authority are registered\"\n );\n require(\n lib.deposit(currency, account, amount, issuerFirm),\n \"Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered\"\n );\n require(\n lib.setAccountSpendingLimit(account, limit),\n \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"\n );\n require(\n lib.setAccountSpendingPeriod(account, (now + 86400)),\n \"Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered\"\n );\n return true;\n }\n\n /**\n * @notice Sets the spending limit for a given account\n * @param account Ethereum address of account holder;\n * @param limit Spending limit amount for account;\n * @param issuerFirm Name of the issuer firm with authority on account holder;\n * @return { \"success\": \"Returns true if successfully called from another contract\"}\n */\n function setAccountSpendingLimit(address account, uint limit, string issuerFirm) public onlyAuthority(issuerFirm, msg.sender) returns (bool success) {\n require(\n lib.setAccountSpendingLimit(account, limit),\n \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"\n );\n return true;\n }\n\n /**\n * @notice Returns the periodic remaining spending amount for an account\n * @param account Ethereum address of account holder;\n * @return {\"spendingRemaining\" : \"Returns the remaining spending amount for the account\"}\n */\n function getAccountSpendingRemaining(address account) public view returns (uint spendingRemaining) {\n return lib.getAccountSpendingRemaining(account);\n }\n\n /**\n * @notice Return the spending limit for an account\n * @param account Ethereum address of account holder\n * @return {\"spendingLimit\" : \"Returns the remaining daily spending limit of the account\"}\n */\n function getAccountSpendingLimit(address account) public view returns (uint spendingLimit) {\n return lib.getAccountSpendingLimit(account);\n }\n\n /**\n * @notice Set the foreign currency exchange rate to USD in basis points\n * @dev NOTE: This value should always be relative to USD pair; e.g. JPY/USD, GBP/USD, etc.\n * @param currency The TokenIO currency symbol (e.g. USDx, JPYx, GBPx)\n * @param bpsRate Basis point rate of foreign currency exchange rate to USD\n * @param issuerFirm Firm setting the foreign currency exchange\n * @return { \"success\": \"Returns true if successfully called from another contract\"}\n */\n function setFxBpsRate(string currency, uint bpsRate, string issuerFirm) public onlyAuthority(issuerFirm, msg.sender) returns (bool success) {\n require(\n lib.setFxUSDBPSRate(currency, bpsRate),\n \"Error: Unable to set FX USD basis points rate. Please ensure issuerFirm is authorized\"\n );\n return true;\n }\n\n /**\n * @notice Return the foreign currency USD exchanged amount\n * @param currency The TokenIO currency symbol (e.g. USDx, JPYx, GBPx)\n * @param fxAmount Amount of foreign currency to exchange into USD\n * @return {\"usdAmount\" : \"Returns the foreign currency amount in USD\"}\n */\n function getFxUSDAmount(string currency, uint fxAmount) public view returns (uint usdAmount) {\n return lib.getFxUSDAmount(currency, fxAmount);\n }\n\n /**\n * @notice Updates to new forwarded account\n * @param originalAccount [address]\n * @param updatedAccount [address]\n * @param issuerFirm Name of the issuer firm with authority on account holder;\n * @return { \"success\": \"Returns true if successfully called from another contract\"}\n */\n function approveForwardedAccount(address originalAccount, address updatedAccount, string issuerFirm) public onlyAuthority(issuerFirm, msg.sender) returns (bool success) {\n // @notice updatesa forwarded account\n // @dev !!! mutates storage state\n require(\n lib.setForwardedAccount(originalAccount, updatedAccount),\n \"Error: Unable to set forwarded address for account. Please check issuerFirm and firm authority are registered\"\n );\n return true;\n }\n\n /**\n * @notice Issues a specified account to recipient account of a given currency\n * @param currency [string] currency symbol\n * @param amount [uint] issuance amount\n * @param issuerFirm Name of the issuer firm with authority on account holder;\n * @return { \"success\": \"Returns true if successfully called from another contract\"}\n */\n function deposit(string currency, address account, uint amount, string issuerFirm) public onlyAuthority(issuerFirm, msg.sender) returns (bool success) {\n require(\n lib.verifyAccount(account),\n \"Error: Account is not verified!\"\n );\n // @notice depositing tokens to account\n // @dev !!! mutates storage state\n require(\n lib.deposit(currency, account, amount, issuerFirm),\n \"Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered\"\n );\n return true;\n }\n\n /**\n * @notice Withdraws a specified amount of tokens of a given currency\n * @param currency Currency symbol\n * @param account Ethereum address of account holder\n * @param amount Issuance amount\n * @param issuerFirm Name of the issuer firm with authority on account holder\n * @return { \"success\": \"Returns true if successfully called from another contract\"}\n */\n function withdraw(string currency, address account, uint amount, string issuerFirm) public onlyAuthority(issuerFirm, msg.sender) returns (bool success) {\n require(\n lib.verifyAccount(account),\n \"Error: Account is not verified!\"\n );\n // @notice withdrawing from account\n // @dev !!! mutates storage state\n require(\n lib.withdraw(currency, account, amount, issuerFirm),\n \"Error: Unable to withdraw funds. Please check issuerFirm and firm authority are registered and have issued funds that can be withdrawn\"\n );\n return true;\n }\n\n /**\n * @notice Ensure only authorized currency firms and authorities can modify protected methods\n * @dev authority must be registered to an authorized firm to use protected methods\n */\n modifier onlyAuthority(string firmName, address authority) {\n // @notice throws if authority account is not registred to the given firm\n require(\n lib.isRegisteredToFirm(firmName, authority),\n \"Error: issuerFirm and/or firm authority are not registered\"\n );\n _;\n }\n\n}\n", + "sourcePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOCurrencyAuthority.sol", + "ast": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOCurrencyAuthority.sol", + "exportedSymbols": { + "TokenIOCurrencyAuthority": [ + 922 + ] + }, + "id": 923, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 472, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:4" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 473, + "nodeType": "ImportDirective", + "scope": 923, + "sourceUnit": 185, + "src": "524:23:4", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 474, + "nodeType": "ImportDirective", + "scope": 923, + "sourceUnit": 5242, + "src": "548:30:4", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 475, + "nodeType": "ImportDirective", + "scope": 923, + "sourceUnit": 4623, + "src": "579:26:4", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 476, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "926:7:4", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 477, + "nodeType": "InheritanceSpecifier", + "src": "926:7:4" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 922, + "linearizedBaseContracts": [ + 922, + 184 + ], + "name": "TokenIOCurrencyAuthority", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 480, + "libraryName": { + "contractScope": null, + "id": 478, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4622, + "src": "1033:10:4", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4622", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "1027:37:4", + "typeName": { + "contractScope": null, + "id": 479, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1048:15:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 482, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 922, + "src": "1069:19:4", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 481, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1069:15:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 502, + "nodeType": "Block", + "src": "1287:385:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 493, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 487, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "1536:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 489, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1645, + "src": "1536:11:4", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 491, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 484, + "src": "1565:16:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 490, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5241, + "src": "1550:14:4", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5241_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 492, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1550:32:4", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1536:46:4", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "id": 494, + "nodeType": "ExpressionStatement", + "src": "1536:46:4" + }, + { + "expression": { + "argumentTypes": null, + "id": 500, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 495, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1641:5:4", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 498, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 496, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "1647:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 497, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1647:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1641:17:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 499, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1661:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1641:24:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 501, + "nodeType": "ExpressionStatement", + "src": "1641:24:4" + } + ] + }, + "documentation": "@notice Constructor method for CurrencyAuthority contract\n@param _storageContract Address of TokenIOStorage contract", + "id": 503, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 485, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 484, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 503, + "src": "1254:24:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 483, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1254:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1253:26:4" + }, + "payable": false, + "returnParameters": { + "id": 486, + "nodeType": "ParameterList", + "parameters": [], + "src": "1287:0:4" + }, + "scope": 922, + "src": "1242:430:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 518, + "nodeType": "Block", + "src": "2007:60:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 514, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 505, + "src": "2042:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 515, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 507, + "src": "2052:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 512, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "2022:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 513, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenBalance", + "nodeType": "MemberAccess", + "referencedDeclaration": 2832, + "src": "2022:19:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address) view returns (uint256)" + } + }, + "id": 516, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2022:38:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 511, + "id": 517, + "nodeType": "Return", + "src": "2015:45:4" + } + ] + }, + "documentation": "@notice Gets balance of sepcified account for a given currency\n@param currency Currency symbol 'USDx'\n@param account Sepcified account address\n@return { \"balance\": \"Returns account balance\"}", + "id": 519, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getTokenBalance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 508, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 505, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 519, + "src": "1938:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 504, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1938:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 507, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 519, + "src": "1955:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 506, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1955:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1937:34:4" + }, + "payable": false, + "returnParameters": { + "id": 511, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 510, + "name": "balance", + "nodeType": "VariableDeclaration", + "scope": 519, + "src": "1993:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 509, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "1993:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1992:14:4" + }, + "scope": 922, + "src": "1913:154:4", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 531, + "nodeType": "Block", + "src": "2328:50:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 528, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 521, + "src": "2362:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 526, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "2343:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 527, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSupply", + "nodeType": "MemberAccess", + "referencedDeclaration": 2762, + "src": "2343:18:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) view returns (uint256)" + } + }, + "id": 529, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2343:28:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 525, + "id": 530, + "nodeType": "Return", + "src": "2336:35:4" + } + ] + }, + "documentation": "@notice Gets total supply of specified currency\n@param currency Currency symbol 'USDx'\n@return { \"supply\": \"Returns total supply of currency\"}", + "id": 532, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getTokenSupply", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 522, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 521, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 532, + "src": "2277:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 520, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2277:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2276:17:4" + }, + "payable": false, + "returnParameters": { + "id": 525, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 524, + "name": "supply", + "nodeType": "VariableDeclaration", + "scope": 532, + "src": "2315:11:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 523, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2315:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2314:13:4" + }, + "scope": 922, + "src": "2253:125:4", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 560, + "nodeType": "Block", + "src": "2871:307:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 551, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 534, + "src": "3005:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 552, + "name": "isAllowed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 536, + "src": "3014:9:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "id": 553, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 538, + "src": "3025:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 549, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "2984:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 550, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountStatus", + "nodeType": "MemberAccess", + "referencedDeclaration": 2226, + "src": "2984:20:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_bool_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,bool,string memory) returns (bool)" + } + }, + "id": 554, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2984:52:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20667265657a65206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 555, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3048:92:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7f197396b05ade1cce611708853992e455bcadbeffc759d9c87bb519e9c019f7", + "typeString": "literal_string \"Error: Unable to freeze account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to freeze account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7f197396b05ade1cce611708853992e455bcadbeffc759d9c87bb519e9c019f7", + "typeString": "literal_string \"Error: Unable to freeze account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 548, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2965:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 556, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2965:185:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 557, + "nodeType": "ExpressionStatement", + "src": "2965:185:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 558, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3167:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 547, + "id": 559, + "nodeType": "Return", + "src": "3160:11:4" + } + ] + }, + "documentation": "@notice Updates account status. false: frozen, true: un-frozen\n@param account Sepcified account address\n@param isAllowed Frozen status\n@param issuerFirm Name of the issuer firm with authority on account holder;\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 561, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 541, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 538, + "src": "2824:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 542, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "2836:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 543, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2836:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 544, + "modifierName": { + "argumentTypes": null, + "id": 540, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 921, + "src": "2810:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "2810:37:4" + } + ], + "name": "freezeAccount", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 539, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 534, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 561, + "src": "2751:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 533, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2751:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 536, + "name": "isAllowed", + "nodeType": "VariableDeclaration", + "scope": 561, + "src": "2768:14:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 535, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2768:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 538, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 561, + "src": "2784:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 537, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2784:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2750:52:4" + }, + "payable": false, + "returnParameters": { + "id": 547, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 546, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 561, + "src": "2857:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 545, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2857:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2856:14:4" + }, + "scope": 922, + "src": "2728:450:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 622, + "nodeType": "Block", + "src": "3669:1019:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 582, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 563, + "src": "3806:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 583, + "name": "isApproved", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 565, + "src": "3815:10:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "id": 584, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 569, + "src": "3827:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 580, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "3787:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 581, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setKYCApproval", + "nodeType": "MemberAccess", + "referencedDeclaration": 2181, + "src": "3787:18:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_bool_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,bool,string memory) returns (bool)" + } + }, + "id": 585, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3787:51:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20617070726f7665206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 586, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3850:93:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_2adead5f449a6a2ad329ab364a208ed0d211b31aa2a852e47f50e9ff362b00fc", + "typeString": "literal_string \"Error: Unable to approve account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to approve account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_2adead5f449a6a2ad329ab364a208ed0d211b31aa2a852e47f50e9ff362b00fc", + "typeString": "literal_string \"Error: Unable to approve account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 579, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "3768:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 587, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3768:185:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 588, + "nodeType": "ExpressionStatement", + "src": "3768:185:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 592, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 563, + "src": "4088:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 593, + "name": "isApproved", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 565, + "src": "4097:10:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "id": 594, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 569, + "src": "4109:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 590, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "4067:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 591, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountStatus", + "nodeType": "MemberAccess", + "referencedDeclaration": 2226, + "src": "4067:20:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_bool_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,bool,string memory) returns (bool)" + } + }, + "id": 595, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4067:53:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20736574206163636f756e74207374617475732e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 596, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4132:96:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d5b494d954ebc1ea25ff613cbe2af5e5e6dee30f2d294a40b95846fb93c0b75b", + "typeString": "literal_string \"Error: Unable to set account status. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set account status. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d5b494d954ebc1ea25ff613cbe2af5e5e6dee30f2d294a40b95846fb93c0b75b", + "typeString": "literal_string \"Error: Unable to set account status. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 589, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "4048:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 597, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4048:190:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 598, + "nodeType": "ExpressionStatement", + "src": "4048:190:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 602, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 563, + "src": "4295:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 603, + "name": "limit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 567, + "src": "4304:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 600, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "4267:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 601, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountSpendingLimit", + "nodeType": "MemberAccess", + "referencedDeclaration": 4308, + "src": "4267:27:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 604, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4267:43:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420696e697469616c207370656e64696e67206c696d697420666f72206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 605, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4322:116:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_3db3df495834b8a5dacc61243eb5b9d04e4582608388cabb972a238d9e98e4fe", + "typeString": "literal_string \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_3db3df495834b8a5dacc61243eb5b9d04e4582608388cabb972a238d9e98e4fe", + "typeString": "literal_string \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 599, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "4248:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 606, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4248:200:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 607, + "nodeType": "ExpressionStatement", + "src": "4248:200:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 611, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 563, + "src": "4506:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 614, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 612, + "name": "now", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5258, + "src": "4516:3:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "argumentTypes": null, + "hexValue": "3836343030", + "id": 613, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4522:5:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_86400_by_1", + "typeString": "int_const 86400" + }, + "value": "86400" + }, + "src": "4516:11:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 615, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4515:13:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 609, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "4477:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 610, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountSpendingPeriod", + "nodeType": "MemberAccess", + "referencedDeclaration": 4248, + "src": "4477:28:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 616, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4477:52:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20736574207370656e64696e6720706572696f6420666f72206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 617, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4541:109:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f8ea4dffeecef2c14480ec77d7f295f45e20ccebde68ef7164f5662998110ce0", + "typeString": "literal_string \"Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_f8ea4dffeecef2c14480ec77d7f295f45e20ccebde68ef7164f5662998110ce0", + "typeString": "literal_string \"Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 608, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "4458:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 618, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4458:202:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 619, + "nodeType": "ExpressionStatement", + "src": "4458:202:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 620, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4677:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 578, + "id": 621, + "nodeType": "Return", + "src": "4670:11:4" + } + ] + }, + "documentation": "@notice Sets approval status of specified account\n@param account Sepcified account address\n@param isApproved Frozen status\n@param issuerFirm Name of the issuer firm with authority on account holder;\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 623, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 572, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 569, + "src": "3622:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 573, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "3634:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 574, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "3634:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 575, + "modifierName": { + "argumentTypes": null, + "id": 571, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 921, + "src": "3608:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "3608:37:4" + } + ], + "name": "approveKYC", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 570, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 563, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 623, + "src": "3536:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 562, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3536:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 565, + "name": "isApproved", + "nodeType": "VariableDeclaration", + "scope": 623, + "src": "3553:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 564, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3553:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 567, + "name": "limit", + "nodeType": "VariableDeclaration", + "scope": 623, + "src": "3570:10:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 566, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3570:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 569, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 623, + "src": "3582:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 568, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3582:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3535:65:4" + }, + "payable": false, + "returnParameters": { + "id": 578, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 577, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 623, + "src": "3655:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 576, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3655:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3654:14:4" + }, + "scope": 922, + "src": "3516:1172:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 697, + "nodeType": "Block", + "src": "5318:1207:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 646, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 627, + "src": "5457:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "hexValue": "74727565", + "id": 647, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5466:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "argumentTypes": null, + "id": 648, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 633, + "src": "5472:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 644, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "5438:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 645, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setKYCApproval", + "nodeType": "MemberAccess", + "referencedDeclaration": 2181, + "src": "5438:18:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_bool_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,bool,string memory) returns (bool)" + } + }, + "id": 649, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5438:45:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20617070726f7665206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 650, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5495:93:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_2adead5f449a6a2ad329ab364a208ed0d211b31aa2a852e47f50e9ff362b00fc", + "typeString": "literal_string \"Error: Unable to approve account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to approve account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_2adead5f449a6a2ad329ab364a208ed0d211b31aa2a852e47f50e9ff362b00fc", + "typeString": "literal_string \"Error: Unable to approve account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 643, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "5419:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 651, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5419:179:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 652, + "nodeType": "ExpressionStatement", + "src": "5419:179:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 656, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 627, + "src": "5739:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "hexValue": "74727565", + "id": 657, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5748:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "argumentTypes": null, + "id": 658, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 633, + "src": "5754:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 654, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "5718:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 655, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountStatus", + "nodeType": "MemberAccess", + "referencedDeclaration": 2226, + "src": "5718:20:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_bool_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,bool,string memory) returns (bool)" + } + }, + "id": 659, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5718:47:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20736574206163636f756e74207374617475732e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 660, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5777:96:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d5b494d954ebc1ea25ff613cbe2af5e5e6dee30f2d294a40b95846fb93c0b75b", + "typeString": "literal_string \"Error: Unable to set account status. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set account status. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d5b494d954ebc1ea25ff613cbe2af5e5e6dee30f2d294a40b95846fb93c0b75b", + "typeString": "literal_string \"Error: Unable to set account status. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 653, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "5699:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 661, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5699:184:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 662, + "nodeType": "ExpressionStatement", + "src": "5699:184:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 666, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 625, + "src": "5924:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 667, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 627, + "src": "5934:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 668, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 629, + "src": "5943:6:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 669, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 633, + "src": "5951:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 664, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "5912:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 665, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "deposit", + "nodeType": "MemberAccess", + "referencedDeclaration": 3635, + "src": "5912:11:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,uint256,string memory) returns (bool)" + } + }, + "id": 670, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5912:50:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f206465706f7369742066756e64732e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 671, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5974:91:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_05597560a0a09591bd512c7af73fab8ea943a53c0f5353c4fe6fe2cc72d5d3f2", + "typeString": "literal_string \"Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_05597560a0a09591bd512c7af73fab8ea943a53c0f5353c4fe6fe2cc72d5d3f2", + "typeString": "literal_string \"Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 663, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "5893:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 672, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5893:182:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 673, + "nodeType": "ExpressionStatement", + "src": "5893:182:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 677, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 627, + "src": "6132:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 678, + "name": "limit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 631, + "src": "6141:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 675, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "6104:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 676, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountSpendingLimit", + "nodeType": "MemberAccess", + "referencedDeclaration": 4308, + "src": "6104:27:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 679, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6104:43:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420696e697469616c207370656e64696e67206c696d697420666f72206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 680, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6159:116:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_3db3df495834b8a5dacc61243eb5b9d04e4582608388cabb972a238d9e98e4fe", + "typeString": "literal_string \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_3db3df495834b8a5dacc61243eb5b9d04e4582608388cabb972a238d9e98e4fe", + "typeString": "literal_string \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 674, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "6085:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 681, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6085:200:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 682, + "nodeType": "ExpressionStatement", + "src": "6085:200:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 686, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 627, + "src": "6343:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 689, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 687, + "name": "now", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5258, + "src": "6353:3:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "argumentTypes": null, + "hexValue": "3836343030", + "id": 688, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6359:5:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_86400_by_1", + "typeString": "int_const 86400" + }, + "value": "86400" + }, + "src": "6353:11:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 690, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "6352:13:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 684, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "6314:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 685, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountSpendingPeriod", + "nodeType": "MemberAccess", + "referencedDeclaration": 4248, + "src": "6314:28:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 691, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6314:52:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20736574207370656e64696e6720706572696f6420666f72206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 692, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6378:109:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f8ea4dffeecef2c14480ec77d7f295f45e20ccebde68ef7164f5662998110ce0", + "typeString": "literal_string \"Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_f8ea4dffeecef2c14480ec77d7f295f45e20ccebde68ef7164f5662998110ce0", + "typeString": "literal_string \"Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 683, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "6295:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 693, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6295:202:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 694, + "nodeType": "ExpressionStatement", + "src": "6295:202:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 695, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6514:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 642, + "id": 696, + "nodeType": "Return", + "src": "6507:11:4" + } + ] + }, + "documentation": "@notice Approves account and deposits specified amount of given currency\n@param currency Currency symbol of amount to be deposited;\n@param account Ethereum address of account holder;\n@param amount Deposit amount for account holder;\n@param issuerFirm Name of the issuer firm with authority on account holder;\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 698, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 636, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 633, + "src": "5271:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 637, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "5283:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 638, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "5283:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 639, + "modifierName": { + "argumentTypes": null, + "id": 635, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 921, + "src": "5257:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "5257:37:4" + } + ], + "name": "approveKYCAndDeposit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 634, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 625, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 698, + "src": "5172:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 624, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "5172:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 627, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 698, + "src": "5189:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 626, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5189:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 629, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 698, + "src": "5206:11:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 628, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5206:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 631, + "name": "limit", + "nodeType": "VariableDeclaration", + "scope": 698, + "src": "5219:10:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 630, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5219:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 633, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 698, + "src": "5231:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 632, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "5231:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5171:78:4" + }, + "payable": false, + "returnParameters": { + "id": 642, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 641, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 698, + "src": "5304:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 640, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5304:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5303:14:4" + }, + "scope": 922, + "src": "5142:1383:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 725, + "nodeType": "Block", + "src": "7040:228:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 717, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 700, + "src": "7093:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 718, + "name": "limit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 702, + "src": "7102:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 715, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "7065:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 716, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountSpendingLimit", + "nodeType": "MemberAccess", + "referencedDeclaration": 4308, + "src": "7065:27:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 719, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7065:43:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420696e697469616c207370656e64696e67206c696d697420666f72206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 720, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7118:116:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_3db3df495834b8a5dacc61243eb5b9d04e4582608388cabb972a238d9e98e4fe", + "typeString": "literal_string \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_3db3df495834b8a5dacc61243eb5b9d04e4582608388cabb972a238d9e98e4fe", + "typeString": "literal_string \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 714, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "7048:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 721, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7048:194:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 722, + "nodeType": "ExpressionStatement", + "src": "7048:194:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 723, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7257:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 713, + "id": 724, + "nodeType": "Return", + "src": "7250:11:4" + } + ] + }, + "documentation": "@notice Sets the spending limit for a given account\n@param account Ethereum address of account holder;\n@param limit Spending limit amount for account;\n@param issuerFirm Name of the issuer firm with authority on account holder;\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 726, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 707, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 704, + "src": "6993:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 708, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "7005:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 709, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "7005:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 710, + "modifierName": { + "argumentTypes": null, + "id": 706, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 921, + "src": "6979:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "6979:37:4" + } + ], + "name": "setAccountSpendingLimit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 705, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 700, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 726, + "src": "6924:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 699, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6924:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 702, + "name": "limit", + "nodeType": "VariableDeclaration", + "scope": 726, + "src": "6941:10:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 701, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "6941:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 704, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 726, + "src": "6953:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 703, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "6953:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6923:48:4" + }, + "payable": false, + "returnParameters": { + "id": 713, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 712, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 726, + "src": "7026:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 711, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7026:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7025:14:4" + }, + "scope": 922, + "src": "6891:377:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 738, + "nodeType": "Block", + "src": "7620:62:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 735, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 728, + "src": "7667:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 733, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "7635:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 734, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getAccountSpendingRemaining", + "nodeType": "MemberAccess", + "referencedDeclaration": 4508, + "src": "7635:31:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 736, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7635:40:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 732, + "id": 737, + "nodeType": "Return", + "src": "7628:47:4" + } + ] + }, + "documentation": "@notice Returns the periodic remaining spending amount for an account\n@param account Ethereum address of account holder;\n@return {\"spendingRemaining\" : \"Returns the remaining spending amount for the account\"}", + "id": 739, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getAccountSpendingRemaining", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 729, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 728, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 739, + "src": "7558:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 727, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7558:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7557:17:4" + }, + "payable": false, + "returnParameters": { + "id": 732, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 731, + "name": "spendingRemaining", + "nodeType": "VariableDeclaration", + "scope": 739, + "src": "7596:22:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 730, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "7596:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7595:24:4" + }, + "scope": 922, + "src": "7521:161:4", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 751, + "nodeType": "Block", + "src": "8004:58:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 748, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 741, + "src": "8047:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 746, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "8019:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 747, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getAccountSpendingLimit", + "nodeType": "MemberAccess", + "referencedDeclaration": 4334, + "src": "8019:27:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 749, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8019:36:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 745, + "id": 750, + "nodeType": "Return", + "src": "8012:43:4" + } + ] + }, + "documentation": "@notice Return the spending limit for an account\n@param account Ethereum address of account holder\n@return {\"spendingLimit\" : \"Returns the remaining daily spending limit of the account\"}", + "id": 752, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getAccountSpendingLimit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 742, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 741, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 752, + "src": "7946:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 740, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7946:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7945:17:4" + }, + "payable": false, + "returnParameters": { + "id": 745, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 744, + "name": "spendingLimit", + "nodeType": "VariableDeclaration", + "scope": 752, + "src": "7984:18:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 743, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "7984:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7983:20:4" + }, + "scope": 922, + "src": "7913:149:4", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 779, + "nodeType": "Block", + "src": "8709:194:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 771, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 754, + "src": "8754:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 772, + "name": "bpsRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 756, + "src": "8764:7:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 769, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "8734:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 770, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFxUSDBPSRate", + "nodeType": "MemberAccess", + "referencedDeclaration": 4542, + "src": "8734:19:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,uint256) returns (bool)" + } + }, + "id": 773, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8734:38:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742046582055534420626173697320706f696e747320726174652e20506c6561736520656e73757265206973737565724669726d20697320617574686f72697a6564", + "id": 774, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8782:87:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_bb75f554926078abd19b386958c530b812c30dcf00b22d8f88e84ef51c06cb71", + "typeString": "literal_string \"Error: Unable to set FX USD basis points rate. Please ensure issuerFirm is authorized\"" + }, + "value": "Error: Unable to set FX USD basis points rate. Please ensure issuerFirm is authorized" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_bb75f554926078abd19b386958c530b812c30dcf00b22d8f88e84ef51c06cb71", + "typeString": "literal_string \"Error: Unable to set FX USD basis points rate. Please ensure issuerFirm is authorized\"" + } + ], + "id": 768, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "8717:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 775, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8717:160:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 776, + "nodeType": "ExpressionStatement", + "src": "8717:160:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 777, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8892:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 767, + "id": 778, + "nodeType": "Return", + "src": "8885:11:4" + } + ] + }, + "documentation": "@notice Set the foreign currency exchange rate to USD in basis points\n@dev NOTE: This value should always be relative to USD pair; e.g. JPY/USD, GBP/USD, etc.\n@param currency The TokenIO currency symbol (e.g. USDx, JPYx, GBPx)\n@param bpsRate Basis point rate of foreign currency exchange rate to USD\n@param issuerFirm Firm setting the foreign currency exchange\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 780, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 761, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 758, + "src": "8662:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 762, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "8674:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 763, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "8674:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 764, + "modifierName": { + "argumentTypes": null, + "id": 760, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 921, + "src": "8648:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "8648:37:4" + } + ], + "name": "setFxBpsRate", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 759, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 754, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 780, + "src": "8591:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 753, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "8591:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 756, + "name": "bpsRate", + "nodeType": "VariableDeclaration", + "scope": 780, + "src": "8608:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 755, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "8608:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 758, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 780, + "src": "8622:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 757, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "8622:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8590:50:4" + }, + "payable": false, + "returnParameters": { + "id": 767, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 766, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 780, + "src": "8695:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 765, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8695:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8694:14:4" + }, + "scope": 922, + "src": "8569:334:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 795, + "nodeType": "Block", + "src": "9304:60:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 791, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 782, + "src": "9338:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 792, + "name": "fxAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 784, + "src": "9348:8:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 789, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "9319:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 790, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFxUSDAmount", + "nodeType": "MemberAccess", + "referencedDeclaration": 4621, + "src": "9319:18:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,uint256) view returns (uint256)" + } + }, + "id": 793, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9319:38:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 788, + "id": 794, + "nodeType": "Return", + "src": "9312:45:4" + } + ] + }, + "documentation": "@notice Return the foreign currency USD exchanged amount\n@param currency The TokenIO currency symbol (e.g. USDx, JPYx, GBPx)\n@param fxAmount Amount of foreign currency to exchange into USD\n@return {\"usdAmount\" : \"Returns the foreign currency amount in USD\"}", + "id": 796, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getFxUSDAmount", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 785, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 782, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 796, + "src": "9235:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 781, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "9235:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 784, + "name": "fxAmount", + "nodeType": "VariableDeclaration", + "scope": 796, + "src": "9252:13:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 783, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "9252:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9234:32:4" + }, + "payable": false, + "returnParameters": { + "id": 788, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 787, + "name": "usdAmount", + "nodeType": "VariableDeclaration", + "scope": 796, + "src": "9288:14:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 786, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "9288:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9287:16:4" + }, + "scope": 922, + "src": "9211:153:4", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 823, + "nodeType": "Block", + "src": "9854:334:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 815, + "name": "originalAccount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 798, + "src": "9995:15:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 816, + "name": "updatedAccount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 800, + "src": "10012:14:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 813, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "9971:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 814, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setForwardedAccount", + "nodeType": "MemberAccess", + "referencedDeclaration": 2260, + "src": "9971:23:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,address) returns (bool)" + } + }, + "id": 817, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9971:56:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420666f72776172646564206164647265737320666f72206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 818, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10039:111:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_e6961bf7e2117bb8ea6b863d500e7333e3944d065ba6c8fa1114eacec3e93704", + "typeString": "literal_string \"Error: Unable to set forwarded address for account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set forwarded address for account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_e6961bf7e2117bb8ea6b863d500e7333e3944d065ba6c8fa1114eacec3e93704", + "typeString": "literal_string \"Error: Unable to set forwarded address for account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 812, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "9952:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 819, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9952:208:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 820, + "nodeType": "ExpressionStatement", + "src": "9952:208:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 821, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10177:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 811, + "id": 822, + "nodeType": "Return", + "src": "10170:11:4" + } + ] + }, + "documentation": "@notice Updates to new forwarded account\n@param originalAccount [address]\n@param updatedAccount [address]\n@param issuerFirm Name of the issuer firm with authority on account holder;\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 824, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 805, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 802, + "src": "9807:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 806, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "9819:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 807, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "9819:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 808, + "modifierName": { + "argumentTypes": null, + "id": 804, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 921, + "src": "9793:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "9793:37:4" + } + ], + "name": "approveForwardedAccount", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 803, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 798, + "name": "originalAccount", + "nodeType": "VariableDeclaration", + "scope": 824, + "src": "9718:23:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 797, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9718:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 800, + "name": "updatedAccount", + "nodeType": "VariableDeclaration", + "scope": 824, + "src": "9743:22:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 799, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9743:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 802, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 824, + "src": "9767:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 801, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "9767:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9717:68:4" + }, + "payable": false, + "returnParameters": { + "id": 811, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 810, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 824, + "src": "9840:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 809, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "9840:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9839:14:4" + }, + "scope": 922, + "src": "9685:503:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 863, + "nodeType": "Block", + "src": "10708:420:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 845, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 828, + "src": "10755:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 843, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "10737:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 844, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "verifyAccount", + "nodeType": "MemberAccess", + "referencedDeclaration": 3062, + "src": "10737:17:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bool)" + } + }, + "id": 846, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10737:26:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a204163636f756e74206973206e6f7420766572696669656421", + "id": 847, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10775:33:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_a5e279d14000afe880d344db24ac101f5a640f2f3904eb122eb002d05df8832c", + "typeString": "literal_string \"Error: Account is not verified!\"" + }, + "value": "Error: Account is not verified!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_a5e279d14000afe880d344db24ac101f5a640f2f3904eb122eb002d05df8832c", + "typeString": "literal_string \"Error: Account is not verified!\"" + } + ], + "id": 842, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "10718:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 848, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10718:100:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 849, + "nodeType": "ExpressionStatement", + "src": "10718:100:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 853, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 826, + "src": "10949:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 854, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 828, + "src": "10959:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 855, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 830, + "src": "10968:6:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 856, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 832, + "src": "10976:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 851, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "10937:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 852, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "deposit", + "nodeType": "MemberAccess", + "referencedDeclaration": 3635, + "src": "10937:11:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,uint256,string memory) returns (bool)" + } + }, + "id": 857, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10937:50:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f206465706f7369742066756e64732e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 858, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10999:91:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_05597560a0a09591bd512c7af73fab8ea943a53c0f5353c4fe6fe2cc72d5d3f2", + "typeString": "literal_string \"Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_05597560a0a09591bd512c7af73fab8ea943a53c0f5353c4fe6fe2cc72d5d3f2", + "typeString": "literal_string \"Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 850, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "10918:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 859, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10918:182:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 860, + "nodeType": "ExpressionStatement", + "src": "10918:182:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 861, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11117:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 841, + "id": 862, + "nodeType": "Return", + "src": "11110:11:4" + } + ] + }, + "documentation": "@notice Issues a specified account to recipient account of a given currency\n@param currency [string] currency symbol\n@param amount [uint] issuance amount\n@param issuerFirm Name of the issuer firm with authority on account holder;\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 864, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 835, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 832, + "src": "10661:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 836, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "10673:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 837, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "10673:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 838, + "modifierName": { + "argumentTypes": null, + "id": 834, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 921, + "src": "10647:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "10647:37:4" + } + ], + "name": "deposit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 833, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 826, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 864, + "src": "10574:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 825, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "10574:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 828, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 864, + "src": "10591:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 827, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10591:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 830, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 864, + "src": "10608:11:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 829, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "10608:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 832, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 864, + "src": "10621:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 831, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "10621:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "10573:66:4" + }, + "payable": false, + "returnParameters": { + "id": 841, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 840, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 864, + "src": "10694:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 839, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "10694:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "10693:14:4" + }, + "scope": 922, + "src": "10557:571:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 903, + "nodeType": "Block", + "src": "11680:462:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 885, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 868, + "src": "11727:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 883, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "11709:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 884, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "verifyAccount", + "nodeType": "MemberAccess", + "referencedDeclaration": 3062, + "src": "11709:17:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bool)" + } + }, + "id": 886, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11709:26:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a204163636f756e74206973206e6f7420766572696669656421", + "id": 887, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11747:33:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_a5e279d14000afe880d344db24ac101f5a640f2f3904eb122eb002d05df8832c", + "typeString": "literal_string \"Error: Account is not verified!\"" + }, + "value": "Error: Account is not verified!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_a5e279d14000afe880d344db24ac101f5a640f2f3904eb122eb002d05df8832c", + "typeString": "literal_string \"Error: Account is not verified!\"" + } + ], + "id": 882, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "11690:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 888, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11690:100:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 889, + "nodeType": "ExpressionStatement", + "src": "11690:100:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 893, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 866, + "src": "11918:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 894, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 868, + "src": "11928:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 895, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 870, + "src": "11937:6:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 896, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 872, + "src": "11945:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 891, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "11905:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 892, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "withdraw", + "nodeType": "MemberAccess", + "referencedDeclaration": 3746, + "src": "11905:12:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,uint256,string memory) returns (bool)" + } + }, + "id": 897, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11905:51:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2077697468647261772066756e64732e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f7269747920617265207265676973746572656420616e642068617665206973737565642066756e647320746861742063616e2062652077697468647261776e", + "id": 898, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11968:136:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d6e626bbbdfa2315c15e2b539714496598c6d0294b7989222c4553c1a4a17622", + "typeString": "literal_string \"Error: Unable to withdraw funds. Please check issuerFirm and firm authority are registered and have issued funds that can be withdrawn\"" + }, + "value": "Error: Unable to withdraw funds. Please check issuerFirm and firm authority are registered and have issued funds that can be withdrawn" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d6e626bbbdfa2315c15e2b539714496598c6d0294b7989222c4553c1a4a17622", + "typeString": "literal_string \"Error: Unable to withdraw funds. Please check issuerFirm and firm authority are registered and have issued funds that can be withdrawn\"" + } + ], + "id": 890, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "11886:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 899, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11886:228:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 900, + "nodeType": "ExpressionStatement", + "src": "11886:228:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 901, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12131:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 881, + "id": 902, + "nodeType": "Return", + "src": "12124:11:4" + } + ] + }, + "documentation": "@notice Withdraws a specified amount of tokens of a given currency\n@param currency Currency symbol\n@param account Ethereum address of account holder\n@param amount Issuance amount\n@param issuerFirm Name of the issuer firm with authority on account holder\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 904, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 875, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 872, + "src": "11633:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 876, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "11645:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 877, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "11645:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 878, + "modifierName": { + "argumentTypes": null, + "id": 874, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 921, + "src": "11619:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "11619:37:4" + } + ], + "name": "withdraw", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 873, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 866, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 904, + "src": "11546:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 865, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "11546:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 868, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 904, + "src": "11563:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 867, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11563:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 870, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 904, + "src": "11580:11:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 869, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "11580:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 872, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 904, + "src": "11593:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 871, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "11593:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "11545:66:4" + }, + "payable": false, + "returnParameters": { + "id": 881, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 880, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 904, + "src": "11666:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 879, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "11666:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "11665:14:4" + }, + "scope": 922, + "src": "11528:614:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 920, + "nodeType": "Block", + "src": "12409:254:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 913, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 906, + "src": "12543:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 914, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 908, + "src": "12553:9:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 911, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "12520:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 912, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "isRegisteredToFirm", + "nodeType": "MemberAccess", + "referencedDeclaration": 3932, + "src": "12520:22:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address) view returns (bool)" + } + }, + "id": 915, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12520:43:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a206973737565724669726d20616e642f6f72206669726d20617574686f7269747920617265206e6f742072656769737465726564", + "id": 916, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12575:60:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_462b4c77bf54838ec38a464948b1a941796aa7d982a63221057f242b5bb9741d", + "typeString": "literal_string \"Error: issuerFirm and/or firm authority are not registered\"" + }, + "value": "Error: issuerFirm and/or firm authority are not registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_462b4c77bf54838ec38a464948b1a941796aa7d982a63221057f242b5bb9741d", + "typeString": "literal_string \"Error: issuerFirm and/or firm authority are not registered\"" + } + ], + "id": 910, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "12501:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 917, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12501:144:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 918, + "nodeType": "ExpressionStatement", + "src": "12501:144:4" + }, + { + "id": 919, + "nodeType": "PlaceholderStatement", + "src": "12655:1:4" + } + ] + }, + "documentation": "@notice Ensure only authorized currency firms and authorities can modify protected methods\n@dev authority must be registered to an authorized firm to use protected methods", + "id": 921, + "name": "onlyAuthority", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 909, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 906, + "name": "firmName", + "nodeType": "VariableDeclaration", + "scope": 921, + "src": "12373:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 905, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "12373:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 908, + "name": "authority", + "nodeType": "VariableDeclaration", + "scope": 921, + "src": "12390:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 907, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12390:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "12372:36:4" + }, + "src": "12350:313:4", + "visibility": "internal" + } + ], + "scope": 923, + "src": "889:11777:4" + } + ], + "src": "0:12667:4" + }, + "legacyAST": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOCurrencyAuthority.sol", + "exportedSymbols": { + "TokenIOCurrencyAuthority": [ + 922 + ] + }, + "id": 923, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 472, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:4" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 473, + "nodeType": "ImportDirective", + "scope": 923, + "sourceUnit": 185, + "src": "524:23:4", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 474, + "nodeType": "ImportDirective", + "scope": 923, + "sourceUnit": 5242, + "src": "548:30:4", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 475, + "nodeType": "ImportDirective", + "scope": 923, + "sourceUnit": 4623, + "src": "579:26:4", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 476, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "926:7:4", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 477, + "nodeType": "InheritanceSpecifier", + "src": "926:7:4" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 922, + "linearizedBaseContracts": [ + 922, + 184 + ], + "name": "TokenIOCurrencyAuthority", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 480, + "libraryName": { + "contractScope": null, + "id": 478, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4622, + "src": "1033:10:4", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4622", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "1027:37:4", + "typeName": { + "contractScope": null, + "id": 479, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1048:15:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 482, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 922, + "src": "1069:19:4", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 481, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1069:15:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 502, + "nodeType": "Block", + "src": "1287:385:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 493, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 487, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "1536:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 489, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1645, + "src": "1536:11:4", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 491, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 484, + "src": "1565:16:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 490, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5241, + "src": "1550:14:4", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5241_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 492, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1550:32:4", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1536:46:4", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "id": 494, + "nodeType": "ExpressionStatement", + "src": "1536:46:4" + }, + { + "expression": { + "argumentTypes": null, + "id": 500, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 495, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1641:5:4", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 498, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 496, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "1647:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 497, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1647:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1641:17:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 499, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1661:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1641:24:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 501, + "nodeType": "ExpressionStatement", + "src": "1641:24:4" + } + ] + }, + "documentation": "@notice Constructor method for CurrencyAuthority contract\n@param _storageContract Address of TokenIOStorage contract", + "id": 503, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 485, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 484, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 503, + "src": "1254:24:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 483, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1254:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1253:26:4" + }, + "payable": false, + "returnParameters": { + "id": 486, + "nodeType": "ParameterList", + "parameters": [], + "src": "1287:0:4" + }, + "scope": 922, + "src": "1242:430:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 518, + "nodeType": "Block", + "src": "2007:60:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 514, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 505, + "src": "2042:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 515, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 507, + "src": "2052:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 512, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "2022:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 513, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenBalance", + "nodeType": "MemberAccess", + "referencedDeclaration": 2832, + "src": "2022:19:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address) view returns (uint256)" + } + }, + "id": 516, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2022:38:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 511, + "id": 517, + "nodeType": "Return", + "src": "2015:45:4" + } + ] + }, + "documentation": "@notice Gets balance of sepcified account for a given currency\n@param currency Currency symbol 'USDx'\n@param account Sepcified account address\n@return { \"balance\": \"Returns account balance\"}", + "id": 519, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getTokenBalance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 508, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 505, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 519, + "src": "1938:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 504, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1938:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 507, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 519, + "src": "1955:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 506, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1955:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1937:34:4" + }, + "payable": false, + "returnParameters": { + "id": 511, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 510, + "name": "balance", + "nodeType": "VariableDeclaration", + "scope": 519, + "src": "1993:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 509, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "1993:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1992:14:4" + }, + "scope": 922, + "src": "1913:154:4", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 531, + "nodeType": "Block", + "src": "2328:50:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 528, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 521, + "src": "2362:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 526, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "2343:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 527, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSupply", + "nodeType": "MemberAccess", + "referencedDeclaration": 2762, + "src": "2343:18:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) view returns (uint256)" + } + }, + "id": 529, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2343:28:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 525, + "id": 530, + "nodeType": "Return", + "src": "2336:35:4" + } + ] + }, + "documentation": "@notice Gets total supply of specified currency\n@param currency Currency symbol 'USDx'\n@return { \"supply\": \"Returns total supply of currency\"}", + "id": 532, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getTokenSupply", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 522, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 521, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 532, + "src": "2277:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 520, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2277:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2276:17:4" + }, + "payable": false, + "returnParameters": { + "id": 525, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 524, + "name": "supply", + "nodeType": "VariableDeclaration", + "scope": 532, + "src": "2315:11:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 523, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2315:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2314:13:4" + }, + "scope": 922, + "src": "2253:125:4", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 560, + "nodeType": "Block", + "src": "2871:307:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 551, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 534, + "src": "3005:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 552, + "name": "isAllowed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 536, + "src": "3014:9:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "id": 553, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 538, + "src": "3025:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 549, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "2984:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 550, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountStatus", + "nodeType": "MemberAccess", + "referencedDeclaration": 2226, + "src": "2984:20:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_bool_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,bool,string memory) returns (bool)" + } + }, + "id": 554, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2984:52:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20667265657a65206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 555, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3048:92:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7f197396b05ade1cce611708853992e455bcadbeffc759d9c87bb519e9c019f7", + "typeString": "literal_string \"Error: Unable to freeze account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to freeze account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7f197396b05ade1cce611708853992e455bcadbeffc759d9c87bb519e9c019f7", + "typeString": "literal_string \"Error: Unable to freeze account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 548, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2965:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 556, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2965:185:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 557, + "nodeType": "ExpressionStatement", + "src": "2965:185:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 558, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3167:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 547, + "id": 559, + "nodeType": "Return", + "src": "3160:11:4" + } + ] + }, + "documentation": "@notice Updates account status. false: frozen, true: un-frozen\n@param account Sepcified account address\n@param isAllowed Frozen status\n@param issuerFirm Name of the issuer firm with authority on account holder;\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 561, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 541, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 538, + "src": "2824:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 542, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "2836:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 543, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2836:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 544, + "modifierName": { + "argumentTypes": null, + "id": 540, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 921, + "src": "2810:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "2810:37:4" + } + ], + "name": "freezeAccount", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 539, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 534, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 561, + "src": "2751:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 533, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2751:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 536, + "name": "isAllowed", + "nodeType": "VariableDeclaration", + "scope": 561, + "src": "2768:14:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 535, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2768:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 538, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 561, + "src": "2784:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 537, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2784:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2750:52:4" + }, + "payable": false, + "returnParameters": { + "id": 547, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 546, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 561, + "src": "2857:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 545, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2857:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2856:14:4" + }, + "scope": 922, + "src": "2728:450:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 622, + "nodeType": "Block", + "src": "3669:1019:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 582, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 563, + "src": "3806:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 583, + "name": "isApproved", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 565, + "src": "3815:10:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "id": 584, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 569, + "src": "3827:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 580, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "3787:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 581, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setKYCApproval", + "nodeType": "MemberAccess", + "referencedDeclaration": 2181, + "src": "3787:18:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_bool_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,bool,string memory) returns (bool)" + } + }, + "id": 585, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3787:51:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20617070726f7665206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 586, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3850:93:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_2adead5f449a6a2ad329ab364a208ed0d211b31aa2a852e47f50e9ff362b00fc", + "typeString": "literal_string \"Error: Unable to approve account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to approve account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_2adead5f449a6a2ad329ab364a208ed0d211b31aa2a852e47f50e9ff362b00fc", + "typeString": "literal_string \"Error: Unable to approve account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 579, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "3768:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 587, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3768:185:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 588, + "nodeType": "ExpressionStatement", + "src": "3768:185:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 592, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 563, + "src": "4088:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 593, + "name": "isApproved", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 565, + "src": "4097:10:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "id": 594, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 569, + "src": "4109:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 590, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "4067:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 591, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountStatus", + "nodeType": "MemberAccess", + "referencedDeclaration": 2226, + "src": "4067:20:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_bool_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,bool,string memory) returns (bool)" + } + }, + "id": 595, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4067:53:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20736574206163636f756e74207374617475732e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 596, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4132:96:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d5b494d954ebc1ea25ff613cbe2af5e5e6dee30f2d294a40b95846fb93c0b75b", + "typeString": "literal_string \"Error: Unable to set account status. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set account status. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d5b494d954ebc1ea25ff613cbe2af5e5e6dee30f2d294a40b95846fb93c0b75b", + "typeString": "literal_string \"Error: Unable to set account status. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 589, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "4048:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 597, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4048:190:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 598, + "nodeType": "ExpressionStatement", + "src": "4048:190:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 602, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 563, + "src": "4295:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 603, + "name": "limit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 567, + "src": "4304:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 600, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "4267:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 601, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountSpendingLimit", + "nodeType": "MemberAccess", + "referencedDeclaration": 4308, + "src": "4267:27:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 604, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4267:43:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420696e697469616c207370656e64696e67206c696d697420666f72206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 605, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4322:116:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_3db3df495834b8a5dacc61243eb5b9d04e4582608388cabb972a238d9e98e4fe", + "typeString": "literal_string \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_3db3df495834b8a5dacc61243eb5b9d04e4582608388cabb972a238d9e98e4fe", + "typeString": "literal_string \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 599, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "4248:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 606, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4248:200:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 607, + "nodeType": "ExpressionStatement", + "src": "4248:200:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 611, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 563, + "src": "4506:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 614, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 612, + "name": "now", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5258, + "src": "4516:3:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "argumentTypes": null, + "hexValue": "3836343030", + "id": 613, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4522:5:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_86400_by_1", + "typeString": "int_const 86400" + }, + "value": "86400" + }, + "src": "4516:11:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 615, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4515:13:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 609, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "4477:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 610, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountSpendingPeriod", + "nodeType": "MemberAccess", + "referencedDeclaration": 4248, + "src": "4477:28:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 616, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4477:52:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20736574207370656e64696e6720706572696f6420666f72206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 617, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4541:109:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f8ea4dffeecef2c14480ec77d7f295f45e20ccebde68ef7164f5662998110ce0", + "typeString": "literal_string \"Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_f8ea4dffeecef2c14480ec77d7f295f45e20ccebde68ef7164f5662998110ce0", + "typeString": "literal_string \"Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 608, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "4458:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 618, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4458:202:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 619, + "nodeType": "ExpressionStatement", + "src": "4458:202:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 620, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4677:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 578, + "id": 621, + "nodeType": "Return", + "src": "4670:11:4" + } + ] + }, + "documentation": "@notice Sets approval status of specified account\n@param account Sepcified account address\n@param isApproved Frozen status\n@param issuerFirm Name of the issuer firm with authority on account holder;\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 623, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 572, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 569, + "src": "3622:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 573, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "3634:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 574, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "3634:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 575, + "modifierName": { + "argumentTypes": null, + "id": 571, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 921, + "src": "3608:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "3608:37:4" + } + ], + "name": "approveKYC", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 570, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 563, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 623, + "src": "3536:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 562, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3536:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 565, + "name": "isApproved", + "nodeType": "VariableDeclaration", + "scope": 623, + "src": "3553:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 564, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3553:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 567, + "name": "limit", + "nodeType": "VariableDeclaration", + "scope": 623, + "src": "3570:10:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 566, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3570:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 569, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 623, + "src": "3582:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 568, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3582:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3535:65:4" + }, + "payable": false, + "returnParameters": { + "id": 578, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 577, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 623, + "src": "3655:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 576, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3655:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3654:14:4" + }, + "scope": 922, + "src": "3516:1172:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 697, + "nodeType": "Block", + "src": "5318:1207:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 646, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 627, + "src": "5457:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "hexValue": "74727565", + "id": 647, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5466:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "argumentTypes": null, + "id": 648, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 633, + "src": "5472:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 644, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "5438:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 645, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setKYCApproval", + "nodeType": "MemberAccess", + "referencedDeclaration": 2181, + "src": "5438:18:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_bool_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,bool,string memory) returns (bool)" + } + }, + "id": 649, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5438:45:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20617070726f7665206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 650, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5495:93:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_2adead5f449a6a2ad329ab364a208ed0d211b31aa2a852e47f50e9ff362b00fc", + "typeString": "literal_string \"Error: Unable to approve account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to approve account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_2adead5f449a6a2ad329ab364a208ed0d211b31aa2a852e47f50e9ff362b00fc", + "typeString": "literal_string \"Error: Unable to approve account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 643, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "5419:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 651, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5419:179:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 652, + "nodeType": "ExpressionStatement", + "src": "5419:179:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 656, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 627, + "src": "5739:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "hexValue": "74727565", + "id": 657, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5748:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "argumentTypes": null, + "id": 658, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 633, + "src": "5754:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 654, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "5718:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 655, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountStatus", + "nodeType": "MemberAccess", + "referencedDeclaration": 2226, + "src": "5718:20:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_bool_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,bool,string memory) returns (bool)" + } + }, + "id": 659, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5718:47:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20736574206163636f756e74207374617475732e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 660, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5777:96:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d5b494d954ebc1ea25ff613cbe2af5e5e6dee30f2d294a40b95846fb93c0b75b", + "typeString": "literal_string \"Error: Unable to set account status. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set account status. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d5b494d954ebc1ea25ff613cbe2af5e5e6dee30f2d294a40b95846fb93c0b75b", + "typeString": "literal_string \"Error: Unable to set account status. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 653, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "5699:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 661, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5699:184:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 662, + "nodeType": "ExpressionStatement", + "src": "5699:184:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 666, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 625, + "src": "5924:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 667, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 627, + "src": "5934:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 668, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 629, + "src": "5943:6:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 669, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 633, + "src": "5951:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 664, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "5912:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 665, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "deposit", + "nodeType": "MemberAccess", + "referencedDeclaration": 3635, + "src": "5912:11:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,uint256,string memory) returns (bool)" + } + }, + "id": 670, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5912:50:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f206465706f7369742066756e64732e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 671, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5974:91:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_05597560a0a09591bd512c7af73fab8ea943a53c0f5353c4fe6fe2cc72d5d3f2", + "typeString": "literal_string \"Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_05597560a0a09591bd512c7af73fab8ea943a53c0f5353c4fe6fe2cc72d5d3f2", + "typeString": "literal_string \"Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 663, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "5893:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 672, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5893:182:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 673, + "nodeType": "ExpressionStatement", + "src": "5893:182:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 677, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 627, + "src": "6132:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 678, + "name": "limit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 631, + "src": "6141:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 675, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "6104:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 676, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountSpendingLimit", + "nodeType": "MemberAccess", + "referencedDeclaration": 4308, + "src": "6104:27:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 679, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6104:43:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420696e697469616c207370656e64696e67206c696d697420666f72206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 680, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6159:116:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_3db3df495834b8a5dacc61243eb5b9d04e4582608388cabb972a238d9e98e4fe", + "typeString": "literal_string \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_3db3df495834b8a5dacc61243eb5b9d04e4582608388cabb972a238d9e98e4fe", + "typeString": "literal_string \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 674, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "6085:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 681, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6085:200:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 682, + "nodeType": "ExpressionStatement", + "src": "6085:200:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 686, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 627, + "src": "6343:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 689, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 687, + "name": "now", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5258, + "src": "6353:3:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "argumentTypes": null, + "hexValue": "3836343030", + "id": 688, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6359:5:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_86400_by_1", + "typeString": "int_const 86400" + }, + "value": "86400" + }, + "src": "6353:11:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 690, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "6352:13:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 684, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "6314:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 685, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountSpendingPeriod", + "nodeType": "MemberAccess", + "referencedDeclaration": 4248, + "src": "6314:28:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 691, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6314:52:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20736574207370656e64696e6720706572696f6420666f72206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 692, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6378:109:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f8ea4dffeecef2c14480ec77d7f295f45e20ccebde68ef7164f5662998110ce0", + "typeString": "literal_string \"Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_f8ea4dffeecef2c14480ec77d7f295f45e20ccebde68ef7164f5662998110ce0", + "typeString": "literal_string \"Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 683, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "6295:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 693, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6295:202:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 694, + "nodeType": "ExpressionStatement", + "src": "6295:202:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 695, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6514:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 642, + "id": 696, + "nodeType": "Return", + "src": "6507:11:4" + } + ] + }, + "documentation": "@notice Approves account and deposits specified amount of given currency\n@param currency Currency symbol of amount to be deposited;\n@param account Ethereum address of account holder;\n@param amount Deposit amount for account holder;\n@param issuerFirm Name of the issuer firm with authority on account holder;\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 698, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 636, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 633, + "src": "5271:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 637, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "5283:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 638, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "5283:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 639, + "modifierName": { + "argumentTypes": null, + "id": 635, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 921, + "src": "5257:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "5257:37:4" + } + ], + "name": "approveKYCAndDeposit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 634, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 625, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 698, + "src": "5172:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 624, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "5172:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 627, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 698, + "src": "5189:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 626, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5189:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 629, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 698, + "src": "5206:11:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 628, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5206:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 631, + "name": "limit", + "nodeType": "VariableDeclaration", + "scope": 698, + "src": "5219:10:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 630, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5219:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 633, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 698, + "src": "5231:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 632, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "5231:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5171:78:4" + }, + "payable": false, + "returnParameters": { + "id": 642, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 641, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 698, + "src": "5304:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 640, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5304:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5303:14:4" + }, + "scope": 922, + "src": "5142:1383:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 725, + "nodeType": "Block", + "src": "7040:228:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 717, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 700, + "src": "7093:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 718, + "name": "limit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 702, + "src": "7102:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 715, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "7065:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 716, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountSpendingLimit", + "nodeType": "MemberAccess", + "referencedDeclaration": 4308, + "src": "7065:27:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 719, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7065:43:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420696e697469616c207370656e64696e67206c696d697420666f72206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 720, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7118:116:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_3db3df495834b8a5dacc61243eb5b9d04e4582608388cabb972a238d9e98e4fe", + "typeString": "literal_string \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_3db3df495834b8a5dacc61243eb5b9d04e4582608388cabb972a238d9e98e4fe", + "typeString": "literal_string \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 714, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "7048:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 721, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7048:194:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 722, + "nodeType": "ExpressionStatement", + "src": "7048:194:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 723, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7257:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 713, + "id": 724, + "nodeType": "Return", + "src": "7250:11:4" + } + ] + }, + "documentation": "@notice Sets the spending limit for a given account\n@param account Ethereum address of account holder;\n@param limit Spending limit amount for account;\n@param issuerFirm Name of the issuer firm with authority on account holder;\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 726, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 707, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 704, + "src": "6993:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 708, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "7005:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 709, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "7005:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 710, + "modifierName": { + "argumentTypes": null, + "id": 706, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 921, + "src": "6979:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "6979:37:4" + } + ], + "name": "setAccountSpendingLimit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 705, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 700, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 726, + "src": "6924:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 699, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6924:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 702, + "name": "limit", + "nodeType": "VariableDeclaration", + "scope": 726, + "src": "6941:10:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 701, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "6941:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 704, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 726, + "src": "6953:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 703, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "6953:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6923:48:4" + }, + "payable": false, + "returnParameters": { + "id": 713, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 712, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 726, + "src": "7026:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 711, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7026:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7025:14:4" + }, + "scope": 922, + "src": "6891:377:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 738, + "nodeType": "Block", + "src": "7620:62:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 735, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 728, + "src": "7667:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 733, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "7635:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 734, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getAccountSpendingRemaining", + "nodeType": "MemberAccess", + "referencedDeclaration": 4508, + "src": "7635:31:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 736, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7635:40:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 732, + "id": 737, + "nodeType": "Return", + "src": "7628:47:4" + } + ] + }, + "documentation": "@notice Returns the periodic remaining spending amount for an account\n@param account Ethereum address of account holder;\n@return {\"spendingRemaining\" : \"Returns the remaining spending amount for the account\"}", + "id": 739, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getAccountSpendingRemaining", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 729, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 728, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 739, + "src": "7558:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 727, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7558:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7557:17:4" + }, + "payable": false, + "returnParameters": { + "id": 732, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 731, + "name": "spendingRemaining", + "nodeType": "VariableDeclaration", + "scope": 739, + "src": "7596:22:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 730, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "7596:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7595:24:4" + }, + "scope": 922, + "src": "7521:161:4", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 751, + "nodeType": "Block", + "src": "8004:58:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 748, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 741, + "src": "8047:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 746, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "8019:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 747, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getAccountSpendingLimit", + "nodeType": "MemberAccess", + "referencedDeclaration": 4334, + "src": "8019:27:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 749, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8019:36:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 745, + "id": 750, + "nodeType": "Return", + "src": "8012:43:4" + } + ] + }, + "documentation": "@notice Return the spending limit for an account\n@param account Ethereum address of account holder\n@return {\"spendingLimit\" : \"Returns the remaining daily spending limit of the account\"}", + "id": 752, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getAccountSpendingLimit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 742, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 741, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 752, + "src": "7946:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 740, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7946:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7945:17:4" + }, + "payable": false, + "returnParameters": { + "id": 745, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 744, + "name": "spendingLimit", + "nodeType": "VariableDeclaration", + "scope": 752, + "src": "7984:18:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 743, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "7984:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7983:20:4" + }, + "scope": 922, + "src": "7913:149:4", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 779, + "nodeType": "Block", + "src": "8709:194:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 771, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 754, + "src": "8754:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 772, + "name": "bpsRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 756, + "src": "8764:7:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 769, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "8734:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 770, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFxUSDBPSRate", + "nodeType": "MemberAccess", + "referencedDeclaration": 4542, + "src": "8734:19:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,uint256) returns (bool)" + } + }, + "id": 773, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8734:38:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742046582055534420626173697320706f696e747320726174652e20506c6561736520656e73757265206973737565724669726d20697320617574686f72697a6564", + "id": 774, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8782:87:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_bb75f554926078abd19b386958c530b812c30dcf00b22d8f88e84ef51c06cb71", + "typeString": "literal_string \"Error: Unable to set FX USD basis points rate. Please ensure issuerFirm is authorized\"" + }, + "value": "Error: Unable to set FX USD basis points rate. Please ensure issuerFirm is authorized" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_bb75f554926078abd19b386958c530b812c30dcf00b22d8f88e84ef51c06cb71", + "typeString": "literal_string \"Error: Unable to set FX USD basis points rate. Please ensure issuerFirm is authorized\"" + } + ], + "id": 768, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "8717:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 775, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8717:160:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 776, + "nodeType": "ExpressionStatement", + "src": "8717:160:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 777, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8892:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 767, + "id": 778, + "nodeType": "Return", + "src": "8885:11:4" + } + ] + }, + "documentation": "@notice Set the foreign currency exchange rate to USD in basis points\n@dev NOTE: This value should always be relative to USD pair; e.g. JPY/USD, GBP/USD, etc.\n@param currency The TokenIO currency symbol (e.g. USDx, JPYx, GBPx)\n@param bpsRate Basis point rate of foreign currency exchange rate to USD\n@param issuerFirm Firm setting the foreign currency exchange\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 780, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 761, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 758, + "src": "8662:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 762, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "8674:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 763, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "8674:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 764, + "modifierName": { + "argumentTypes": null, + "id": 760, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 921, + "src": "8648:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "8648:37:4" + } + ], + "name": "setFxBpsRate", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 759, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 754, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 780, + "src": "8591:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 753, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "8591:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 756, + "name": "bpsRate", + "nodeType": "VariableDeclaration", + "scope": 780, + "src": "8608:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 755, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "8608:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 758, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 780, + "src": "8622:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 757, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "8622:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8590:50:4" + }, + "payable": false, + "returnParameters": { + "id": 767, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 766, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 780, + "src": "8695:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 765, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8695:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8694:14:4" + }, + "scope": 922, + "src": "8569:334:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 795, + "nodeType": "Block", + "src": "9304:60:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 791, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 782, + "src": "9338:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 792, + "name": "fxAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 784, + "src": "9348:8:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 789, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "9319:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 790, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFxUSDAmount", + "nodeType": "MemberAccess", + "referencedDeclaration": 4621, + "src": "9319:18:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,uint256) view returns (uint256)" + } + }, + "id": 793, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9319:38:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 788, + "id": 794, + "nodeType": "Return", + "src": "9312:45:4" + } + ] + }, + "documentation": "@notice Return the foreign currency USD exchanged amount\n@param currency The TokenIO currency symbol (e.g. USDx, JPYx, GBPx)\n@param fxAmount Amount of foreign currency to exchange into USD\n@return {\"usdAmount\" : \"Returns the foreign currency amount in USD\"}", + "id": 796, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getFxUSDAmount", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 785, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 782, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 796, + "src": "9235:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 781, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "9235:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 784, + "name": "fxAmount", + "nodeType": "VariableDeclaration", + "scope": 796, + "src": "9252:13:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 783, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "9252:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9234:32:4" + }, + "payable": false, + "returnParameters": { + "id": 788, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 787, + "name": "usdAmount", + "nodeType": "VariableDeclaration", + "scope": 796, + "src": "9288:14:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 786, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "9288:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9287:16:4" + }, + "scope": 922, + "src": "9211:153:4", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 823, + "nodeType": "Block", + "src": "9854:334:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 815, + "name": "originalAccount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 798, + "src": "9995:15:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 816, + "name": "updatedAccount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 800, + "src": "10012:14:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 813, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "9971:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 814, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setForwardedAccount", + "nodeType": "MemberAccess", + "referencedDeclaration": 2260, + "src": "9971:23:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,address) returns (bool)" + } + }, + "id": 817, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9971:56:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420666f72776172646564206164647265737320666f72206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 818, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10039:111:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_e6961bf7e2117bb8ea6b863d500e7333e3944d065ba6c8fa1114eacec3e93704", + "typeString": "literal_string \"Error: Unable to set forwarded address for account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set forwarded address for account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_e6961bf7e2117bb8ea6b863d500e7333e3944d065ba6c8fa1114eacec3e93704", + "typeString": "literal_string \"Error: Unable to set forwarded address for account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 812, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "9952:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 819, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9952:208:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 820, + "nodeType": "ExpressionStatement", + "src": "9952:208:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 821, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10177:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 811, + "id": 822, + "nodeType": "Return", + "src": "10170:11:4" + } + ] + }, + "documentation": "@notice Updates to new forwarded account\n@param originalAccount [address]\n@param updatedAccount [address]\n@param issuerFirm Name of the issuer firm with authority on account holder;\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 824, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 805, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 802, + "src": "9807:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 806, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "9819:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 807, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "9819:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 808, + "modifierName": { + "argumentTypes": null, + "id": 804, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 921, + "src": "9793:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "9793:37:4" + } + ], + "name": "approveForwardedAccount", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 803, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 798, + "name": "originalAccount", + "nodeType": "VariableDeclaration", + "scope": 824, + "src": "9718:23:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 797, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9718:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 800, + "name": "updatedAccount", + "nodeType": "VariableDeclaration", + "scope": 824, + "src": "9743:22:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 799, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9743:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 802, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 824, + "src": "9767:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 801, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "9767:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9717:68:4" + }, + "payable": false, + "returnParameters": { + "id": 811, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 810, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 824, + "src": "9840:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 809, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "9840:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9839:14:4" + }, + "scope": 922, + "src": "9685:503:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 863, + "nodeType": "Block", + "src": "10708:420:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 845, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 828, + "src": "10755:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 843, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "10737:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 844, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "verifyAccount", + "nodeType": "MemberAccess", + "referencedDeclaration": 3062, + "src": "10737:17:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bool)" + } + }, + "id": 846, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10737:26:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a204163636f756e74206973206e6f7420766572696669656421", + "id": 847, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10775:33:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_a5e279d14000afe880d344db24ac101f5a640f2f3904eb122eb002d05df8832c", + "typeString": "literal_string \"Error: Account is not verified!\"" + }, + "value": "Error: Account is not verified!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_a5e279d14000afe880d344db24ac101f5a640f2f3904eb122eb002d05df8832c", + "typeString": "literal_string \"Error: Account is not verified!\"" + } + ], + "id": 842, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "10718:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 848, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10718:100:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 849, + "nodeType": "ExpressionStatement", + "src": "10718:100:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 853, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 826, + "src": "10949:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 854, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 828, + "src": "10959:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 855, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 830, + "src": "10968:6:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 856, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 832, + "src": "10976:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 851, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "10937:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 852, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "deposit", + "nodeType": "MemberAccess", + "referencedDeclaration": 3635, + "src": "10937:11:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,uint256,string memory) returns (bool)" + } + }, + "id": 857, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10937:50:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f206465706f7369742066756e64732e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 858, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10999:91:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_05597560a0a09591bd512c7af73fab8ea943a53c0f5353c4fe6fe2cc72d5d3f2", + "typeString": "literal_string \"Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_05597560a0a09591bd512c7af73fab8ea943a53c0f5353c4fe6fe2cc72d5d3f2", + "typeString": "literal_string \"Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 850, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "10918:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 859, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10918:182:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 860, + "nodeType": "ExpressionStatement", + "src": "10918:182:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 861, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11117:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 841, + "id": 862, + "nodeType": "Return", + "src": "11110:11:4" + } + ] + }, + "documentation": "@notice Issues a specified account to recipient account of a given currency\n@param currency [string] currency symbol\n@param amount [uint] issuance amount\n@param issuerFirm Name of the issuer firm with authority on account holder;\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 864, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 835, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 832, + "src": "10661:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 836, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "10673:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 837, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "10673:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 838, + "modifierName": { + "argumentTypes": null, + "id": 834, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 921, + "src": "10647:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "10647:37:4" + } + ], + "name": "deposit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 833, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 826, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 864, + "src": "10574:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 825, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "10574:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 828, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 864, + "src": "10591:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 827, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10591:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 830, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 864, + "src": "10608:11:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 829, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "10608:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 832, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 864, + "src": "10621:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 831, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "10621:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "10573:66:4" + }, + "payable": false, + "returnParameters": { + "id": 841, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 840, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 864, + "src": "10694:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 839, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "10694:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "10693:14:4" + }, + "scope": 922, + "src": "10557:571:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 903, + "nodeType": "Block", + "src": "11680:462:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 885, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 868, + "src": "11727:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 883, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "11709:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 884, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "verifyAccount", + "nodeType": "MemberAccess", + "referencedDeclaration": 3062, + "src": "11709:17:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bool)" + } + }, + "id": 886, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11709:26:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a204163636f756e74206973206e6f7420766572696669656421", + "id": 887, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11747:33:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_a5e279d14000afe880d344db24ac101f5a640f2f3904eb122eb002d05df8832c", + "typeString": "literal_string \"Error: Account is not verified!\"" + }, + "value": "Error: Account is not verified!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_a5e279d14000afe880d344db24ac101f5a640f2f3904eb122eb002d05df8832c", + "typeString": "literal_string \"Error: Account is not verified!\"" + } + ], + "id": 882, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "11690:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 888, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11690:100:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 889, + "nodeType": "ExpressionStatement", + "src": "11690:100:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 893, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 866, + "src": "11918:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 894, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 868, + "src": "11928:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 895, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 870, + "src": "11937:6:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 896, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 872, + "src": "11945:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 891, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "11905:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 892, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "withdraw", + "nodeType": "MemberAccess", + "referencedDeclaration": 3746, + "src": "11905:12:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,uint256,string memory) returns (bool)" + } + }, + "id": 897, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11905:51:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2077697468647261772066756e64732e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f7269747920617265207265676973746572656420616e642068617665206973737565642066756e647320746861742063616e2062652077697468647261776e", + "id": 898, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11968:136:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d6e626bbbdfa2315c15e2b539714496598c6d0294b7989222c4553c1a4a17622", + "typeString": "literal_string \"Error: Unable to withdraw funds. Please check issuerFirm and firm authority are registered and have issued funds that can be withdrawn\"" + }, + "value": "Error: Unable to withdraw funds. Please check issuerFirm and firm authority are registered and have issued funds that can be withdrawn" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d6e626bbbdfa2315c15e2b539714496598c6d0294b7989222c4553c1a4a17622", + "typeString": "literal_string \"Error: Unable to withdraw funds. Please check issuerFirm and firm authority are registered and have issued funds that can be withdrawn\"" + } + ], + "id": 890, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "11886:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 899, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11886:228:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 900, + "nodeType": "ExpressionStatement", + "src": "11886:228:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 901, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12131:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 881, + "id": 902, + "nodeType": "Return", + "src": "12124:11:4" + } + ] + }, + "documentation": "@notice Withdraws a specified amount of tokens of a given currency\n@param currency Currency symbol\n@param account Ethereum address of account holder\n@param amount Issuance amount\n@param issuerFirm Name of the issuer firm with authority on account holder\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 904, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 875, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 872, + "src": "11633:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 876, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "11645:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 877, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "11645:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 878, + "modifierName": { + "argumentTypes": null, + "id": 874, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 921, + "src": "11619:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "11619:37:4" + } + ], + "name": "withdraw", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 873, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 866, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 904, + "src": "11546:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 865, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "11546:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 868, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 904, + "src": "11563:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 867, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11563:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 870, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 904, + "src": "11580:11:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 869, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "11580:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 872, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 904, + "src": "11593:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 871, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "11593:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "11545:66:4" + }, + "payable": false, + "returnParameters": { + "id": 881, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 880, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 904, + "src": "11666:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 879, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "11666:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "11665:14:4" + }, + "scope": 922, + "src": "11528:614:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 920, + "nodeType": "Block", + "src": "12409:254:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 913, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 906, + "src": "12543:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 914, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 908, + "src": "12553:9:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 911, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "12520:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 912, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "isRegisteredToFirm", + "nodeType": "MemberAccess", + "referencedDeclaration": 3932, + "src": "12520:22:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address) view returns (bool)" + } + }, + "id": 915, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12520:43:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a206973737565724669726d20616e642f6f72206669726d20617574686f7269747920617265206e6f742072656769737465726564", + "id": 916, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12575:60:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_462b4c77bf54838ec38a464948b1a941796aa7d982a63221057f242b5bb9741d", + "typeString": "literal_string \"Error: issuerFirm and/or firm authority are not registered\"" + }, + "value": "Error: issuerFirm and/or firm authority are not registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_462b4c77bf54838ec38a464948b1a941796aa7d982a63221057f242b5bb9741d", + "typeString": "literal_string \"Error: issuerFirm and/or firm authority are not registered\"" + } + ], + "id": 910, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "12501:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 917, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12501:144:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 918, + "nodeType": "ExpressionStatement", + "src": "12501:144:4" + }, + { + "id": 919, + "nodeType": "PlaceholderStatement", + "src": "12655:1:4" + } + ] + }, + "documentation": "@notice Ensure only authorized currency firms and authorities can modify protected methods\n@dev authority must be registered to an authorized firm to use protected methods", + "id": 921, + "name": "onlyAuthority", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 909, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 906, + "name": "firmName", + "nodeType": "VariableDeclaration", + "scope": 921, + "src": "12373:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 905, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "12373:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 908, + "name": "authority", + "nodeType": "VariableDeclaration", + "scope": 921, + "src": "12390:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 907, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12390:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "12372:36:4" + }, + "src": "12350:313:4", + "visibility": "internal" + } + ], + "scope": 923, + "src": "889:11777:4" + } + ], + "src": "0:12667:4" + }, + "compiler": { + "name": "solc", + "version": "0.4.24+commit.e67f0147.Emscripten.clang" + }, + "networks": { + "1": { + "events": {}, + "links": {}, + "address": "0x768bcf023aa517054a0349939069802a006ce350", + "transactionHash": "0x8e118b66ccaf743981c281fd7ba96ccee443d525ef2f0d0c3d308bc2583a10e1" + } + }, + "schemaVersion": "2.0.1", + "updatedAt": "2018-09-18T18:57:45.604Z" +} \ No newline at end of file diff --git a/deployed/mainnet-deprecated/TokenIOERC20.json b/deployed/mainnet-deprecated/TokenIOERC20.json new file mode 100644 index 0000000..028fe13 --- /dev/null +++ b/deployed/mainnet-deprecated/TokenIOERC20.json @@ -0,0 +1,12502 @@ +{ + "contractName": "TokenIOERC20", + "abi": [ + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "allowOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "removeOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "", + "type": "address" + } + ], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "name": "_storageContract", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "AllowOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "RevokeOwnership", + "type": "event" + }, + { + "constant": false, + "inputs": [ + { + "name": "_name", + "type": "string" + }, + { + "name": "_symbol", + "type": "string" + }, + { + "name": "_tla", + "type": "string" + }, + { + "name": "_version", + "type": "string" + }, + { + "name": "_decimals", + "type": "uint256" + }, + { + "name": "_feeContract", + "type": "address" + }, + { + "name": "_fxUSDBPSRate", + "type": "uint256" + } + ], + "name": "setParams", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "name", + "outputs": [ + { + "name": "_name", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "symbol", + "outputs": [ + { + "name": "_symbol", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "tla", + "outputs": [ + { + "name": "_tla", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "version", + "outputs": [ + { + "name": "_version", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "decimals", + "outputs": [ + { + "name": "_decimals", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "name": "supply", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "account", + "type": "address" + }, + { + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "name": "amount", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "name": "balance", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getFeeParams", + "outputs": [ + { + "name": "bps", + "type": "uint256" + }, + { + "name": "min", + "type": "uint256" + }, + { + "name": "max", + "type": "uint256" + }, + { + "name": "flat", + "type": "uint256" + }, + { + "name": "feeMsg", + "type": "bytes" + }, + { + "name": "feeAccount", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "amount", + "type": "uint256" + } + ], + "name": "calculateFees", + "outputs": [ + { + "name": "fees", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "to", + "type": "address" + }, + { + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "from", + "type": "address" + }, + { + "name": "to", + "type": "address" + }, + { + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "spender", + "type": "address" + }, + { + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "deprecateInterface", + "outputs": [ + { + "name": "deprecated", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051602080615539833981016040908152905133600090815260208190529182208054600160ff19918216811783558054600160a060020a031916600160a060020a0390941693909317835581541690911790556154c390819061007690396000f3006080604052600436106100ed5763ffffffff60e060020a60003504166306fdde0381146100f2578063095ea7b31461017c57806318160ddd146101b457806323b872dd146101db578063313ce567146102055780634bbc142c1461021a57806352238fdd1461023b57806354fd4d5014610253578063666a342714610268578063666e1b39146102895780636b0235a0146102aa57806370a08231146102bf57806395d89b41146102e0578063a9059cbb146102f5578063be6fc18114610319578063dd62ed3e146103db578063e052f0c814610402578063ebe6ba071461052a578063f2fde38b1461053f575b600080fd5b3480156100fe57600080fd5b50610107610560565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610141578181015183820152602001610129565b50505050905090810190601f16801561016e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561018857600080fd5b506101a0600160a060020a0360043516602435610578565b604080519115158252519081900360200190f35b3480156101c057600080fd5b506101c96106e9565b60408051918252519081900360200190f35b3480156101e757600080fd5b506101a0600160a060020a036004358116906024351660443561070d565b34801561021157600080fd5b506101c9610842565b34801561022657600080fd5b506101a0600160a060020a0360043516610866565b34801561024757600080fd5b506101c9600435610922565b34801561025f57600080fd5b5061010761094d565b34801561027457600080fd5b506101a0600160a060020a0360043516610960565b34801561029557600080fd5b506101a0600160a060020a0360043516610a19565b3480156102b657600080fd5b50610107610a2e565b3480156102cb57600080fd5b506101c9600160a060020a0360043516610a41565b3480156102ec57600080fd5b50610107610a66565b34801561030157600080fd5b506101a0600160a060020a0360043516602435610a79565b34801561032557600080fd5b5061032e610bde565b604051808781526020018681526020018581526020018481526020018060200183600160a060020a0316600160a060020a03168152602001828103825284818151815260200191508051906020019080838360005b8381101561039b578181015183820152602001610383565b50505050905090810190601f1680156103c85780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b3480156103e757600080fd5b506101c9600160a060020a0360043581169060243516610c63565b34801561040e57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101a094369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375094975050843595505050506020820135600160a060020a031691604001359050610c90565b34801561053657600080fd5b506101a061110c565b34801561054b57600080fd5b506101a0600160a060020a0360043516611209565b606061057360013063ffffffff61134316565b905090565b600061058b60013063ffffffff6114f816565b15610606576040805160e560020a62461bcd02815260206004820152603e60248201527f4572726f723a20436f6e747261637420686173206265656e206465707265636160448201527f7465642c2063616e6e6f7420706572666f726d206f7065726174696f6e210000606482015290519081900360840190fd5b6106186001848463ffffffff61164b16565b15156106e0576040805160e560020a62461bcd02815260206004820152607560248201527f4572726f723a20556e61626c6520746f20617070726f766520616c6c6f77616e60448201527f636520666f72207370656e6465722e20506c6561736520656e7375726520737060648201527f656e646572206973206e6f74206e756c6c20616e6420646f6573206e6f74206860848201527f61766520612066726f7a656e2062616c616e63652e000000000000000000000060a482015290519081900360c40190fd5b50600192915050565b60006105736106ff60013063ffffffff611d1c16565b60019063ffffffff611dae16565b600061072060013063ffffffff6114f816565b1561079b576040805160e560020a62461bcd02815260206004820152603e60248201527f4572726f723a20436f6e747261637420686173206265656e206465707265636160448201527f7465642c2063616e6e6f7420706572666f726d206f7065726174696f6e210000606482015290519081900360840190fd5b6107f86107af60013063ffffffff611d1c16565b60408051808201909152600381527f307830000000000000000000000000000000000000000000000000000000000060208201526001919087908790879063ffffffff611ee616565b15156108385760405160e560020a62461bcd0281526004018080602001828103825260828152602001806153766082913960a00191505060405180910390fd5b5060019392505050565b600061057361085860013063ffffffff611d1c16565b60019063ffffffff6121ce16565b3360009081526020819052604081205460ff1615156108d1576040805160e560020a62461bcd02815260206004820152603960248201526000805160206154788339815191526044820152600080516020615336833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b600061094761093860013063ffffffff61222b16565b6001908463ffffffff6123a616565b92915050565b606061057360013063ffffffff61289716565b3360009081526020819052604081205460ff1615156109cb576040805160e560020a62461bcd02815260206004820152603960248201526000805160206154788339815191526044820152600080516020615336833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b606061057360013063ffffffff61292916565b6000610947610a5760013063ffffffff611d1c16565b6001908463ffffffff6129bb16565b606061057360013063ffffffff611d1c16565b6000610a8c60013063ffffffff6114f816565b15610b07576040805160e560020a62461bcd02815260206004820152603e60248201527f4572726f723a20436f6e747261637420686173206265656e206465707265636160448201527f7465642c2063616e6e6f7420706572666f726d206f7065726174696f6e210000606482015290519081900360840190fd5b610b62610b1b60013063ffffffff611d1c16565b60408051808201909152600381527f30783000000000000000000000000000000000000000000000000000000000006020820152600191908690869063ffffffff612b3f16565b15156106e0576040805160e560020a62461bcd02815260206004820152603e60248201527f4572726f723a20556e61626c6520746f207472616e736665722066756e64732e60448201527f20506c6561736520636865636b20796f757220706172616d65746572732e0000606482015290519081900360840190fd5b600080808060608180610bf860013063ffffffff61222b16565b9050610c0b60018263ffffffff612e0416565b610c1c60018363ffffffff612e9516565b610c2d60018463ffffffff612f2616565b610c3e60018563ffffffff612fb716565b610c4f60018663ffffffff61304816565b939b929a5090985096509094509092509050565b6000610c89610c7960013063ffffffff611d1c16565b600190858563ffffffff61316b16565b9392505050565b3360009081526020819052604081205460ff161515610cfb576040805160e560020a62461bcd02815260206004820152603960248201526000805160206154788339815191526044820152600080516020615336833981519152606482015290519081900360840190fd5b610d0c60018963ffffffff61332b16565b1515610d88576040805160e560020a62461bcd02815260206004820152603860248201527f4572726f723a20556e61626c6520746f2073657420746f6b656e206e616d652e60448201527f20506c6561736520636865636b20617267756d656e74732e0000000000000000606482015290519081900360840190fd5b610d9960018863ffffffff61358416565b1515610e15576040805160e560020a62461bcd02815260206004820152603a60248201527f4572726f723a20556e61626c6520746f2073657420746f6b656e2073796d626f60448201527f6c2e20506c6561736520636865636b20617267756d656e74732e000000000000606482015290519081900360840190fd5b610e2660018763ffffffff6135ff16565b1515610ea2576040805160e560020a62461bcd02815260206004820152603760248201527f4572726f723a20556e61626c6520746f2073657420746f6b656e20544c412e2060448201527f506c6561736520636865636b20617267756d656e74732e000000000000000000606482015290519081900360840190fd5b610eb360018663ffffffff61367d16565b1515610f2f576040805160e560020a62461bcd02815260206004820152603b60248201527f4572726f723a20556e61626c6520746f2073657420746f6b656e20766572736960448201527f6f6e2e20506c6561736520636865636b20617267756d656e74732e0000000000606482015290519081900360840190fd5b610f416001888663ffffffff6136fb16565b1515610fbd576040805160e560020a62461bcd02815260206004820152603c60248201527f4572726f723a20556e61626c6520746f2073657420746f6b656e20646563696d60448201527f616c732e20506c6561736520636865636b20617267756d656e74732e00000000606482015290519081900360840190fd5b610fce60018463ffffffff61392716565b151561104a576040805160e560020a62461bcd02815260206004820152603a60248201527f4572726f723a20556e61626c6520746f207365742066656520636f6e7472616360448201527f742e20506c6561736520636865636b20617267756d656e74732e000000000000606482015290519081900360840190fd5b61105c6001888463ffffffff613a3c16565b15156110fe576040805160e560020a62461bcd02815260206004820152604660248201527f4572726f723a20556e61626c6520746f2073657420667820555344206261736960448201527f7320706f696e747320726174652e20506c6561736520636865636b206172677560648201527f6d656e74732e0000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b506001979650505050505050565b3360009081526020819052604081205460ff161515611177576040805160e560020a62461bcd02815260206004820152603960248201526000805160206154788339815191526044820152600080516020615336833981519152606482015290519081900360840190fd5b61118860013063ffffffff613c2316565b1515611203576040805160e560020a62461bcd028152602060048201526024808201527f4572726f723a20556e61626c6520746f2064657072656361746520636f6e747260448201527f6163742100000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50600190565b3360009081526020819052604081205460ff161515611274576040805160e560020a62461bcd02815260206004820152603960248201526000805160206154788339815191526044820152600080516020615336833981519152606482015290519081900360840190fd5b600160a060020a03821615156112d4576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b606060008260405160200180807f746f6b656e2e6e616d6500000000000000000000000000000000000000000000815250600a0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106113d65780518252601f1990920191602091820191016113b7565b5181516020939093036101000a60001901801990911692169190911790526040805191909301819003812089547f986e791a000000000000000000000000000000000000000000000000000000008352600483018290529351909650600160a060020a03909316945063986e791a9350602480820193600093509182900301818387803b15801561146657600080fd5b505af115801561147a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156114a357600080fd5b8101908080516401000000008111156114bb57600080fd5b820160208101848111156114ce57600080fd5b81516401000000008111828201871017156114e857600080fd5b50909550505050505b5092915050565b6000808260405160200180807f6465706372656361746564000000000000000000000000000000000000000000815250600b0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b6020831061158a5780518252601f19909201916020918201910161156b565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547f7ae1cfca000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a039094169550637ae1cfca945060248083019491935090918290030181600087803b15801561161757600080fd5b505af115801561162b573d6000803e3d6000fd5b505050506040513d602081101561164157600080fd5b5051949350505050565b600060608180600160a060020a03861615156116d7576040805160e560020a62461bcd02815260206004820152602860248201527f4572726f723a20607370656e6465726020616464726573732063616e6e6f742060448201527f6265206e756c6c2e000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6116e18730611d1c565b92506116f787846116f28a8a613dc3565b613f31565b15611772576040805160e560020a62461bcd02815260206004820152603660248201527f4572726f723a205370656e646572206d757374206e6f7420686176652061206660448201527f726f7a656e2062616c616e6365206469726563746c7900000000000000000000606482015290519081900360840190fd5b8261177d8833613dc3565b6117878989613dc3565b60405160200180807f746f6b656e2e616c6c6f77616e63650000000000000000000000000000000000815250600f0184805190602001908083835b602083106117e15780518252601f1990920191602091820191016117c2565b6001836020036101000a03801982511681845116808217855250505050505090500183600160a060020a0316600160a060020a0316606060020a02815260140182600160a060020a0316600160a060020a0316606060020a02815260140193505050506040516020818303038152906040526040518082805190602001908083835b602083106118825780518252601f199092019160209182019101611863565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209150826118bc8833613dc3565b6040516020018080600080516020615356833981519152815250600d0183805190602001908083835b602083106119045780518252601f1990920191602091820191016118e5565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106119865780518252601f199092019160209182019101611967565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208d5460e060020a63bd02d0f5028452600484018a90529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b1580156119fd57600080fd5b505af1158015611a11573d6000803e3d6000fd5b505050506040513d6020811015611a2757600080fd5b50511580611a33575084155b1515611ad5576040805160e560020a62461bcd02815260206004820152605260248201527f4572726f723a20416c6c6f77616e6365206d757374206265207a65726f20283060448201527f29206265666f72652073657474696e6720616e207570646174656420616c6c6f60648201527f77616e636520666f72207370656e6465722e0000000000000000000000000000608482015290519081900360a40190fd5b86546040805160e060020a63bd02d0f50281526004810184905290518792600160a060020a03169163bd02d0f59160248083019260209291908290030181600087803b158015611b2457600080fd5b505af1158015611b38573d6000803e3d6000fd5b505050506040513d6020811015611b4e57600080fd5b50511015611bcc576040805160e560020a62461bcd02815260206004820152603860248201527f4572726f723a20416c6c6f77616e63652063616e6e6f7420657863656564206d60448201527f73672e73656e64657220746f6b656e2062616c616e63652e0000000000000000606482015290519081900360840190fd5b86546040805160e160020a637152429d02815260048101859052602481018890529051600160a060020a039092169163e2a4853a916044808201926020929091908290030181600087803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b505050506040513d6020811015611c4d57600080fd5b50511515611ccf576040805160e560020a62461bcd0281526020600482015260696024820152600080516020615438833981519152604482015260008051602061541883398151915260648201526000805160206153f8833981519152608482015260008051602061545883398151915260a482015290519081900360c40190fd5b604080518681529051600160a060020a0388169133917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259181900360200190a35060019695505050505050565b606060008260405160200180807f746f6b656e2e73796d626f6c0000000000000000000000000000000000000000815250600c0182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106113d65780518252601f1990920191602091820191016113b7565b6000808260405160200180807f746f6b656e2e737570706c790000000000000000000000000000000000000000815250600c0182805190602001908083835b60208310611e0c5780518252601f199092019160209182019101611ded565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310611e6f5780518252601f199092019160209182019101611e50565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b15801561161757600080fd5b60008080600160a060020a0386161515611f70576040805160e560020a62461bcd02815260206004820152602560248201527f4572726f723a2060746f602061646472657373206d757374206e6f742062652060448201527f6e756c6c2e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b611f7a893061222b565b9150611f878983876123a6565b9050611f9e8988611f998c8c8a613f98565b614030565b151561201a576040805160e560020a62461bcd02815260206004820152602d60248201527f4572726f723a20556e61626c6520746f20736574206163636f756e742073706560448201527f6e64696e6720616d6f756e742e00000000000000000000000000000000000000606482015290519081900360840190fd5b61202889898989898961435e565b15156120a4576040805160e560020a62461bcd02815260206004820152602b60248201527f4572726f723a20556e61626c6520746f207472616e736665722066756e64732060448201527f746f206163636f756e742e000000000000000000000000000000000000000000606482015290519081900360840190fd5b6120bb89898985856120b68f89613048565b61435e565b1515612137576040805160e560020a62461bcd02815260206004820152602f60248201527f4572726f723a20556e61626c6520746f207472616e736665722066656573207460448201527f6f2066656520636f6e74726163742e0000000000000000000000000000000000606482015290519081900360840190fd5b61214389898988614a26565b15156121bf576040805160e560020a62461bcd02815260206004820152602e60248201527f4572726f723a20556e61626c6520746f2075706461746520616c6c6f77616e6360448201527f6520666f72207370656e6465722e000000000000000000000000000000000000606482015290519081900360840190fd5b50600198975050505050505050565b6000808260405160200180807f746f6b656e2e646563696d616c73000000000000000000000000000000000000815250600e01828051906020019080838360208310611e0c5780518252601f199092019160209182019101611ded565b60008060008360405160200180807f6665652e6163636f756e74000000000000000000000000000000000000000000815250600b0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106122bf5780518252601f1990920191602091820191016122a0565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b15801561234c57600080fd5b505af1158015612360573d6000803e3d6000fd5b505050506040513d602081101561237657600080fd5b50519050600160a060020a038116151561239a5761239385614cb0565b925061239e565b8092505b505092915050565b8254604080517f6665652e6d617800000000000000000000000000000000000000000000000000602080830191909152600160a060020a03868116606060020a0260278401528351808403601b018152603b9093019384905282516000958695869586958695869594169363bd02d0f593918291908401908083835b602083106124415780518252601f199092019160209182019101612422565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b1580156124a257600080fd5b505af11580156124b6573d6000803e3d6000fd5b505050506040513d60208110156124cc57600080fd5b50518954604080517f6665652e6d696e00000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260278401528351808403601b018152603b909301938490528251959a509093169363bd02d0f5939192918291908401908083835b602083106125625780518252601f199092019160209182019101612543565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b1580156125c357600080fd5b505af11580156125d7573d6000803e3d6000fd5b505050506040513d60208110156125ed57600080fd5b50518954604080517f6665652e62707300000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260278401528351808403601b018152603b9093019384905282519599509093169363bd02d0f5939192918291908401908083835b602083106126835780518252601f199092019160209182019101612664565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b1580156126e457600080fd5b505af11580156126f8573d6000803e3d6000fd5b505050506040513d602081101561270e57600080fd5b50518954604080517f6665652e666c6174000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260288401528351808403601c018152603c9093019384905282519598509093169363bd02d0f5939192918291908401908083835b602083106127a45780518252601f199092019160209182019101612785565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b15801561280557600080fd5b505af1158015612819573d6000803e3d6000fd5b505050506040513d602081101561282f57600080fd5b505191506128658261285961271061284d8b8863ffffffff614de216565b9063ffffffff614e8116565b9063ffffffff614e9816565b9050848111156128775784955061288b565b838110156128875783955061288b565b8095505b50505050509392505050565b606060008260405160200180807f746f6b656e2e76657273696f6e00000000000000000000000000000000000000815250600d0182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106113d65780518252601f1990920191602091820191016113b7565b606060008260405160200180807f746f6b656e2e746c61000000000000000000000000000000000000000000000081525060090182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106113d65780518252601f1990920191602091820191016113b7565b600080836129c98685613dc3565b6040516020018080600080516020615356833981519152815250600d0183805190602001908083835b60208310612a115780518252601f1990920191602091820191016129f2565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310612a935780518252601f199092019160209182019101612a74565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b158015612b0a57600080fd5b505af1158015612b1e573d6000803e3d6000fd5b505050506040513d6020811015612b3457600080fd5b505195945050505050565b60008080600160a060020a0386161515612bc9576040805160e560020a62461bcd02815260206004820152602360248201527f4572726f723a2060746f6020616464726573732063616e6e6f74206265206e7560448201527f6c6c2e0000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008511612c47576040805160e560020a62461bcd02815260206004820152602960248201527f4572726f723a2060616d6f756e7460206d75737420626520677265617465722060448201527f7468616e207a65726f0000000000000000000000000000000000000000000000606482015290519081900360840190fd5b612c51883061222b565b9150612c5e8883876123a6565b9050612c708833611f998b8b8a613f98565b1515612cec576040805160e560020a62461bcd02815260206004820152603160248201527f4572726f723a20556e61626c6520746f20736574207370656e64696e6720616d60448201527f6f756e7420666f72206163636f756e742e000000000000000000000000000000606482015290519081900360840190fd5b612cfa88883389898961435e565b1515612d76576040805160e560020a62461bcd02815260206004820152602b60248201527f4572726f723a20556e61626c6520746f207472616e736665722066756e64732060448201527f746f206163636f756e742e000000000000000000000000000000000000000000606482015290519081900360840190fd5b612d8888883385856120b68e89613048565b15156110fe576040805160e560020a62461bcd02815260206004820152602f60248201527f4572726f723a20556e61626c6520746f207472616e736665722066656573207460448201527f6f2066656520636f6e74726163742e0000000000000000000000000000000000606482015290519081900360840190fd5b6000808260405160200180807f6665652e6270730000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b6000808260405160200180807f6665652e6d696e0000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b6000808260405160200180807f6665652e6d61780000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b6000808260405160200180807f6665652e666c617400000000000000000000000000000000000000000000000081525060080182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b606060008260405160200180807f6665652e6d73670000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106130db5780518252601f1990920191602091820191016130bc565b5181516020939093036101000a60001901801990911692169190911790526040805191909301819003812089547fc031a180000000000000000000000000000000000000000000000000000000008352600483018290529351909650600160a060020a03909316945063c031a1809350602480820193600093509182900301818387803b15801561146657600080fd5b600080846131798786613dc3565b6131838886613dc3565b60405160200180807f746f6b656e2e616c6c6f77616e63650000000000000000000000000000000000815250600f0184805190602001908083835b602083106131dd5780518252601f1990920191602091820191016131be565b6001836020036101000a03801982511681845116808217855250505050505090500183600160a060020a0316600160a060020a0316606060020a02815260140182600160a060020a0316600160a060020a0316606060020a02815260140193505050506040516020818303038152906040526040518082805190602001908083835b6020831061327e5780518252601f19909201916020918201910161325f565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208c5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b1580156132f557600080fd5b505af1158015613309573d6000803e3d6000fd5b505050506040513d602081101561331f57600080fd5b50519695505050505050565b604080517f746f6b656e2e6e616d6500000000000000000000000000000000000000000000602080830191909152606060020a3002602a8301528251601e818403018152603e909201928390528151600093849392909182918401908083835b602083106133aa5780518252601f19909201916020918201910161338b565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547f6e89955000000000000000000000000000000000000000000000000000000000845260048401828152602485019687528b5160448601528b51929950600160a060020a039091169750636e899550965088958b9550909390926064909101919085019080838360005b8381101561345557818101518382015260200161343d565b50505050905090810190601f1680156134825780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b1580156134a257600080fd5b505af11580156134b6573d6000803e3d6000fd5b505050506040513d60208110156134cc57600080fd5b50511515610838576040805160e560020a62461bcd028152602060048201526068602482015260008051602061543883398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b604080517f746f6b656e2e73796d626f6c0000000000000000000000000000000000000000602080830191909152606060020a3002602c83015282518083038201815291830192839052815160009384939290918291840190808383602083106133aa5780518252601f19909201916020918201910161338b565b604080517f746f6b656e2e746c610000000000000000000000000000000000000000000000602080830191909152606060020a300260298301528251601d818403018152603d90920192839052815160009384939290918291840190808383602083106133aa5780518252601f19909201916020918201910161338b565b604080517f746f6b656e2e76657273696f6e00000000000000000000000000000000000000602080830191909152606060020a3002602d83015282516021818403018152604190920192839052815160009384939290918291840190808383602083106133aa5780518252601f19909201916020918201910161338b565b6000808360405160200180807f746f6b656e2e646563696d616c73000000000000000000000000000000000000815250600e0182805190602001908083835b602083106137595780518252601f19909201916020918201910161373a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083106137bc5780518252601f19909201916020918201910161379d565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b5460e160020a637152429d02845260048401829052602484018b90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b15801561383a57600080fd5b505af115801561384e573d6000803e3d6000fd5b505050506040513d602081101561386457600080fd5b5051151561391c576040805160e560020a62461bcd028152602060048201526068602482015260008051602061543883398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b506001949350505050565b604080517f6665652e6163636f756e74000000000000000000000000000000000000000000602080830191909152606060020a3002602b8301528251601f818403018152603f909201928390528151600093849392909182918401908083835b602083106139a65780518252601f199092019160209182019101613987565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547fca446dd900000000000000000000000000000000000000000000000000000000845260048401829052600160a060020a038b81166024860152955191985094909416955063ca446dd9945060448083019491935090918290030181600087803b1580156134a257600080fd5b6000808360405160200180807f66782e7573642e72617465000000000000000000000000000000000000000000815250600b0182805190602001908083835b60208310613a9a5780518252601f199092019160209182019101613a7b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310613afd5780518252601f199092019160209182019101613ade565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b5460e160020a637152429d02845260048401829052602484018b90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b158015613b7b57600080fd5b505af1158015613b8f573d6000803e3d6000fd5b505050506040513d6020811015613ba557600080fd5b5051151561391c576040805160e560020a62461bcd02815260206004820152603060248201527f4572726f723a20556e61626c6520746f20757064617465206163636f756e742060448201527f7370656e64696e6720706572696f642e00000000000000000000000000000000606482015290519081900360840190fd5b600080600160a060020a0383161515613cac576040805160e560020a62461bcd02815260206004820152602760248201527f4572726f723a2063616e6e6f74206465707265636174652061206e756c6c206160448201527f6464726573732e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b604080517f6465706372656361746564000000000000000000000000000000000000000000602080830191909152606060020a600160a060020a03871602602b8301528251601f818403018152603f90920192839052815191929182918401908083835b60208310613d2f5780518252601f199092019160209182019101613d10565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547fabfdcced00000000000000000000000000000000000000000000000000000000845260048401829052600160248501529451909750600160a060020a03909416955063abfdcced945060448083019491935090918290030181600087803b1580156134a257600080fd5b60008060008360405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310613e575780518252601f199092019160209182019101613e38565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015613ee457600080fd5b505af1158015613ef8573d6000803e3d6000fd5b505050506040513d6020811015613f0e57600080fd5b50519050600160a060020a03811615613f295780925061239e565b83925061239e565b60008083613f3f8685613dc3565b60405160200180807f746f6b656e2e66726f7a656e0000000000000000000000000000000000000000815250600c01838051906020019080838360208310612a115780518252601f1990920191602091820191016129f2565b600080600080613fdd876040805190810160405280600481526020017f55534478000000000000000000000000000000000000000000000000000000008152506121ce565b9250613fe987876121ce565b915061402582600a0a61284d85600a0a61401961271061284d61400c8e8e614f1b565b8c9063ffffffff614de216565b9063ffffffff614de216565b979650505050505050565b600080600061403f8686614f78565b15156140bb576040805160e560020a62461bcd02815260206004820152603060248201527f4572726f723a20556e61626c6520746f20757064617465206163636f756e742060448201527f7370656e64696e6720706572696f642e00000000000000000000000000000000606482015290519081900360840190fd5b6140c984612859888861505b565b9150816140d687876150fd565b1015614152576040805160e560020a62461bcd02815260206004820152603360248201527f4572726f723a204163636f756e742063616e6e6f74206578636565642069747360448201527f206461696c79207370656e64206c696d69742e00000000000000000000000000606482015290519081900360840190fd5b8461415d878761518e565b60405160200180807f6163636f756e742e7370656e64696e672e616d6f756e7400000000000000000081525060170183600160a060020a0316600160a060020a0316606060020a028152601401828152602001925050506040516020818303038152906040526040518082805190602001908083835b602083106141f25780518252601f1990920191602091820191016141d3565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208c5460e160020a637152429d02845260048401829052602484018a90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b15801561427057600080fd5b505af1158015614284573d6000803e3d6000fd5b505050506040513d602081101561429a57600080fd5b50511515614352576040805160e560020a62461bcd028152602060048201526068602482015260008051602061543883398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b50600195945050505050565b60008080600160a060020a03861615156143e8576040805160e560020a62461bcd02815260206004820152602560248201527f4572726f723a2060746f602061646472657373206d757374206e6f742062652060448201527f6e756c6c2e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b876143f38a89613dc3565b6040516020018080600080516020615356833981519152815250600d0183805190602001908083835b6020831061443b5780518252601f19909201916020918201910161441c565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106144bd5780518252601f19909201916020918201910161449e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209150876144f78a88613dc3565b6040516020018080600080516020615356833981519152815250600d0183805190602001908083835b6020831061453f5780518252601f199092019160209182019101614520565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106145c15780518252601f1990920191602091820191016145a2565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208f5460e060020a63bd02d0f5028452600484018a90529451909750600160a060020a03909416955063e2a4853a9450879361467c93508b92879263bd02d0f5926024808401938290030181600087803b15801561464457600080fd5b505af1158015614658573d6000803e3d6000fd5b505050506040513d602081101561466e57600080fd5b50519063ffffffff61521f16565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b1580156146c457600080fd5b505af11580156146d8573d6000803e3d6000fd5b505050506040513d60208110156146ee57600080fd5b50511515614770576040805160e560020a62461bcd0281526020600482015260696024820152600080516020615438833981519152604482015260008051602061541883398151915260648201526000805160206153f8833981519152608482015260008051602061545883398151915260a482015290519081900360c40190fd5b88546040805160e060020a63bd02d0f5028152600481018490529051600160a060020a039092169163e2a4853a918491614807918a91869163bd02d0f59160248083019260209291908290030181600087803b1580156147cf57600080fd5b505af11580156147e3573d6000803e3d6000fd5b505050506040513d60208110156147f957600080fd5b50519063ffffffff614e9816565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b15801561484f57600080fd5b505af1158015614863573d6000803e3d6000fd5b505050506040513d602081101561487957600080fd5b505115156148fb576040805160e560020a62461bcd0281526020600482015260696024820152600080516020615438833981519152604482015260008051602061541883398151915260648201526000805160206153f8833981519152608482015260008051602061545883398151915260a482015290519081900360c40190fd5b85600160a060020a031687600160a060020a03167f6f3dcde00ed34d4f404b335a65d18fb4adf74f5b817aa46f5d7c4f05c6d1e96e8a8888604051808060200184815260200180602001838103835286818151815260200191508051906020019080838360005b8381101561497a578181015183820152602001614962565b50505050905090810190601f1680156149a75780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156149da5781810151838201526020016149c2565b50505050905090810190601f168015614a075780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a350600198975050505050505050565b60008084614a348786613dc3565b614a3e8833613dc3565b60405160200180807f746f6b656e2e616c6c6f77616e63650000000000000000000000000000000000815250600f0184805190602001908083835b60208310614a985780518252601f199092019160209182019101614a79565b6001836020036101000a03801982511681845116808217855250505050505090500183600160a060020a0316600160a060020a0316606060020a02815260140182600160a060020a0316600160a060020a0316606060020a02815260140193505050506040516020818303038152906040526040518082805190602001908083835b60208310614b395780518252601f199092019160209182019101614b1a565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208c5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063e2a4853a94508693614bbc93508992879263bd02d0f5926024808401938290030181600087803b15801561464457600080fd5b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015614c0457600080fd5b505af1158015614c18573d6000803e3d6000fd5b505050506040513d6020811015614c2e57600080fd5b50511515614352576040805160e560020a62461bcd0281526020600482015260696024820152600080516020615438833981519152604482015260008051602061541883398151915260648201526000805160206153f8833981519152608482015260008051602061545883398151915260a482015290519081900360c40190fd5b60008060405160200180807f6665652e636f6e74726163742e6d61737465720000000000000000000000000081525060130190506040516020818303038152906040526040518082805190602001908083835b60208310614d225780518252601f199092019160209182019101614d03565b51815160209384036101000a60001901801990921691161790526040805192909401829003822089547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015614daf57600080fd5b505af1158015614dc3573d6000803e3d6000fd5b505050506040513d6020811015614dd957600080fd5b50519392505050565b600080831515614df557600091506114f1565b50828202828482811515614e0557fe5b0414610c89576040805160e560020a62461bcd02815260206004820152602760248201527f4572726f723a20556e73616665206d756c7469706c69636174696f6e206f706560448201527f726174696f6e2100000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000808284811515614e8f57fe5b04949350505050565b600082820183811015610c89576040805160e560020a62461bcd02815260206004820152602160248201527f4572726f723a20556e73616665206164646974696f6e206f7065726174696f6e60448201527f2100000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000808260405160200180807f66782e7573642e72617465000000000000000000000000000000000000000000815250600b01828051906020019080838360208310611e0c5780518252601f199092019160209182019101611ded565b6000806000614f87858561518e565b915042821115614f9a576001925061239e565b5062015180614fd68585614fd1614fc48561401960016128598361284d428d63ffffffff61521f16565b869063ffffffff614e9816565b6152a4565b1515615052576040805160e560020a62461bcd02815260206004820152603060248201527f4572726f723a20556e61626c6520746f20757064617465206163636f756e742060448201527f7370656e64696e6720706572696f642e00000000000000000000000000000000606482015290519081900360840190fd5b6001925061239e565b60008082615069858561518e565b60405160200180807f6163636f756e742e7370656e64696e672e616d6f756e7400000000000000000081525060170183600160a060020a0316600160a060020a0316606060020a0281526014018281526020019250505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b6000808260405160200180807f6163636f756e742e7370656e64696e672e6c696d69740000000000000000000081525060160182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b6000808260405160200180807f6c696d69742e7370656e64696e672e706572696f64000000000000000000000081525060150182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b60008282111561529e576040805160e560020a62461bcd028152602060048201526024808201527f4572726f723a20556e73616665207375627472616374696f6e206f706572617460448201527f696f6e2100000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50900390565b6000808360405160200180807f6c696d69742e7370656e64696e672e706572696f64000000000000000000000081525060150182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106137bc5780518252601f19909201916020918201910161379d560020616c6c6f7765642062792074686520636f6e74726163742e00000000000000746f6b656e2e62616c616e6365000000000000000000000000000000000000004572726f723a20556e61626c6520746f207472616e736665722066756e64732e20506c6561736520636865636b20796f757220706172616d657465727320616e6420656e7375726520746865207370656e646572206861732074686520617070726f76656420616d6f756e74206f662066756e647320746f207472616e736665722e6c6c6f776564207065726d697373696f6e7320776974682073746f726167652075652e20506c6561736520656e7375726520636f6e74726163742068617320614572726f723a20556e61626c6520746f207365742073746f726167652076616c636f6e74726163742e00000000000000000000000000000000000000000000004572726f723a205472616e73616374696f6e2073656e646572206973206e6f74a165627a7a723058207cce3078f9e1d6ccbd29221a1b29da975e1ee315480c0b1b3e064c66dc6348ec0029", + "deployedBytecode": "0x6080604052600436106100ed5763ffffffff60e060020a60003504166306fdde0381146100f2578063095ea7b31461017c57806318160ddd146101b457806323b872dd146101db578063313ce567146102055780634bbc142c1461021a57806352238fdd1461023b57806354fd4d5014610253578063666a342714610268578063666e1b39146102895780636b0235a0146102aa57806370a08231146102bf57806395d89b41146102e0578063a9059cbb146102f5578063be6fc18114610319578063dd62ed3e146103db578063e052f0c814610402578063ebe6ba071461052a578063f2fde38b1461053f575b600080fd5b3480156100fe57600080fd5b50610107610560565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610141578181015183820152602001610129565b50505050905090810190601f16801561016e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561018857600080fd5b506101a0600160a060020a0360043516602435610578565b604080519115158252519081900360200190f35b3480156101c057600080fd5b506101c96106e9565b60408051918252519081900360200190f35b3480156101e757600080fd5b506101a0600160a060020a036004358116906024351660443561070d565b34801561021157600080fd5b506101c9610842565b34801561022657600080fd5b506101a0600160a060020a0360043516610866565b34801561024757600080fd5b506101c9600435610922565b34801561025f57600080fd5b5061010761094d565b34801561027457600080fd5b506101a0600160a060020a0360043516610960565b34801561029557600080fd5b506101a0600160a060020a0360043516610a19565b3480156102b657600080fd5b50610107610a2e565b3480156102cb57600080fd5b506101c9600160a060020a0360043516610a41565b3480156102ec57600080fd5b50610107610a66565b34801561030157600080fd5b506101a0600160a060020a0360043516602435610a79565b34801561032557600080fd5b5061032e610bde565b604051808781526020018681526020018581526020018481526020018060200183600160a060020a0316600160a060020a03168152602001828103825284818151815260200191508051906020019080838360005b8381101561039b578181015183820152602001610383565b50505050905090810190601f1680156103c85780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b3480156103e757600080fd5b506101c9600160a060020a0360043581169060243516610c63565b34801561040e57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101a094369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375094975050843595505050506020820135600160a060020a031691604001359050610c90565b34801561053657600080fd5b506101a061110c565b34801561054b57600080fd5b506101a0600160a060020a0360043516611209565b606061057360013063ffffffff61134316565b905090565b600061058b60013063ffffffff6114f816565b15610606576040805160e560020a62461bcd02815260206004820152603e60248201527f4572726f723a20436f6e747261637420686173206265656e206465707265636160448201527f7465642c2063616e6e6f7420706572666f726d206f7065726174696f6e210000606482015290519081900360840190fd5b6106186001848463ffffffff61164b16565b15156106e0576040805160e560020a62461bcd02815260206004820152607560248201527f4572726f723a20556e61626c6520746f20617070726f766520616c6c6f77616e60448201527f636520666f72207370656e6465722e20506c6561736520656e7375726520737060648201527f656e646572206973206e6f74206e756c6c20616e6420646f6573206e6f74206860848201527f61766520612066726f7a656e2062616c616e63652e000000000000000000000060a482015290519081900360c40190fd5b50600192915050565b60006105736106ff60013063ffffffff611d1c16565b60019063ffffffff611dae16565b600061072060013063ffffffff6114f816565b1561079b576040805160e560020a62461bcd02815260206004820152603e60248201527f4572726f723a20436f6e747261637420686173206265656e206465707265636160448201527f7465642c2063616e6e6f7420706572666f726d206f7065726174696f6e210000606482015290519081900360840190fd5b6107f86107af60013063ffffffff611d1c16565b60408051808201909152600381527f307830000000000000000000000000000000000000000000000000000000000060208201526001919087908790879063ffffffff611ee616565b15156108385760405160e560020a62461bcd0281526004018080602001828103825260828152602001806153766082913960a00191505060405180910390fd5b5060019392505050565b600061057361085860013063ffffffff611d1c16565b60019063ffffffff6121ce16565b3360009081526020819052604081205460ff1615156108d1576040805160e560020a62461bcd02815260206004820152603960248201526000805160206154788339815191526044820152600080516020615336833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b600061094761093860013063ffffffff61222b16565b6001908463ffffffff6123a616565b92915050565b606061057360013063ffffffff61289716565b3360009081526020819052604081205460ff1615156109cb576040805160e560020a62461bcd02815260206004820152603960248201526000805160206154788339815191526044820152600080516020615336833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b606061057360013063ffffffff61292916565b6000610947610a5760013063ffffffff611d1c16565b6001908463ffffffff6129bb16565b606061057360013063ffffffff611d1c16565b6000610a8c60013063ffffffff6114f816565b15610b07576040805160e560020a62461bcd02815260206004820152603e60248201527f4572726f723a20436f6e747261637420686173206265656e206465707265636160448201527f7465642c2063616e6e6f7420706572666f726d206f7065726174696f6e210000606482015290519081900360840190fd5b610b62610b1b60013063ffffffff611d1c16565b60408051808201909152600381527f30783000000000000000000000000000000000000000000000000000000000006020820152600191908690869063ffffffff612b3f16565b15156106e0576040805160e560020a62461bcd02815260206004820152603e60248201527f4572726f723a20556e61626c6520746f207472616e736665722066756e64732e60448201527f20506c6561736520636865636b20796f757220706172616d65746572732e0000606482015290519081900360840190fd5b600080808060608180610bf860013063ffffffff61222b16565b9050610c0b60018263ffffffff612e0416565b610c1c60018363ffffffff612e9516565b610c2d60018463ffffffff612f2616565b610c3e60018563ffffffff612fb716565b610c4f60018663ffffffff61304816565b939b929a5090985096509094509092509050565b6000610c89610c7960013063ffffffff611d1c16565b600190858563ffffffff61316b16565b9392505050565b3360009081526020819052604081205460ff161515610cfb576040805160e560020a62461bcd02815260206004820152603960248201526000805160206154788339815191526044820152600080516020615336833981519152606482015290519081900360840190fd5b610d0c60018963ffffffff61332b16565b1515610d88576040805160e560020a62461bcd02815260206004820152603860248201527f4572726f723a20556e61626c6520746f2073657420746f6b656e206e616d652e60448201527f20506c6561736520636865636b20617267756d656e74732e0000000000000000606482015290519081900360840190fd5b610d9960018863ffffffff61358416565b1515610e15576040805160e560020a62461bcd02815260206004820152603a60248201527f4572726f723a20556e61626c6520746f2073657420746f6b656e2073796d626f60448201527f6c2e20506c6561736520636865636b20617267756d656e74732e000000000000606482015290519081900360840190fd5b610e2660018763ffffffff6135ff16565b1515610ea2576040805160e560020a62461bcd02815260206004820152603760248201527f4572726f723a20556e61626c6520746f2073657420746f6b656e20544c412e2060448201527f506c6561736520636865636b20617267756d656e74732e000000000000000000606482015290519081900360840190fd5b610eb360018663ffffffff61367d16565b1515610f2f576040805160e560020a62461bcd02815260206004820152603b60248201527f4572726f723a20556e61626c6520746f2073657420746f6b656e20766572736960448201527f6f6e2e20506c6561736520636865636b20617267756d656e74732e0000000000606482015290519081900360840190fd5b610f416001888663ffffffff6136fb16565b1515610fbd576040805160e560020a62461bcd02815260206004820152603c60248201527f4572726f723a20556e61626c6520746f2073657420746f6b656e20646563696d60448201527f616c732e20506c6561736520636865636b20617267756d656e74732e00000000606482015290519081900360840190fd5b610fce60018463ffffffff61392716565b151561104a576040805160e560020a62461bcd02815260206004820152603a60248201527f4572726f723a20556e61626c6520746f207365742066656520636f6e7472616360448201527f742e20506c6561736520636865636b20617267756d656e74732e000000000000606482015290519081900360840190fd5b61105c6001888463ffffffff613a3c16565b15156110fe576040805160e560020a62461bcd02815260206004820152604660248201527f4572726f723a20556e61626c6520746f2073657420667820555344206261736960448201527f7320706f696e747320726174652e20506c6561736520636865636b206172677560648201527f6d656e74732e0000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b506001979650505050505050565b3360009081526020819052604081205460ff161515611177576040805160e560020a62461bcd02815260206004820152603960248201526000805160206154788339815191526044820152600080516020615336833981519152606482015290519081900360840190fd5b61118860013063ffffffff613c2316565b1515611203576040805160e560020a62461bcd028152602060048201526024808201527f4572726f723a20556e61626c6520746f2064657072656361746520636f6e747260448201527f6163742100000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50600190565b3360009081526020819052604081205460ff161515611274576040805160e560020a62461bcd02815260206004820152603960248201526000805160206154788339815191526044820152600080516020615336833981519152606482015290519081900360840190fd5b600160a060020a03821615156112d4576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b606060008260405160200180807f746f6b656e2e6e616d6500000000000000000000000000000000000000000000815250600a0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106113d65780518252601f1990920191602091820191016113b7565b5181516020939093036101000a60001901801990911692169190911790526040805191909301819003812089547f986e791a000000000000000000000000000000000000000000000000000000008352600483018290529351909650600160a060020a03909316945063986e791a9350602480820193600093509182900301818387803b15801561146657600080fd5b505af115801561147a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156114a357600080fd5b8101908080516401000000008111156114bb57600080fd5b820160208101848111156114ce57600080fd5b81516401000000008111828201871017156114e857600080fd5b50909550505050505b5092915050565b6000808260405160200180807f6465706372656361746564000000000000000000000000000000000000000000815250600b0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b6020831061158a5780518252601f19909201916020918201910161156b565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547f7ae1cfca000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a039094169550637ae1cfca945060248083019491935090918290030181600087803b15801561161757600080fd5b505af115801561162b573d6000803e3d6000fd5b505050506040513d602081101561164157600080fd5b5051949350505050565b600060608180600160a060020a03861615156116d7576040805160e560020a62461bcd02815260206004820152602860248201527f4572726f723a20607370656e6465726020616464726573732063616e6e6f742060448201527f6265206e756c6c2e000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6116e18730611d1c565b92506116f787846116f28a8a613dc3565b613f31565b15611772576040805160e560020a62461bcd02815260206004820152603660248201527f4572726f723a205370656e646572206d757374206e6f7420686176652061206660448201527f726f7a656e2062616c616e6365206469726563746c7900000000000000000000606482015290519081900360840190fd5b8261177d8833613dc3565b6117878989613dc3565b60405160200180807f746f6b656e2e616c6c6f77616e63650000000000000000000000000000000000815250600f0184805190602001908083835b602083106117e15780518252601f1990920191602091820191016117c2565b6001836020036101000a03801982511681845116808217855250505050505090500183600160a060020a0316600160a060020a0316606060020a02815260140182600160a060020a0316600160a060020a0316606060020a02815260140193505050506040516020818303038152906040526040518082805190602001908083835b602083106118825780518252601f199092019160209182019101611863565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209150826118bc8833613dc3565b6040516020018080600080516020615356833981519152815250600d0183805190602001908083835b602083106119045780518252601f1990920191602091820191016118e5565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106119865780518252601f199092019160209182019101611967565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208d5460e060020a63bd02d0f5028452600484018a90529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b1580156119fd57600080fd5b505af1158015611a11573d6000803e3d6000fd5b505050506040513d6020811015611a2757600080fd5b50511580611a33575084155b1515611ad5576040805160e560020a62461bcd02815260206004820152605260248201527f4572726f723a20416c6c6f77616e6365206d757374206265207a65726f20283060448201527f29206265666f72652073657474696e6720616e207570646174656420616c6c6f60648201527f77616e636520666f72207370656e6465722e0000000000000000000000000000608482015290519081900360a40190fd5b86546040805160e060020a63bd02d0f50281526004810184905290518792600160a060020a03169163bd02d0f59160248083019260209291908290030181600087803b158015611b2457600080fd5b505af1158015611b38573d6000803e3d6000fd5b505050506040513d6020811015611b4e57600080fd5b50511015611bcc576040805160e560020a62461bcd02815260206004820152603860248201527f4572726f723a20416c6c6f77616e63652063616e6e6f7420657863656564206d60448201527f73672e73656e64657220746f6b656e2062616c616e63652e0000000000000000606482015290519081900360840190fd5b86546040805160e160020a637152429d02815260048101859052602481018890529051600160a060020a039092169163e2a4853a916044808201926020929091908290030181600087803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b505050506040513d6020811015611c4d57600080fd5b50511515611ccf576040805160e560020a62461bcd0281526020600482015260696024820152600080516020615438833981519152604482015260008051602061541883398151915260648201526000805160206153f8833981519152608482015260008051602061545883398151915260a482015290519081900360c40190fd5b604080518681529051600160a060020a0388169133917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259181900360200190a35060019695505050505050565b606060008260405160200180807f746f6b656e2e73796d626f6c0000000000000000000000000000000000000000815250600c0182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106113d65780518252601f1990920191602091820191016113b7565b6000808260405160200180807f746f6b656e2e737570706c790000000000000000000000000000000000000000815250600c0182805190602001908083835b60208310611e0c5780518252601f199092019160209182019101611ded565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310611e6f5780518252601f199092019160209182019101611e50565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b15801561161757600080fd5b60008080600160a060020a0386161515611f70576040805160e560020a62461bcd02815260206004820152602560248201527f4572726f723a2060746f602061646472657373206d757374206e6f742062652060448201527f6e756c6c2e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b611f7a893061222b565b9150611f878983876123a6565b9050611f9e8988611f998c8c8a613f98565b614030565b151561201a576040805160e560020a62461bcd02815260206004820152602d60248201527f4572726f723a20556e61626c6520746f20736574206163636f756e742073706560448201527f6e64696e6720616d6f756e742e00000000000000000000000000000000000000606482015290519081900360840190fd5b61202889898989898961435e565b15156120a4576040805160e560020a62461bcd02815260206004820152602b60248201527f4572726f723a20556e61626c6520746f207472616e736665722066756e64732060448201527f746f206163636f756e742e000000000000000000000000000000000000000000606482015290519081900360840190fd5b6120bb89898985856120b68f89613048565b61435e565b1515612137576040805160e560020a62461bcd02815260206004820152602f60248201527f4572726f723a20556e61626c6520746f207472616e736665722066656573207460448201527f6f2066656520636f6e74726163742e0000000000000000000000000000000000606482015290519081900360840190fd5b61214389898988614a26565b15156121bf576040805160e560020a62461bcd02815260206004820152602e60248201527f4572726f723a20556e61626c6520746f2075706461746520616c6c6f77616e6360448201527f6520666f72207370656e6465722e000000000000000000000000000000000000606482015290519081900360840190fd5b50600198975050505050505050565b6000808260405160200180807f746f6b656e2e646563696d616c73000000000000000000000000000000000000815250600e01828051906020019080838360208310611e0c5780518252601f199092019160209182019101611ded565b60008060008360405160200180807f6665652e6163636f756e74000000000000000000000000000000000000000000815250600b0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106122bf5780518252601f1990920191602091820191016122a0565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b15801561234c57600080fd5b505af1158015612360573d6000803e3d6000fd5b505050506040513d602081101561237657600080fd5b50519050600160a060020a038116151561239a5761239385614cb0565b925061239e565b8092505b505092915050565b8254604080517f6665652e6d617800000000000000000000000000000000000000000000000000602080830191909152600160a060020a03868116606060020a0260278401528351808403601b018152603b9093019384905282516000958695869586958695869594169363bd02d0f593918291908401908083835b602083106124415780518252601f199092019160209182019101612422565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b1580156124a257600080fd5b505af11580156124b6573d6000803e3d6000fd5b505050506040513d60208110156124cc57600080fd5b50518954604080517f6665652e6d696e00000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260278401528351808403601b018152603b909301938490528251959a509093169363bd02d0f5939192918291908401908083835b602083106125625780518252601f199092019160209182019101612543565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b1580156125c357600080fd5b505af11580156125d7573d6000803e3d6000fd5b505050506040513d60208110156125ed57600080fd5b50518954604080517f6665652e62707300000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260278401528351808403601b018152603b9093019384905282519599509093169363bd02d0f5939192918291908401908083835b602083106126835780518252601f199092019160209182019101612664565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b1580156126e457600080fd5b505af11580156126f8573d6000803e3d6000fd5b505050506040513d602081101561270e57600080fd5b50518954604080517f6665652e666c6174000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260288401528351808403601c018152603c9093019384905282519598509093169363bd02d0f5939192918291908401908083835b602083106127a45780518252601f199092019160209182019101612785565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b15801561280557600080fd5b505af1158015612819573d6000803e3d6000fd5b505050506040513d602081101561282f57600080fd5b505191506128658261285961271061284d8b8863ffffffff614de216565b9063ffffffff614e8116565b9063ffffffff614e9816565b9050848111156128775784955061288b565b838110156128875783955061288b565b8095505b50505050509392505050565b606060008260405160200180807f746f6b656e2e76657273696f6e00000000000000000000000000000000000000815250600d0182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106113d65780518252601f1990920191602091820191016113b7565b606060008260405160200180807f746f6b656e2e746c61000000000000000000000000000000000000000000000081525060090182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106113d65780518252601f1990920191602091820191016113b7565b600080836129c98685613dc3565b6040516020018080600080516020615356833981519152815250600d0183805190602001908083835b60208310612a115780518252601f1990920191602091820191016129f2565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310612a935780518252601f199092019160209182019101612a74565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b158015612b0a57600080fd5b505af1158015612b1e573d6000803e3d6000fd5b505050506040513d6020811015612b3457600080fd5b505195945050505050565b60008080600160a060020a0386161515612bc9576040805160e560020a62461bcd02815260206004820152602360248201527f4572726f723a2060746f6020616464726573732063616e6e6f74206265206e7560448201527f6c6c2e0000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008511612c47576040805160e560020a62461bcd02815260206004820152602960248201527f4572726f723a2060616d6f756e7460206d75737420626520677265617465722060448201527f7468616e207a65726f0000000000000000000000000000000000000000000000606482015290519081900360840190fd5b612c51883061222b565b9150612c5e8883876123a6565b9050612c708833611f998b8b8a613f98565b1515612cec576040805160e560020a62461bcd02815260206004820152603160248201527f4572726f723a20556e61626c6520746f20736574207370656e64696e6720616d60448201527f6f756e7420666f72206163636f756e742e000000000000000000000000000000606482015290519081900360840190fd5b612cfa88883389898961435e565b1515612d76576040805160e560020a62461bcd02815260206004820152602b60248201527f4572726f723a20556e61626c6520746f207472616e736665722066756e64732060448201527f746f206163636f756e742e000000000000000000000000000000000000000000606482015290519081900360840190fd5b612d8888883385856120b68e89613048565b15156110fe576040805160e560020a62461bcd02815260206004820152602f60248201527f4572726f723a20556e61626c6520746f207472616e736665722066656573207460448201527f6f2066656520636f6e74726163742e0000000000000000000000000000000000606482015290519081900360840190fd5b6000808260405160200180807f6665652e6270730000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b6000808260405160200180807f6665652e6d696e0000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b6000808260405160200180807f6665652e6d61780000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b6000808260405160200180807f6665652e666c617400000000000000000000000000000000000000000000000081525060080182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b606060008260405160200180807f6665652e6d73670000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106130db5780518252601f1990920191602091820191016130bc565b5181516020939093036101000a60001901801990911692169190911790526040805191909301819003812089547fc031a180000000000000000000000000000000000000000000000000000000008352600483018290529351909650600160a060020a03909316945063c031a1809350602480820193600093509182900301818387803b15801561146657600080fd5b600080846131798786613dc3565b6131838886613dc3565b60405160200180807f746f6b656e2e616c6c6f77616e63650000000000000000000000000000000000815250600f0184805190602001908083835b602083106131dd5780518252601f1990920191602091820191016131be565b6001836020036101000a03801982511681845116808217855250505050505090500183600160a060020a0316600160a060020a0316606060020a02815260140182600160a060020a0316600160a060020a0316606060020a02815260140193505050506040516020818303038152906040526040518082805190602001908083835b6020831061327e5780518252601f19909201916020918201910161325f565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208c5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b1580156132f557600080fd5b505af1158015613309573d6000803e3d6000fd5b505050506040513d602081101561331f57600080fd5b50519695505050505050565b604080517f746f6b656e2e6e616d6500000000000000000000000000000000000000000000602080830191909152606060020a3002602a8301528251601e818403018152603e909201928390528151600093849392909182918401908083835b602083106133aa5780518252601f19909201916020918201910161338b565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547f6e89955000000000000000000000000000000000000000000000000000000000845260048401828152602485019687528b5160448601528b51929950600160a060020a039091169750636e899550965088958b9550909390926064909101919085019080838360005b8381101561345557818101518382015260200161343d565b50505050905090810190601f1680156134825780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b1580156134a257600080fd5b505af11580156134b6573d6000803e3d6000fd5b505050506040513d60208110156134cc57600080fd5b50511515610838576040805160e560020a62461bcd028152602060048201526068602482015260008051602061543883398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b604080517f746f6b656e2e73796d626f6c0000000000000000000000000000000000000000602080830191909152606060020a3002602c83015282518083038201815291830192839052815160009384939290918291840190808383602083106133aa5780518252601f19909201916020918201910161338b565b604080517f746f6b656e2e746c610000000000000000000000000000000000000000000000602080830191909152606060020a300260298301528251601d818403018152603d90920192839052815160009384939290918291840190808383602083106133aa5780518252601f19909201916020918201910161338b565b604080517f746f6b656e2e76657273696f6e00000000000000000000000000000000000000602080830191909152606060020a3002602d83015282516021818403018152604190920192839052815160009384939290918291840190808383602083106133aa5780518252601f19909201916020918201910161338b565b6000808360405160200180807f746f6b656e2e646563696d616c73000000000000000000000000000000000000815250600e0182805190602001908083835b602083106137595780518252601f19909201916020918201910161373a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083106137bc5780518252601f19909201916020918201910161379d565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b5460e160020a637152429d02845260048401829052602484018b90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b15801561383a57600080fd5b505af115801561384e573d6000803e3d6000fd5b505050506040513d602081101561386457600080fd5b5051151561391c576040805160e560020a62461bcd028152602060048201526068602482015260008051602061543883398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b506001949350505050565b604080517f6665652e6163636f756e74000000000000000000000000000000000000000000602080830191909152606060020a3002602b8301528251601f818403018152603f909201928390528151600093849392909182918401908083835b602083106139a65780518252601f199092019160209182019101613987565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547fca446dd900000000000000000000000000000000000000000000000000000000845260048401829052600160a060020a038b81166024860152955191985094909416955063ca446dd9945060448083019491935090918290030181600087803b1580156134a257600080fd5b6000808360405160200180807f66782e7573642e72617465000000000000000000000000000000000000000000815250600b0182805190602001908083835b60208310613a9a5780518252601f199092019160209182019101613a7b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310613afd5780518252601f199092019160209182019101613ade565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b5460e160020a637152429d02845260048401829052602484018b90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b158015613b7b57600080fd5b505af1158015613b8f573d6000803e3d6000fd5b505050506040513d6020811015613ba557600080fd5b5051151561391c576040805160e560020a62461bcd02815260206004820152603060248201527f4572726f723a20556e61626c6520746f20757064617465206163636f756e742060448201527f7370656e64696e6720706572696f642e00000000000000000000000000000000606482015290519081900360840190fd5b600080600160a060020a0383161515613cac576040805160e560020a62461bcd02815260206004820152602760248201527f4572726f723a2063616e6e6f74206465707265636174652061206e756c6c206160448201527f6464726573732e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b604080517f6465706372656361746564000000000000000000000000000000000000000000602080830191909152606060020a600160a060020a03871602602b8301528251601f818403018152603f90920192839052815191929182918401908083835b60208310613d2f5780518252601f199092019160209182019101613d10565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547fabfdcced00000000000000000000000000000000000000000000000000000000845260048401829052600160248501529451909750600160a060020a03909416955063abfdcced945060448083019491935090918290030181600087803b1580156134a257600080fd5b60008060008360405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310613e575780518252601f199092019160209182019101613e38565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015613ee457600080fd5b505af1158015613ef8573d6000803e3d6000fd5b505050506040513d6020811015613f0e57600080fd5b50519050600160a060020a03811615613f295780925061239e565b83925061239e565b60008083613f3f8685613dc3565b60405160200180807f746f6b656e2e66726f7a656e0000000000000000000000000000000000000000815250600c01838051906020019080838360208310612a115780518252601f1990920191602091820191016129f2565b600080600080613fdd876040805190810160405280600481526020017f55534478000000000000000000000000000000000000000000000000000000008152506121ce565b9250613fe987876121ce565b915061402582600a0a61284d85600a0a61401961271061284d61400c8e8e614f1b565b8c9063ffffffff614de216565b9063ffffffff614de216565b979650505050505050565b600080600061403f8686614f78565b15156140bb576040805160e560020a62461bcd02815260206004820152603060248201527f4572726f723a20556e61626c6520746f20757064617465206163636f756e742060448201527f7370656e64696e6720706572696f642e00000000000000000000000000000000606482015290519081900360840190fd5b6140c984612859888861505b565b9150816140d687876150fd565b1015614152576040805160e560020a62461bcd02815260206004820152603360248201527f4572726f723a204163636f756e742063616e6e6f74206578636565642069747360448201527f206461696c79207370656e64206c696d69742e00000000000000000000000000606482015290519081900360840190fd5b8461415d878761518e565b60405160200180807f6163636f756e742e7370656e64696e672e616d6f756e7400000000000000000081525060170183600160a060020a0316600160a060020a0316606060020a028152601401828152602001925050506040516020818303038152906040526040518082805190602001908083835b602083106141f25780518252601f1990920191602091820191016141d3565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208c5460e160020a637152429d02845260048401829052602484018a90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b15801561427057600080fd5b505af1158015614284573d6000803e3d6000fd5b505050506040513d602081101561429a57600080fd5b50511515614352576040805160e560020a62461bcd028152602060048201526068602482015260008051602061543883398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b50600195945050505050565b60008080600160a060020a03861615156143e8576040805160e560020a62461bcd02815260206004820152602560248201527f4572726f723a2060746f602061646472657373206d757374206e6f742062652060448201527f6e756c6c2e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b876143f38a89613dc3565b6040516020018080600080516020615356833981519152815250600d0183805190602001908083835b6020831061443b5780518252601f19909201916020918201910161441c565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106144bd5780518252601f19909201916020918201910161449e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209150876144f78a88613dc3565b6040516020018080600080516020615356833981519152815250600d0183805190602001908083835b6020831061453f5780518252601f199092019160209182019101614520565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106145c15780518252601f1990920191602091820191016145a2565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208f5460e060020a63bd02d0f5028452600484018a90529451909750600160a060020a03909416955063e2a4853a9450879361467c93508b92879263bd02d0f5926024808401938290030181600087803b15801561464457600080fd5b505af1158015614658573d6000803e3d6000fd5b505050506040513d602081101561466e57600080fd5b50519063ffffffff61521f16565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b1580156146c457600080fd5b505af11580156146d8573d6000803e3d6000fd5b505050506040513d60208110156146ee57600080fd5b50511515614770576040805160e560020a62461bcd0281526020600482015260696024820152600080516020615438833981519152604482015260008051602061541883398151915260648201526000805160206153f8833981519152608482015260008051602061545883398151915260a482015290519081900360c40190fd5b88546040805160e060020a63bd02d0f5028152600481018490529051600160a060020a039092169163e2a4853a918491614807918a91869163bd02d0f59160248083019260209291908290030181600087803b1580156147cf57600080fd5b505af11580156147e3573d6000803e3d6000fd5b505050506040513d60208110156147f957600080fd5b50519063ffffffff614e9816565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b15801561484f57600080fd5b505af1158015614863573d6000803e3d6000fd5b505050506040513d602081101561487957600080fd5b505115156148fb576040805160e560020a62461bcd0281526020600482015260696024820152600080516020615438833981519152604482015260008051602061541883398151915260648201526000805160206153f8833981519152608482015260008051602061545883398151915260a482015290519081900360c40190fd5b85600160a060020a031687600160a060020a03167f6f3dcde00ed34d4f404b335a65d18fb4adf74f5b817aa46f5d7c4f05c6d1e96e8a8888604051808060200184815260200180602001838103835286818151815260200191508051906020019080838360005b8381101561497a578181015183820152602001614962565b50505050905090810190601f1680156149a75780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156149da5781810151838201526020016149c2565b50505050905090810190601f168015614a075780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a350600198975050505050505050565b60008084614a348786613dc3565b614a3e8833613dc3565b60405160200180807f746f6b656e2e616c6c6f77616e63650000000000000000000000000000000000815250600f0184805190602001908083835b60208310614a985780518252601f199092019160209182019101614a79565b6001836020036101000a03801982511681845116808217855250505050505090500183600160a060020a0316600160a060020a0316606060020a02815260140182600160a060020a0316600160a060020a0316606060020a02815260140193505050506040516020818303038152906040526040518082805190602001908083835b60208310614b395780518252601f199092019160209182019101614b1a565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208c5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063e2a4853a94508693614bbc93508992879263bd02d0f5926024808401938290030181600087803b15801561464457600080fd5b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015614c0457600080fd5b505af1158015614c18573d6000803e3d6000fd5b505050506040513d6020811015614c2e57600080fd5b50511515614352576040805160e560020a62461bcd0281526020600482015260696024820152600080516020615438833981519152604482015260008051602061541883398151915260648201526000805160206153f8833981519152608482015260008051602061545883398151915260a482015290519081900360c40190fd5b60008060405160200180807f6665652e636f6e74726163742e6d61737465720000000000000000000000000081525060130190506040516020818303038152906040526040518082805190602001908083835b60208310614d225780518252601f199092019160209182019101614d03565b51815160209384036101000a60001901801990921691161790526040805192909401829003822089547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015614daf57600080fd5b505af1158015614dc3573d6000803e3d6000fd5b505050506040513d6020811015614dd957600080fd5b50519392505050565b600080831515614df557600091506114f1565b50828202828482811515614e0557fe5b0414610c89576040805160e560020a62461bcd02815260206004820152602760248201527f4572726f723a20556e73616665206d756c7469706c69636174696f6e206f706560448201527f726174696f6e2100000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000808284811515614e8f57fe5b04949350505050565b600082820183811015610c89576040805160e560020a62461bcd02815260206004820152602160248201527f4572726f723a20556e73616665206164646974696f6e206f7065726174696f6e60448201527f2100000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000808260405160200180807f66782e7573642e72617465000000000000000000000000000000000000000000815250600b01828051906020019080838360208310611e0c5780518252601f199092019160209182019101611ded565b6000806000614f87858561518e565b915042821115614f9a576001925061239e565b5062015180614fd68585614fd1614fc48561401960016128598361284d428d63ffffffff61521f16565b869063ffffffff614e9816565b6152a4565b1515615052576040805160e560020a62461bcd02815260206004820152603060248201527f4572726f723a20556e61626c6520746f20757064617465206163636f756e742060448201527f7370656e64696e6720706572696f642e00000000000000000000000000000000606482015290519081900360840190fd5b6001925061239e565b60008082615069858561518e565b60405160200180807f6163636f756e742e7370656e64696e672e616d6f756e7400000000000000000081525060170183600160a060020a0316600160a060020a0316606060020a0281526014018281526020019250505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b6000808260405160200180807f6163636f756e742e7370656e64696e672e6c696d69740000000000000000000081525060160182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b6000808260405160200180807f6c696d69742e7370656e64696e672e706572696f64000000000000000000000081525060150182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b60008282111561529e576040805160e560020a62461bcd028152602060048201526024808201527f4572726f723a20556e73616665207375627472616374696f6e206f706572617460448201527f696f6e2100000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50900390565b6000808360405160200180807f6c696d69742e7370656e64696e672e706572696f64000000000000000000000081525060150182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106137bc5780518252601f19909201916020918201910161379d560020616c6c6f7765642062792074686520636f6e74726163742e00000000000000746f6b656e2e62616c616e6365000000000000000000000000000000000000004572726f723a20556e61626c6520746f207472616e736665722066756e64732e20506c6561736520636865636b20796f757220706172616d657465727320616e6420656e7375726520746865207370656e646572206861732074686520617070726f76656420616d6f756e74206f662066756e647320746f207472616e736665722e6c6c6f776564207065726d697373696f6e7320776974682073746f726167652075652e20506c6561736520656e7375726520636f6e74726163742068617320614572726f723a20556e61626c6520746f207365742073746f726167652076616c636f6e74726163742e00000000000000000000000000000000000000000000004572726f723a205472616e73616374696f6e2073656e646572206973206e6f74a165627a7a723058207cce3078f9e1d6ccbd29221a1b29da975e1ee315480c0b1b3e064c66dc6348ec0029", + "sourceMap": "1060:8028:5:-;;;1371:465;8:9:-1;5:2;;;30:1;27;20:12;5:2;1371:465:5;;;;;;;;;;;;;;;;1117:10:1;1111:5;:17;;;1371:465:5;1111:17:1;;;;;;:24;;1131:4;-1:-1:-1;;1111:24:1;;;;;;;1708:46:5;;-1:-1:-1;;;;;;1708:46:5;-1:-1:-1;;;;;1708:46:5;;;;;;;;;1807:24;;;;;;;;1060:8028;;;;;;;;", + "deployedSourceMap": "1060:8028:5:-;;;;;;;;;-1:-1:-1;;;1060:8028:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3417:104;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3417:104:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3417:104:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8099:406;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8099:406:5;-1:-1:-1;;;;;8099:406:5;;;;;;;;;;;;;;;;;;;;;;;;;4593:132;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4593:132:5;;;;;;;;;;;;;;;;;;;;7417:476;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7417:476:5;-1:-1:-1;;;;;7417:476:5;;;;;;;;;;;;4330:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4330:134:5;;;;2127:185:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2127:185:1;-1:-1:-1;;;;;2127:185:1;;;;;6385:150:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6385:150:5;;;;;4100:113;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4100:113:5;;;;2571:188:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2571:188:1;-1:-1:-1;;;;;2571:188:1;;;;;725:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;725:37:1;-1:-1:-1;;;;;725:37:1;;;;;3886:101:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3886:101:5;;;;5306:156;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5306:156:5;-1:-1:-1;;;;;5306:156:5;;;;;3631:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3631:110:5;;;;6767:375;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6767:375:5;-1:-1:-1;;;;;6767:375:5;;;;;;;5739:415;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5739:415:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5739:415:5;-1:-1:-1;;;;;5739:415:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5739:415:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4963:183;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4963:183:5;-1:-1:-1;;;;;4963:183:5;;;;;;;;;;2242:1071;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2242:1071:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2242:1071:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2242:1071:5;;;;-1:-1:-1;2242:1071:5;-1:-1:-1;2242:1071:5;;-1:-1:-1;2242:1071:5;;;;;;;;-1:-1:-1;;2242:1071:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2242:1071:5;;;;-1:-1:-1;2242:1071:5;-1:-1:-1;2242:1071:5;;-1:-1:-1;2242:1071:5;;;;;;;;-1:-1:-1;;2242:1071:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2242:1071:5;;;;-1:-1:-1;2242:1071:5;-1:-1:-1;2242:1071:5;;-1:-1:-1;2242:1071:5;;;;;;;;-1:-1:-1;2242:1071:5;;-1:-1:-1;;2242:1071:5;;;-1:-1:-1;;;;2242:1071:5;;;;-1:-1:-1;;;;;2242:1071:5;;;;;;-1:-1:-1;2242:1071:5;;8650:204;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8650:204:5;;;;1589:291:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1589:291:1;-1:-1:-1;;;;;1589:291:1;;;;;3417:104:5;3454:12;3483:31;:3;3508:4;3483:31;:16;:31;:::i;:::-;3476:38;;3417:104;:::o;8099:406::-;8176:12;8953:39;:3;8986:4;8953:39;:24;:39;:::i;:::-;8952:40;8944:123;;;;;-1:-1:-1;;;;;8944:123:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8305:37;:3;8326:7;8335:6;8305:37;:20;:37;:::i;:::-;8288:191;;;;;;;-1:-1:-1;;;;;8288:191:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8494:4:5;8099:406;;;;:::o;4593:132::-;4637:11;4665:53;4684:33;:3;4711:4;4684:33;:18;:33;:::i;:::-;4665:3;;:53;:18;:53;:::i;7417:476::-;7508:12;8953:39;:3;8986:4;8953:39;:24;:39;:::i;:::-;8952:40;8944:123;;;;;-1:-1:-1;;;;;8944:123:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7641:76;7658:33;:3;7685:4;7658:33;:18;:33;:::i;:::-;7641:76;;;;;;;;;;;;;;;;;:3;;:76;7693:4;;7699:2;;7703:6;;7641:76;:16;:76;:::i;:::-;7624:243;;;;;;-1:-1:-1;;;;;7624:243:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7882:4:5;7417:476;;;;;:::o;4330:134::-;4371:14;4402:55;4423:33;:3;4450:4;4423:33;:18;:33;:::i;:::-;4402:3;;:55;:20;:55;:::i;2127:185:1:-;1261:10;2201:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;2221:21:1;;:5;:21;;;;;;;;;;;:28;;-1:-1:-1;;2221:28:1;2245:4;2221:28;;;2260:30;;;2221:5;2260:30;-1:-1:-1;2303:4:1;2127:185;;;:::o;6385:150:5:-;6442:9;6468:60;6486:33;:3;6513:4;6486:33;:18;:33;:::i;:::-;6468:3;;6521:6;6468:60;:17;:60;:::i;:::-;6461:67;6385:150;-1:-1:-1;;6385:150:5:o;4100:113::-;4140:15;4172:34;:3;4200:4;4172:34;:19;:34;:::i;2571:188:1:-;1261:10;2646:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;2666:21:1;;2690:5;2666:21;;;;;;;;;;;:29;;-1:-1:-1;;2666:29:1;;;2706:31;;;2690:5;2706:31;-1:-1:-1;2750:4:1;2571:188;;;:::o;725:37::-;;;;;;;;;;;;;;;;:::o;3886:101:5:-;3922:11;3950:30;:3;3974:4;3950:30;:15;:30;:::i;5306:156::-;5363:12;5392:63;5412:33;:3;5439:4;5412:33;:18;:33;:::i;:::-;5392:3;;5447:7;5392:63;:19;:63;:::i;3631:110::-;3670:14;3701:33;:3;3728:4;3701:33;:18;:33;:::i;6767:375::-;6840:12;8953:39;:3;8986:4;8953:39;:24;:39;:::i;:::-;8952:40;8944:123;;;;;-1:-1:-1;;;;;8944:123:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6968:66;6981:33;:3;7008:4;6981:33;:18;:33;:::i;:::-;6968:66;;;;;;;;;;;;;;;;;:3;;:66;7016:2;;7020:6;;6968:66;:12;:66;:::i;:::-;6951:165;;;;;;;-1:-1:-1;;;;;6951:165:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5739:415;5784:8;;;;5825:12;5784:8;;5889:33;:3;5916:4;5889:33;:18;:33;:::i;:::-;5867:55;-1:-1:-1;5947:26:5;:3;5867:55;5947:26;:13;:26;:::i;:::-;5983;:3;5997:11;5983:26;:13;:26;:::i;:::-;6019;:3;6033:11;6019:26;:13;:26;:::i;:::-;6055:27;:3;6070:11;6055:27;:14;:27;:::i;:::-;6092:26;:3;6106:11;6092:26;:13;:26;:::i;:::-;5930:217;;;;-1:-1:-1;5930:217:5;;-1:-1:-1;5930:217:5;-1:-1:-1;5930:217:5;;-1:-1:-1;6128:11:5;;-1:-1:-1;5739:415:5;-1:-1:-1;5739:415:5:o;4963:183::-;5037:11;5065:74;5087:33;:3;5114:4;5087:33;:18;:33;:::i;:::-;5065:3;;5122:7;5131;5065:74;:21;:74;:::i;:::-;5058:81;4963:183;-1:-1:-1;;;4963:183:5:o;2242:1071::-;1261:10:1;2439:12:5;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;2469:23:5;:3;2486:5;2469:23;:16;:23;:::i;:::-;2461:100;;;;;;;-1:-1:-1;;;;;2461:100:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2577:27;:3;2596:7;2577:27;:18;:27;:::i;:::-;2569:106;;;;;;;-1:-1:-1;;;;;2569:106:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2691:21;:3;2707:4;2691:21;:15;:21;:::i;:::-;2683:97;;;;;;;-1:-1:-1;;;;;2683:97:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2796:29;:3;2816:8;2796:29;:19;:29;:::i;:::-;2788:109;;;;;;;-1:-1:-1;;;;;2788:109:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2913:40;:3;2934:7;2943:9;2913:40;:20;:40;:::i;:::-;2905:121;;;;;;;-1:-1:-1;;;;;2905:121:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3042:32;:3;3061:12;3042:32;:18;:32;:::i;:::-;3034:111;;;;;;;-1:-1:-1;;;;;3034:111:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3161:43;:3;3181:7;3190:13;3161:43;:19;:43;:::i;:::-;3153:134;;;;;;;-1:-1:-1;;;;;3153:134:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3302:4:5;2242:1071;;;;;;;;;:::o;8650:204::-;1261:10:1;8706:15:5;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;8739:40:5;:3;8773:4;8739:40;:25;:40;:::i;:::-;8731:97;;;;;;;-1:-1:-1;;;;;8731:97:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8843:4:5;8650:204;:::o;1589:291:1:-;1261:10;1660:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;1688:22:1;;;;1680:66;;;;;-1:-1:-1;;;;;1680:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1757:42;;-1:-1:-1;;;;;1757:42:1;;;1778:10;;1757:42;;;;;-1:-1:-1;;;;;;1805:15:1;:5;:15;;;;;;;;;;;:22;;1823:4;-1:-1:-1;;1805:22:1;;;;;;;;1839:10;1833:17;;;;;;:25;;;;;;;1823:4;1589:291::o;19046:228:8:-;19135:16;19159:10;19213:15;19182:47;;;;;;;;;;;;;-1:-1:-1;;;;;19182:47:8;-1:-1:-1;;;;;19182:47:8;-1:-1:-1;;;19182:47:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;19182:47:8;;;19172:58;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;19172:58:8;;;;;;;;;;;;19243:12;;:26;;;;;;;;;;;19172:58;;-1:-1:-1;;;;;;19243:12:8;;;;-1:-1:-1;19243:22:8;;-1:-1:-1;19243:26:8;;;;;-1:-1:-1;;;19243:26:8;;;;;;-1:-1:-1;19243:12:8;:26;;;5:2:-1;;;;30:1;27;20:12;5:2;19243:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19243:26:8;;;;;;39:16:-1;36:1;17:17;2:54;101:4;19243:26:8;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;19243:26:8;;;;;;20:11:-1;15:3;12:20;9:2;;;45:1;42;35:12;9:2;64:21;;126:4;117:14;;142:31;;;139:2;;;186:1;183;176:12;139:2;218:10;;268:11;251:29;;293:43;;;290:58;-1:-1;239:118;236:2;;;370:1;367;360:12;236:2;-1:-1;19243:26:8;;-1:-1:-1;;;;;19046:228:8;;;;;;:::o;55990:230::-;56087:11;56106:10;56161:15;56129:48;;;;;;;;;;;;;-1:-1:-1;;;;;56129:48:8;-1:-1:-1;;;;;56129:48:8;-1:-1:-1;;;56129:48:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;56129:48:8;;;56119:59;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;56119:59:8;;;;;;;;;;;;56191:12;;:24;;;;;;;;;;;56119:59;;-1:-1:-1;;;;;;56191:12:8;;;;-1:-1:-1;56191:20:8;;-1:-1:-1;56191:24:8;;;;;263:2:-1;;-1:-1;56191:24:8;;;;;;;-1:-1:-1;56191:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;56191:24:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;56191:24:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;56191:24:8;;55990:230;-1:-1:-1;;;;55990:230:8:o;40662:1217::-;40755:12;40857:22;40755:12;;-1:-1:-1;;;;;40783:14:8;;;;40775:75;;;;;-1:-1:-1;;;;;40775:75:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40882:35;40897:4;40911;40882:14;:35::i;:::-;40857:60;;40939:73;40961:4;40967:8;40977:34;40997:4;41003:7;40977:19;:34::i;:::-;40939:21;:73::i;:::-;:78;40924:158;;;;;-1:-1:-1;;;;;40924:158:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41150:8;41160:37;41180:4;41186:10;41160:19;:37::i;:::-;41199:34;41219:4;41225:7;41199:19;:34::i;:::-;41114:120;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;41114:120:8;;;;;;;-1:-1:-1;;;;;41114:120:8;-1:-1:-1;;;;;41114:120:8;-1:-1:-1;;;41114:120:8;;;;;;-1:-1:-1;;;;;41114:120:8;-1:-1:-1;;;;;41114:120:8;-1:-1:-1;;;41114:120:8;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;41114:120:8;;;41104:131;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;41104:131:8;;;;;;;;;;;;;;;;41089:146;;41300:8;41310:37;41330:4;41336:10;41310:19;:37::i;:::-;41266:82;;;;;;-1:-1:-1;;;;;;;;;;;41266:82:8;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;41266:82:8;;;;;;;-1:-1:-1;;;;;41266:82:8;-1:-1:-1;;;;;41266:82:8;-1:-1:-1;;;41266:82:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;41266:82:8;;;41256:93;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;41256:93:8;;;;;;;;;;;;41371:12;;-1:-1:-1;;;;;41371:26:8;;;;;;;;;;41256:93;;-1:-1:-1;;;;;;41371:12:8;;;;-1:-1:-1;41371:20:8;;-1:-1:-1;41371:26:8;;;;;263:2:-1;;-1:-1;41371:26:8;;;;;;;-1:-1:-1;41371:12:8;:26;;;5:2:-1;;;;30:1;27;20:12;5:2;41371:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41371:26:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41371:26:8;:31;;:46;;-1:-1:-1;41406:11:8;;41371:46;41356:154;;;;;;;-1:-1:-1;;;;;41356:154:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41532:12;;:26;;;-1:-1:-1;;;;;41532:26:8;;;;;;;;;;41562:6;;-1:-1:-1;;;;;41532:12:8;;:20;;:26;;;;;;;;;;;;;;:12;;:26;;;5:2:-1;;;;30:1;27;20:12;5:2;41532:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41532:26:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41532:26:8;:36;;41517:118;;;;;-1:-1:-1;;;;;41517:118:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41657:12;;:34;;;-1:-1:-1;;;;;41657:34:8;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41657:12:8;;;;:20;;:34;;;;;;;;;;;;;;;:12;;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;41657:34:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41657:34:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41657:34:8;41642:165;;;;;;;-1:-1:-1;;;;;41642:165:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;41642:165:8;;;;-1:-1:-1;;;;;;;;;;;41642:165:8;;;;-1:-1:-1;;;;;;;;;;;41642:165:8;;;;-1:-1:-1;;;;;;;;;;;41642:165:8;;;;;;;;;;;;;;;41819:37;;;;;;;;-1:-1:-1;;;;;41819:37:8;;;41828:10;;41819:37;;;;;;;;;-1:-1:-1;41870:4:8;;40662:1217;-1:-1:-1;;;;;;40662:1217:8:o;19671:234::-;19762:18;19788:10;19844:15;19811:49;;;;;;;;;;;;;-1:-1:-1;;;;;19811:49:8;-1:-1:-1;;;;;19811:49:8;-1:-1:-1;;;19811:49:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;19811::8;;;19801:60;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;27457:210:8;27540:11;27559:10;27615:8;27582:42;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;27582:42:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;27582:42:8;;;27572:53;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;27572:53:8;;;;;;;;;;;;27638:12;;-1:-1:-1;;;;;27638:24:8;;;;;;;;;;27572:53;;-1:-1:-1;;;;;;27638:12:8;;;;-1:-1:-1;27638:20:8;;-1:-1:-1;27638:24:8;;;;;263:2:-1;;-1:-1;27638:24:8;;;;;;;-1:-1:-1;27638:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;36261:1201:8;36388:12;;;-1:-1:-1;;;;;36423:18:8;;;;36408:86;;;;;-1:-1:-1;;;;;36408:86:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36523:35;36538:4;36552;36523:14;:35::i;:::-;36501:57;;36576:40;36590:4;36596:11;36609:6;36576:13;:40::i;:::-;36564:52;;36731:76;36756:4;36762;36768:38;36783:4;36789:8;36799:6;36768:14;:38::i;:::-;36731:24;:76::i;:::-;36716:152;;;;;;;-1:-1:-1;;;;;36716:152:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36934:53;36948:4;36954:8;36964:4;36970:2;36974:6;36982:4;36934:13;:53::i;:::-;36919:127;;;;;;;-1:-1:-1;;;;;36919:127:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37110:84;37124:4;37130:8;37140:4;37146:11;37159:4;37165:28;37175:4;37181:11;37165:9;:28::i;:::-;37110:13;:84::i;:::-;37095:162;;;;;;;-1:-1:-1;;;;;37095:162:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37332:45;37348:4;37354:8;37364:4;37370:6;37332:15;:45::i;:::-;37317:122;;;;;;;-1:-1:-1;;;;;37317:122:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37453:4:8;;36261:1201;-1:-1:-1;;;;;;;;36261:1201:8:o;21585:221::-;21670:18;21696:10;21754:8;21719:44;;;;;;;;;;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;26726:364:8;26817:19;26844:10;26923:18;26899:15;26867:48;;;;;;;;;;;;;-1:-1:-1;;;;;26867:48:8;-1:-1:-1;;;;;26867:48:8;-1:-1:-1;;;26867:48:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;26867:48:8;;;26857:59;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;26857:59:8;;;;;;;;;;;;26944:12;;:27;;;;;;;;;;;26857:59;;-1:-1:-1;;;;;;26944:12:8;;;;-1:-1:-1;26944:23:8;;-1:-1:-1;26944:27:8;;;;;263:2:-1;;-1:-1;26944:27:8;;;;;;;-1:-1:-1;26944:12:8;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;26944:27:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26944:27:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26944:27:8;;-1:-1:-1;;;;;;26981:17:8;;;26977:109;;;27015:26;27036:4;27015:20;:26::i;:::-;27008:33;;;;26977:109;27069:10;27062:17;;26977:109;26726:364;;;;;;:::o;31068:722::-;31213:12;;31244:44;;;;;;;;;;;;-1:-1:-1;;;;;31244:44:8;;;-1:-1:-1;;;31244:44:8;;;;;;;26:21:-1;;;22:32;;6:49;;31244:44:8;;;;;;;;31234:55;;-1:-1:-1;;;;;;;;;;;;31213:12:8;;;:20;;31244:44;;;31234:55;;;;;31244:44;31234:55;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;31234:55:8;;;;;;;;;;;;31213:77;;;-1:-1:-1;;;31213:77:8;;;;;;;;;;;;;;-1:-1:-1;263:2;;-1:-1;31213:77:8;;;;;;;-1:-1:-1;31213:77:8;-1:-1:-1;31213:77:8;;;;5:2:-1;;;;30:1;27;20:12;5:2;31213:77:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31213:77:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31213:77:8;31310:12;;31341:44;;;;31213:77;31341:44;;;;;;;-1:-1:-1;;;;;31341:44:8;;;-1:-1:-1;;;31341:44:8;;;;;;;26:21:-1;;;22:32;;6:49;;31341:44:8;;;;;;;;31331:55;;31213:77;;-1:-1:-1;31310:12:8;;;;:20;;31341:44;;;;;31331:55;;;;;31341:44;31331:55;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;31331:55:8;;;;;;;;;;;;31310:77;;;-1:-1:-1;;;31310:77:8;;;;;;;;;;;;;;-1:-1:-1;263:2;;-1:-1;31310:77:8;;;;;;;-1:-1:-1;31310:77:8;-1:-1:-1;31310:77:8;;;;5:2:-1;;;;30:1;27;20:12;5:2;31310:77:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31310:77:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31310:77:8;31407:12;;31438:44;;;;31310:77;31438:44;;;;;;;-1:-1:-1;;;;;31438:44:8;;;-1:-1:-1;;;31438:44:8;;;;;;;26:21:-1;;;22:32;;6:49;;31438:44:8;;;;;;;;31428:55;;31310:77;;-1:-1:-1;31407:12:8;;;;:20;;31438:44;;;;;31428:55;;;;;31438:44;31428:55;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;31428:55:8;;;;;;;;;;;;31407:77;;;-1:-1:-1;;;31407:77:8;;;;;;;;;;;;;;-1:-1:-1;263:2;;-1:-1;31407:77:8;;;;;;;-1:-1:-1;31407:77:8;-1:-1:-1;31407:77:8;;;;5:2:-1;;;;30:1;27;20:12;5:2;31407:77:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31407:77:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31407:77:8;31505:12;;31536:45;;;;31407:77;31536:45;;;;;;;-1:-1:-1;;;;;31536:45:8;;;-1:-1:-1;;;31536:45:8;;;;;;;26:21:-1;;;22:32;;6:49;;31536:45:8;;;;;;;;31526:56;;31407:77;;-1:-1:-1;31505:12:8;;;;:20;;31536:45;;;;;31526:56;;;;;31536:45;31526:56;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;31526:56:8;;;;;;;;;;;;31505:78;;;-1:-1:-1;;;31505:78:8;;;;;;;;;;;;;;-1:-1:-1;263:2;;-1:-1;31505:78:8;;;;;;;-1:-1:-1;31505:78:8;-1:-1:-1;31505:78:8;;;;5:2:-1;;;;30:1;27;20:12;5:2;31505:78:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31505:78:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31505:78:8;;-1:-1:-1;31601:46:8;31505:78;31602:31;31627:5;31603:18;:6;31614;31603:18;:10;:18;:::i;:::-;31602:24;:31;:24;:31;:::i;:::-;31601:37;:46;:37;:46;:::i;:::-;31589:58;;31665:6;31658:4;:13;31654:132;;;31688:6;31681:13;;;;31654:132;31718:6;31711:4;:13;31707:79;;;31741:6;31734:13;;;;31707:79;31775:4;31768:11;;31707:79;31068:722;;;;;;;;;;:::o;20955:224::-;21047:6;21061:10;21118:15;21084:50;;;;;;;;;;;;;-1:-1:-1;;;;;21084:50:8;-1:-1:-1;;;;;21084:50:8;-1:-1:-1;;;21084:50:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;21084:50:8;;;21074:61;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;20321:225:8;20409:15;20432:10;20485:15;20455:46;;;;;;;;;;;;;-1:-1:-1;;;;;20455:46:8;-1:-1:-1;;;;;20455:46:8;-1:-1:-1;;;20455:46:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;20455:46:8;;;20445:57;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;28791:266:8;28892:12;28912:10;28969:8;28979:34;28999:4;29005:7;28979:19;:34::i;:::-;28935:79;;;;;;-1:-1:-1;;;;;;;;;;;28935:79:8;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;28935:79:8;;;;;;;-1:-1:-1;;;;;28935:79:8;-1:-1:-1;;;;;28935:79:8;-1:-1:-1;;;28935:79:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;28935:79:8;;;28925:90;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;28925:90:8;;;;;;;;;;;;29028:12;;-1:-1:-1;;;;;29028:24:8;;;;;;;;;;28925:90;;-1:-1:-1;;;;;;29028:12:8;;;;-1:-1:-1;29028:20:8;;-1:-1:-1;29028:24:8;;;;;263:2:-1;;-1:-1;29028:24:8;;;;;;;-1:-1:-1;29028:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;29028:24:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29028:24:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29028:24:8;;28791:266;-1:-1:-1;;;;;28791:266:8:o;34223:922::-;34332:12;;;-1:-1:-1;;;;;34360:18:8;;;;34352:67;;;;;-1:-1:-1;;;;;34352:67:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34442:1;34433:10;;34425:64;;;;;-1:-1:-1;;;;;34425:64:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34518:35;34533:4;34547;34518:14;:35::i;:::-;34496:57;;34571:40;34585:4;34591:11;34604:6;34571:13;:40::i;:::-;34559:52;;34633:82;34658:4;34664:10;34676:38;34691:4;34697:8;34707:6;34676:14;:38::i;34633:82::-;34618:157;;;;;;;-1:-1:-1;;;;;34618:157:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34797:59;34811:4;34817:8;34827:10;34839:2;34843:6;34851:4;34797:13;:59::i;:::-;34782:128;;;;;;;-1:-1:-1;;;;;34782:128:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34974:90;34988:4;34994:8;35004:10;35016:11;35029:4;35035:28;35045:4;35051:11;35035:9;:28::i;34974:90::-;34959:163;;;;;;;-1:-1:-1;;;;;34959:163:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22196:215;22282:11;22301:10;22352:15;22324:44;;;;;;;;;;;;;-1:-1:-1;;;;;22324:44:8;-1:-1:-1;;;;;22324:44:8;-1:-1:-1;;;22324:44:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;22324:44:8;;;22314:55;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;22791:215:8;22877:11;22896:10;22947:15;22919:44;;;;;;;;;;;;;-1:-1:-1;;;;;22919:44:8;-1:-1:-1;;;;;22919:44:8;-1:-1:-1;;;22919:44:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;22919:44:8;;;22909:55;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;23386:215:8;23472:11;23491:10;23542:15;23514:44;;;;;;;;;;;;;-1:-1:-1;;;;;23514:44:8;-1:-1:-1;;;;;23514:44:8;-1:-1:-1;;;23514:44:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;23514:44:8;;;23504:55;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;23976:218:8;24063:12;24083:10;24135:15;24106:45;;;;;;;;;;;;;-1:-1:-1;;;;;24106:45:8;-1:-1:-1;;;;;24106:45:8;-1:-1:-1;;;24106:45:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;24106:45:8;;;24096:56;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;24582:217:8;24668:12;24688:10;24739:15;24711:44;;;;;;;;;;;;;-1:-1:-1;;;;;24711:44:8;-1:-1:-1;;;;;24711:44:8;-1:-1:-1;;;24711:44:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;24711:44:8;;;24701:55;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;24701:55:8;;;;;;;;;;;;24769:12;;:25;;;;;;;;;;;24701:55;;-1:-1:-1;;;;;;24769:12:8;;;;-1:-1:-1;24769:21:8;;-1:-1:-1;24769:25:8;;;;;-1:-1:-1;;;24769:25:8;;;;;;-1:-1:-1;24769:12:8;:25;;;5:2:-1;;;;30:1;27;20:12;28058:325:8;28178:14;28200:10;28259:8;28269:34;28289:4;28295:7;28269:19;:34::i;:::-;28305;28325:4;28331:7;28305:19;:34::i;:::-;28223:117;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;28223:117:8;;;;;;;-1:-1:-1;;;;;28223:117:8;-1:-1:-1;;;;;28223:117:8;-1:-1:-1;;;28223:117:8;;;;;;-1:-1:-1;;;;;28223:117:8;-1:-1:-1;;;;;28223:117:8;-1:-1:-1;;;28223:117:8;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;28223:117:8;;;28213:128;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;28213:128:8;;;;;;;;;;;;28354:12;;-1:-1:-1;;;;;28354:24:8;;;;;;;;;;28213:128;;-1:-1:-1;;;;;;28354:12:8;;;;-1:-1:-1;28354:20:8;;-1:-1:-1;28354:24:8;;;;;263:2:-1;;-1:-1;28354:24:8;;;;;;;-1:-1:-1;28354:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;28354:24:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28354:24:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28354:24:8;;28058:325;-1:-1:-1;;;;;;28058:325:8:o;2465:366::-;2585:45;;;;;;;;;;;;-1:-1:-1;;;2624:4:8;2585:45;;;;;;;22:32:-1;26:21;;;22:32;6:49;;2585:45:8;;;;;;;;2575:56;;2542:12;;;;2585:45;;;;;2575:56;;;;2585:45;2575:56;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;2575:56:8;;;;;;;;;;;;2652:12;;:37;;;;;;;;;;;;;;;;;;;;;;;2575:56;;-1:-1:-1;;;;;;2652:12:8;;;;-1:-1:-1;2652:22:8;;-1:-1:-1;2575:56:8;;2652:37;;-1:-1:-1;2652:37:8;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2652:37:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2652:37:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2652:37:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2652:37:8;2637:172;;;;;;;-1:-1:-1;;;;;2637:172:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2637:172:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3236:374;3360:47;;;;;;;;;;;;-1:-1:-1;;;3401:4:8;3360:47;;;;;;;26:21:-1;;;22:32;;6:49;;3360:47:8;;;;;;;3350:58;;3317:12;;;;3360:47;;;;;3350:58;;;;3360:47;3350:58;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;4033:362:8;4151:44;;;;;;;;;;;;-1:-1:-1;;;4189:4:8;4151:44;;;;;;;22:32:-1;26:21;;;22:32;6:49;;4151:44:8;;;;;;;;4141:55;;4108:12;;;;4151:44;;;;;4141:55;;;;4151:44;4141:55;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;4847:378:8;4973:48;;;;;;;;;;;;-1:-1:-1;;;5015:4:8;4973:48;;;;;;;22:32:-1;26:21;;;22:32;6:49;;4973:48:8;;;;;;;;4963:59;;4930:12;;;;4973:48;;;;;4963:59;;;;4973:48;4963:59;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;5939:390:8;6039:12;6059:10;6117:8;6082:44;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;6082:44:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6082:44:8;;;6072:55;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;6072:55:8;;;;;;;;;;;;6148:12;;-1:-1:-1;;;;;6148:39:8;;;;;;;;;;;;;;;;6072:55;;-1:-1:-1;;;;;;6148:12:8;;;;-1:-1:-1;6148:20:8;;-1:-1:-1;6148:39:8;;;;;263:2:-1;;-1:-1;6148:39:8;;;;;;;-1:-1:-1;6148:12:8;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;6148:39:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6148:39:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6148:39:8;6133:174;;;;;;;-1:-1:-1;;;;;6133:174:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6133:174:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6320:4:8;;5939:390;-1:-1:-1;;;;5939:390:8:o;11027:375::-;11152:46;;;;;;;;;;;;-1:-1:-1;;;11192:4:8;11152:46;;;;;;;22:32:-1;26:21;;;22:32;6:49;;11152:46:8;;;;;;;;11142:57;;11109:12;;;;11152:46;;;;;11142:57;;;;11152:46;11142:57;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;11142:57:8;;;;;;;;;;;;11220:12;;:40;;;;;;;;;-1:-1:-1;;;;;11220:40:8;;;;;;;;;11142:57;;-1:-1:-1;11220:12:8;;;;;-1:-1:-1;11220:23:8;;-1:-1:-1;11220:40:8;;;;;263:2:-1;;-1:-1;11220:40:8;;;;;;;-1:-1:-1;11220:12:8;:40;;;5:2:-1;;;;30:1;27;20:12;63256:314:8;63349:12;63369:10;63424:8;63392:41;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;63392:41:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;63392:41:8;;;63382:52;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;63382:52:8;;;;;;;;;;;;63455:12;;-1:-1:-1;;;;;63455:33:8;;;;;;;;;;;;;;;;63382:52;;-1:-1:-1;;;;;;63455:12:8;;;;-1:-1:-1;63455:20:8;;-1:-1:-1;63455:33:8;;;;;263:2:-1;;-1:-1;63455:33:8;;;;;;;-1:-1:-1;63455:12:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;63455:33:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;63455:33:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;63455:33:8;63440:107;;;;;;;-1:-1:-1;;;;;63440:107:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55229:457;55322:12;;-1:-1:-1;;;;;55350:22:8;;;;55342:82;;;;;-1:-1:-1;;;;;55342:82:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55454:48;;;;;;;;;;;;-1:-1:-1;;;;;;;;55454:48:8;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;55454:48:8;;;;;;;;55444:59;;55454:48;;;;;55444:59;;;;55454:48;55444:59;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;55444:59:8;;;;;;;;;;;;55518:12;;:30;;;;;;;;;274:1:-1;55518:30:8;;;;;;55444:59;;-1:-1:-1;;;;;;55518:12:8;;;;-1:-1:-1;55518:20:8;;-1:-1:-1;55518:30:8;;;;;263:2:-1;;-1:-1;55518:30:8;;;;;;;-1:-1:-1;55518:12:8;:30;;;5:2:-1;;;;30:1;27;20:12;16402:357:8;16490:25;16523:10;16596:23;16581:7;16546:43;;;;;;;;;;;;;-1:-1:-1;;;;;16546:43:8;-1:-1:-1;;;;;16546:43:8;-1:-1:-1;;;16546:43:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16546:43:8;;;16536:54;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;16536:54:8;;;;;;;;;;;;16622:12;;:27;;;;;;;;;;;16536:54;;-1:-1:-1;;;;;;16622:12:8;;;;-1:-1:-1;16622:23:8;;-1:-1:-1;16622:27:8;;;;;263:2:-1;;-1:-1;16622:27:8;;;;;;;-1:-1:-1;16622:12:8;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;16622:27:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16622:27:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16622:27:8;;-1:-1:-1;;;;;;16659:22:8;;;16655:100;;16698:15;16691:22;;;;16655:100;16741:7;16734:14;;;;29485:277;29592:18;29618:10;29674:8;29684:34;29704:4;29710:7;29684:19;:34::i;:::-;29641:78;;;;;;;;;;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;64447:441:8;64545:11;64564:16;64619:15;64743:14;64583:30;64600:4;64583:30;;;;;;;;;;;;;;;;;;:16;:30::i;:::-;64564:49;;64637:32;64654:4;64660:8;64637:16;:32::i;:::-;64619:50;;64760:101;64850:10;64846:2;:14;64761:79;64828:11;64824:2;:15;64762:56;64812:5;64762:45;64775:31;64791:4;64797:8;64775:15;:31::i;:::-;64762:8;;:45;:12;:45;:::i;:56::-;64761:62;:79;:62;:79;:::i;64760:101::-;64743:118;64447:441;-1:-1:-1;;;;;;;64447:441:8:o;59597:1002::-;59698:12;59926:18;60291:10;59818:42;59846:4;59852:7;59818:27;:42::i;:::-;59810:109;;;;;;;-1:-1:-1;;;;;59810:109:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59947:51;59991:6;59947:39;59972:4;59978:7;59947:24;:39::i;:51::-;59926:72;;60146:13;60104:38;60128:4;60134:7;60104:23;:38::i;:::-;:55;;60089:132;;;;;-1:-1:-1;;;;;60089:132:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60358:7;60367:39;60392:4;60398:7;60367:24;:39::i;:::-;60314:93;;;;;;;;;;;;;-1:-1:-1;;;;;60314:93:8;-1:-1:-1;;;;;60314:93:8;-1:-1:-1;;;60314:93:8;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;60314:93:8;;;60304:104;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;60304:104:8;;;;;;;;;;;;60422:12;;-1:-1:-1;;;;;60422:39:8;;;;;;;;;;;;;;;;60304:104;;-1:-1:-1;;;;;;60422:12:8;;;;-1:-1:-1;60422:20:8;;-1:-1:-1;60422:39:8;;;;;263:2:-1;;-1:-1;60422:39:8;;;;;;;-1:-1:-1;60422:12:8;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;60422:39:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;60422:39:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;60422:39:8;60414:162;;;;;;;-1:-1:-1;;;;;60414:162:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;60414:162:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;60590:4:8;;59597:1002;-1:-1:-1;;;;;59597:1002:8:o;38209:943::-;38337:12;;;-1:-1:-1;;;;;38372:18:8;;;;38357:86;;;;;-1:-1:-1;;;;;38357:86:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38509:8;38519:31;38539:4;38545;38519:19;:31::i;:::-;38475:76;;;;;;-1:-1:-1;;;;;;;;;;;38475:76:8;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38475:76:8;;;;;;;-1:-1:-1;;;;;38475:76:8;-1:-1:-1;;;;;38475:76:8;-1:-1:-1;;;38475:76:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;38475:76:8;;;38465:87;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38465:87:8;;;;;;;;;;;;;;;;38450:102;;38617:8;38627:29;38647:4;38653:2;38627:19;:29::i;:::-;38583:74;;;;;;-1:-1:-1;;;;;;;;;;;38583:74:8;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38583:74:8;;;;;;;-1:-1:-1;;;;;38583:74:8;-1:-1:-1;;;;;38583:74:8;-1:-1:-1;;;38583:74:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;38583:74:8;;;38573:85;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;38573:85:8;;;;;;;;;;;;38680:12;;-1:-1:-1;;;;;38707:26:8;;;;;;;;;;38573:85;;-1:-1:-1;;;;;;38680:12:8;;;;-1:-1:-1;38680:20:8;;-1:-1:-1;38707:26:8;;:38;;-1:-1:-1;38738:6:8;;38680:12;;38707:20;;:26;;;;;;;;;;-1:-1:-1;38680:12:8;38707:26;;;5:2:-1;;;;30:1;27;20:12;5:2;38707:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38707:26:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38707:26:8;;:38;:30;:38;:::i;:::-;38680:66;;;;;-1:-1:-1;;;38680:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38680:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38680:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38680:66:8;38665:202;;;;;;;-1:-1:-1;;;;;38665:202:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;38665:202:8;;;;-1:-1:-1;;;;;;;;;;;38665:202:8;;;;-1:-1:-1;;;;;;;;;;;38665:202:8;;;;-1:-1:-1;;;;;;;;;;;38665:202:8;;;;;;;;;;;;;;;38888:12;;38915:26;;;-1:-1:-1;;;;;38915:26:8;;;;;;;;;;-1:-1:-1;;;;;38888:12:8;;;;:20;;38909:4;;38915:38;;38946:6;;38888:12;;38915:20;;:26;;;;;;;;;;;;;;38888:12;;38915:26;;;5:2:-1;;;;30:1;27;20:12;5:2;38915:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38915:26:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38915:26:8;;:38;:30;:38;:::i;:::-;38888:66;;;;;-1:-1:-1;;;38888:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38888:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38888:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38888:66:8;38873:202;;;;;;;-1:-1:-1;;;;;38873:202:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;38873:202:8;;;;-1:-1:-1;;;;;;;;;;;38873:202:8;;;;-1:-1:-1;;;;;;;;;;;38873:202:8;;;;-1:-1:-1;;;;;;;;;;;38873:202:8;;;;;;;;;;;;;;;39112:2;-1:-1:-1;;;;;39087:42:8;39106:4;-1:-1:-1;;;;;39087:42:8;;39096:8;39116:6;39124:4;39087:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;39087:42:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39087:42:8;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;39087:42:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39143:4:8;;38209:943;-1:-1:-1;;;;;;;;38209:943:8:o;39706:499::-;39815:12;39835:10;39894:8;39904:34;39924:4;39930:7;39904:19;:34::i;:::-;39940:37;39960:4;39966:10;39940:19;:37::i;:::-;39858:120;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;39858:120:8;;;;;;;-1:-1:-1;;;;;39858:120:8;-1:-1:-1;;;;;39858:120:8;-1:-1:-1;;;39858:120:8;;;;;;-1:-1:-1;;;;;39858:120:8;-1:-1:-1;;;;;39858:120:8;-1:-1:-1;;;39858:120:8;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;39858:120:8;;;39848:131;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;39848:131:8;;;;;;;;;;;;40000:12;;-1:-1:-1;;;;;40025:24:8;;;;;;;;;;39848:131;;-1:-1:-1;;;;;;40000:12:8;;;;-1:-1:-1;40000:20:8;;-1:-1:-1;39848:131:8;;40025:36;;-1:-1:-1;40054:6:8;;40000:12;;40025:20;;:24;;;;;;;;;;-1:-1:-1;40000:12:8;40025:24;;;5:2:-1;;;;30:1;27;20:12;40025:36:8;40000:62;;;;;-1:-1:-1;;;40000:62:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40000:62:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40000:62:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40000:62:8;39985:198;;;;;;;-1:-1:-1;;;;;39985:198:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;39985:198:8;;;;-1:-1:-1;;;;;;;;;;;39985:198:8;;;;-1:-1:-1;;;;;;;;;;;39985:198:8;;;;-1:-1:-1;;;;;;;;;;;39985:198:8;;;;;;;;;;;;;;25926:213;25998:25;26031:10;26054:39;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;26054:39:8;;;26044:50;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;26044:50:8;;;;;;;;;;;;26107:12;;:27;;;;;;;;;;;26044:50;;-1:-1:-1;;;;;;26107:12:8;;;;-1:-1:-1;26107:23:8;;-1:-1:-1;26107:27:8;;;;;263:2:-1;;-1:-1;26107:27:8;;;;;;;-1:-1:-1;26107:12:8;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;26107:27:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26107:27:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26107:27:8;;25926:213;-1:-1:-1;;;25926:213:8:o;301:224:2:-;359:14;;385:6;;381:35;;;408:1;401:8;;;;381:35;-1:-1:-1;433:5:2;;;437:1;433;:5;452;;;;;;;;:10;444:62;;;;;-1:-1:-1;;;;;444:62:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;697:284;755:14;857:9;873:1;869;:5;;;;;;;;;697:284;-1:-1:-1;;;;697:284:2:o;1540:174::-;1598:14;1632:5;;;1651:6;;;;1643:52;;;;;-1:-1:-1;;;;;1643:52:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63878:211:8;63962:12;63982:10;64037:8;64005:41;;;;;;;;;;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;61054:503:8;61145:12;61165;61284:13;61180:39;61205:4;61211:7;61180:24;:39::i;:::-;61165:54;;61239:3;61229:7;:13;61225:328;;;61259:4;61252:11;;;;61225:328;-1:-1:-1;61300:5:8;61356:109;61381:4;61387:7;61396:68;61408:55;61300:5;61409:39;61446:1;61409:32;61300:5;61410:16;:3;61418:7;61410:16;:7;:16;:::i;61408:55::-;61396:7;;:68;:11;:68;:::i;:::-;61356:24;:109::i;:::-;61339:187;;;;;;;-1:-1:-1;;;;;61339:187:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61542:4;61535:11;;;;61915:271;62008:11;62027:10;62094:7;62103:39;62128:4;62134:7;62103:24;:39::i;:::-;62050:93;;;;;;;;;;;;;-1:-1:-1;;;;;62050:93:8;-1:-1:-1;;;;;62050:93:8;-1:-1:-1;;;62050:93:8;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;62050:93:8;;;62040:104;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;58785:227:8;58877:10;58895;58961:7;58918:51;;;;;;;;;;;;;-1:-1:-1;;;;;58918:51:8;-1:-1:-1;;;;;58918:51:8;-1:-1:-1;;;58918:51:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;58918:51:8;;;58908:62;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;57486:228:8;57579:11;57598:10;57663:7;57621:50;;;;;;;;;;;;;-1:-1:-1;;;;;57621:50:8;-1:-1:-1;;;;;57621:50:8;-1:-1:-1;;;57621:50:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;57621:50:8;;;57611:61;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;1143:234:2;1201:14;1307:6;;;;1299:55;;;;;-1:-1:-1;;;;;1299:55:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1367:5:2;;;1143:234::o;56628:379:8:-;56729:12;56749:10;56814:7;56772:50;;;;;;;;;;;;;-1:-1:-1;;;;;56772:50:8;-1:-1:-1;;;;;56772:50:8;-1:-1:-1;;;56772:50:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;56772:50:8;;;56762:61;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;", + "source": "pragma solidity 0.4.24;\n\nimport \"./Ownable.sol\";\nimport \"./TokenIOStorage.sol\";\nimport \"./TokenIOLib.sol\";\n\n\n\n/*\nCOPYRIGHT 2018 Token, Inc.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n@title ERC20 Compliant Smart Contract for Token, Inc.\n\n@author Ryan Tate , Sean Pollock \n\n@notice Contract uses generalized storage contract, `TokenIOStorage`, for\nupgradeability of interface contract.\n\n@dev In the event that the main contract becomes deprecated, the upgraded contract\nwill be set as the owner of this contract, and use this contract's storage to\nmaintain data consistency between contract.\n*/\n\n\n\ncontract TokenIOERC20 is Ownable {\n //// @dev Set reference to TokenIOLib interface which proxies to TokenIOStorage\n using TokenIOLib for TokenIOLib.Data;\n TokenIOLib.Data lib;\n\n /**\n * @notice Constructor method for ERC20 contract\n * @param _storageContract address of TokenIOStorage contract\n */\n constructor(address _storageContract) public {\n //// @dev Set the storage contract for the interface\n //// @dev This contract will be unable to use the storage constract until\n //// @dev contract address is authorized with the storage contract\n //// @dev Once authorized, Use the `setParams` method to set storage values\n lib.Storage = TokenIOStorage(_storageContract);\n\n //// @dev set owner to contract initiator\n owner[msg.sender] = true;\n }\n\n\n /**\n @notice Sets erc20 globals and fee paramters\n @param _name Full token name 'USD by token.io'\n @param _symbol Symbol name 'USDx'\n @param _tla Three letter abbreviation 'USD'\n @param _version Release version 'v0.0.1'\n @param _decimals Decimal precision\n @param _feeContract Address of fee contract\n @return { \"success\" : \"Returns true if successfully called from another contract\"}\n */\n function setParams(\n string _name,\n string _symbol,\n string _tla,\n string _version,\n uint _decimals,\n address _feeContract,\n uint _fxUSDBPSRate\n ) onlyOwner public returns (bool success) {\n require(lib.setTokenName(_name),\n \"Error: Unable to set token name. Please check arguments.\");\n require(lib.setTokenSymbol(_symbol),\n \"Error: Unable to set token symbol. Please check arguments.\");\n require(lib.setTokenTLA(_tla),\n \"Error: Unable to set token TLA. Please check arguments.\");\n require(lib.setTokenVersion(_version),\n \"Error: Unable to set token version. Please check arguments.\");\n require(lib.setTokenDecimals(_symbol, _decimals),\n \"Error: Unable to set token decimals. Please check arguments.\");\n require(lib.setFeeContract(_feeContract),\n \"Error: Unable to set fee contract. Please check arguments.\");\n require(lib.setFxUSDBPSRate(_symbol, _fxUSDBPSRate),\n \"Error: Unable to set fx USD basis points rate. Please check arguments.\");\n return true;\n }\n\n /**\n * @notice Gets name of token\n * @return {\"_name\" : \"Returns name of token\"}\n */\n function name() public view returns (string _name) {\n return lib.getTokenName(address(this));\n }\n\n /**\n * @notice Gets symbol of token\n * @return {\"_symbol\" : \"Returns symbol of token\"}\n */\n function symbol() public view returns (string _symbol) {\n return lib.getTokenSymbol(address(this));\n }\n\n /**\n * @notice Gets three-letter-abbreviation of token\n * @return {\"_tla\" : \"Returns three-letter-abbreviation of token\"}\n */\n function tla() public view returns (string _tla) {\n return lib.getTokenTLA(address(this));\n }\n\n /**\n * @notice Gets version of token\n * @return {\"_version\" : \"Returns version of token\"}\n */\n function version() public view returns (string _version) {\n return lib.getTokenVersion(address(this));\n }\n\n /**\n * @notice Gets decimals of token\n * @return {\"_decimals\" : \"Returns number of decimals\"}\n */\n function decimals() public view returns (uint _decimals) {\n return lib.getTokenDecimals(lib.getTokenSymbol(address(this)));\n }\n\n /**\n * @notice Gets total supply of token\n * @return {\"supply\" : \"Returns current total supply of token\"}\n */\n function totalSupply() public view returns (uint supply) {\n return lib.getTokenSupply(lib.getTokenSymbol(address(this)));\n }\n\n /**\n * @notice Gets allowance that spender has with approver\n * @param account Address of approver\n * @param spender Address of spender\n * @return {\"amount\" : \"Returns allowance of given account and spender\"}\n */\n function allowance(address account, address spender) public view returns (uint amount) {\n return lib.getTokenAllowance(lib.getTokenSymbol(address(this)), account, spender);\n }\n\n /**\n * @notice Gets balance of account\n * @param account Address for balance lookup\n * @return {\"balance\" : \"Returns balance amount\"}\n */\n function balanceOf(address account) public view returns (uint balance) {\n return lib.getTokenBalance(lib.getTokenSymbol(address(this)), account);\n }\n\n /**\n * @notice Gets fee parameters\n * @return {\n \"bps\":\"Fee amount as a mesuare of basis points\",\n \"min\":\"Minimum fee amount\",\n \"max\":\"Maximum fee amount\",\n \"flat\":\"Flat fee amount\",\n \"contract\":\"Address of fee contract\"\n }\n */\n function getFeeParams() public view returns (uint bps, uint min, uint max, uint flat, bytes feeMsg, address feeAccount) {\n address feeContract = lib.getFeeContract(address(this));\n return (\n lib.getFeeBPS(feeContract),\n lib.getFeeMin(feeContract),\n lib.getFeeMax(feeContract),\n lib.getFeeFlat(feeContract),\n lib.getFeeMsg(feeContract),\n feeContract\n );\n }\n\n /**\n * @notice Calculates fee of a given transfer amount\n * @param amount Amount to calculcate fee value\n * @return {\"fees\": \"Returns the calculated transaction fees based on the fee contract parameters\"}\n */\n function calculateFees(uint amount) public view returns (uint fees) {\n return lib.calculateFees(lib.getFeeContract(address(this)), amount);\n }\n\n /**\n * @notice transfers 'amount' from msg.sender to a receiving account 'to'\n * @param to Receiving address\n * @param amount Transfer amount\n * @return {\"success\" : \"Returns true if transfer succeeds\"}\n */\n function transfer(address to, uint amount) public notDeprecated returns (bool success) {\n /// @notice send transfer through library\n /// @dev !!! mutates storage state\n require(\n lib.transfer(lib.getTokenSymbol(address(this)), to, amount, \"0x0\"),\n \"Error: Unable to transfer funds. Please check your parameters.\"\n );\n return true;\n }\n\n /**\n * @notice spender transfers from approvers account to the reciving account\n * @param from Approver's address\n * @param to Receiving address\n * @param amount Transfer amount\n * @return {\"success\" : \"Returns true if transferFrom succeeds\"}\n */\n function transferFrom(address from, address to, uint amount) public notDeprecated returns (bool success) {\n /// @notice sends transferFrom through library\n /// @dev !!! mutates storage state\n require(\n lib.transferFrom(lib.getTokenSymbol(address(this)), from, to, amount, \"0x0\"),\n \"Error: Unable to transfer funds. Please check your parameters and ensure the spender has the approved amount of funds to transfer.\"\n );\n return true;\n }\n\n /**\n * @notice approves spender a given amount\n * @param spender Spender's address\n * @param amount Allowance amount\n * @return {\"success\" : \"Returns true if approve succeeds\"}\n */\n function approve(address spender, uint amount) public notDeprecated returns (bool success) {\n /// @notice sends approve through library\n /// @dev !!! mtuates storage states\n require(\n lib.approveAllowance(spender, amount),\n \"Error: Unable to approve allowance for spender. Please ensure spender is not null and does not have a frozen balance.\"\n );\n return true;\n }\n\n /**\n * @notice gets currency status of contract\n * @return {\"deprecated\" : \"Returns true if deprecated, false otherwise\"}\n */\n function deprecateInterface() public onlyOwner returns (bool deprecated) {\n require(lib.setDeprecatedContract(address(this)),\n \"Error: Unable to deprecate contract!\");\n return true;\n }\n\n modifier notDeprecated() {\n /// @notice throws if contract is deprecated\n require(!lib.isContractDeprecated(address(this)),\n \"Error: Contract has been deprecated, cannot perform operation!\");\n _;\n }\n\n }\n", + "sourcePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOERC20.sol", + "ast": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOERC20.sol", + "exportedSymbols": { + "TokenIOERC20": [ + 1351 + ] + }, + "id": 1352, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 924, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:5" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 925, + "nodeType": "ImportDirective", + "scope": 1352, + "sourceUnit": 185, + "src": "25:23:5", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 926, + "nodeType": "ImportDirective", + "scope": 1352, + "sourceUnit": 5242, + "src": "49:30:5", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 927, + "nodeType": "ImportDirective", + "scope": 1352, + "sourceUnit": 4623, + "src": "80:26:5", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 928, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "1085:7:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 929, + "nodeType": "InheritanceSpecifier", + "src": "1085:7:5" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 1351, + "linearizedBaseContracts": [ + 1351, + 184 + ], + "name": "TokenIOERC20", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 932, + "libraryName": { + "contractScope": null, + "id": 930, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4622, + "src": "1185:10:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4622", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "1179:37:5", + "typeName": { + "contractScope": null, + "id": 931, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1200:15:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 934, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 1351, + "src": "1219:19:5", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 933, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1219:15:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 954, + "nodeType": "Block", + "src": "1416:420:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 945, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 939, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "1708:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 941, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1645, + "src": "1708:11:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 943, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 936, + "src": "1737:16:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 942, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5241, + "src": "1722:14:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5241_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 944, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1722:32:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1708:46:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "id": 946, + "nodeType": "ExpressionStatement", + "src": "1708:46:5" + }, + { + "expression": { + "argumentTypes": null, + "id": 952, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 947, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1807:5:5", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 950, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 948, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "1813:3:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 949, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1813:10:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1807:17:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 951, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1827:4:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1807:24:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 953, + "nodeType": "ExpressionStatement", + "src": "1807:24:5" + } + ] + }, + "documentation": "@notice Constructor method for ERC20 contract\n@param _storageContract address of TokenIOStorage contract", + "id": 955, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 937, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 936, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 955, + "src": "1383:24:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 935, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1383:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1382:26:5" + }, + "payable": false, + "returnParameters": { + "id": 938, + "nodeType": "ParameterList", + "parameters": [], + "src": "1416:0:5" + }, + "scope": 1351, + "src": "1371:465:5", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1036, + "nodeType": "Block", + "src": "2453:860:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 979, + "name": "_name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 957, + "src": "2486:5:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 977, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "2469:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 978, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setTokenName", + "nodeType": "MemberAccess", + "referencedDeclaration": 1762, + "src": "2469:16:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) returns (bool)" + } + }, + "id": 980, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2469:23:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420746f6b656e206e616d652e20506c6561736520636865636b20617267756d656e74732e", + "id": 981, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2502:58:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_141dfda9ec7d030d71a0272572dd425cf90676e5296d5f58002425f3caea3960", + "typeString": "literal_string \"Error: Unable to set token name. Please check arguments.\"" + }, + "value": "Error: Unable to set token name. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_141dfda9ec7d030d71a0272572dd425cf90676e5296d5f58002425f3caea3960", + "typeString": "literal_string \"Error: Unable to set token name. Please check arguments.\"" + } + ], + "id": 976, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2461:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 982, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2461:100:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 983, + "nodeType": "ExpressionStatement", + "src": "2461:100:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 987, + "name": "_symbol", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 959, + "src": "2596:7:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 985, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "2577:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 986, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 1796, + "src": "2577:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) returns (bool)" + } + }, + "id": 988, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2577:27:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420746f6b656e2073796d626f6c2e20506c6561736520636865636b20617267756d656e74732e", + "id": 989, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2614:60:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_a4d419aaf1b7e0c1b217a216005ff121a20a3a58ed5048acbd3d22a85502af69", + "typeString": "literal_string \"Error: Unable to set token symbol. Please check arguments.\"" + }, + "value": "Error: Unable to set token symbol. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_a4d419aaf1b7e0c1b217a216005ff121a20a3a58ed5048acbd3d22a85502af69", + "typeString": "literal_string \"Error: Unable to set token symbol. Please check arguments.\"" + } + ], + "id": 984, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2569:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 990, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2569:106:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 991, + "nodeType": "ExpressionStatement", + "src": "2569:106:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 995, + "name": "_tla", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 961, + "src": "2707:4:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 993, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "2691:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 994, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setTokenTLA", + "nodeType": "MemberAccess", + "referencedDeclaration": 1830, + "src": "2691:15:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) returns (bool)" + } + }, + "id": 996, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2691:21:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420746f6b656e20544c412e20506c6561736520636865636b20617267756d656e74732e", + "id": 997, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2722:57:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7221954eb7ab5ca7d7e112df96ffa1ba108181fc69cf565d48f56781bc167176", + "typeString": "literal_string \"Error: Unable to set token TLA. Please check arguments.\"" + }, + "value": "Error: Unable to set token TLA. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7221954eb7ab5ca7d7e112df96ffa1ba108181fc69cf565d48f56781bc167176", + "typeString": "literal_string \"Error: Unable to set token TLA. Please check arguments.\"" + } + ], + "id": 992, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2683:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 998, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2683:97:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 999, + "nodeType": "ExpressionStatement", + "src": "2683:97:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1003, + "name": "_version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 963, + "src": "2816:8:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 1001, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "2796:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1002, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setTokenVersion", + "nodeType": "MemberAccess", + "referencedDeclaration": 1864, + "src": "2796:19:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) returns (bool)" + } + }, + "id": 1004, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2796:29:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420746f6b656e2076657273696f6e2e20506c6561736520636865636b20617267756d656e74732e", + "id": 1005, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2835:61:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0e049f6dc7ca1210cdbb63f5bd5546abce5203f36e68544787d7650cbf630ddb", + "typeString": "literal_string \"Error: Unable to set token version. Please check arguments.\"" + }, + "value": "Error: Unable to set token version. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0e049f6dc7ca1210cdbb63f5bd5546abce5203f36e68544787d7650cbf630ddb", + "typeString": "literal_string \"Error: Unable to set token version. Please check arguments.\"" + } + ], + "id": 1000, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2788:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1006, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2788:109:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1007, + "nodeType": "ExpressionStatement", + "src": "2788:109:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1011, + "name": "_symbol", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 959, + "src": "2934:7:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1012, + "name": "_decimals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 965, + "src": "2943:9:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1009, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "2913:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1010, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setTokenDecimals", + "nodeType": "MemberAccess", + "referencedDeclaration": 1898, + "src": "2913:20:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,uint256) returns (bool)" + } + }, + "id": 1013, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2913:40:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420746f6b656e20646563696d616c732e20506c6561736520636865636b20617267756d656e74732e", + "id": 1014, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2963:62:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_984353017a3e5d4b2995ed8ec56faa3d144c96f6e7a16298eed064720b2a0901", + "typeString": "literal_string \"Error: Unable to set token decimals. Please check arguments.\"" + }, + "value": "Error: Unable to set token decimals. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_984353017a3e5d4b2995ed8ec56faa3d144c96f6e7a16298eed064720b2a0901", + "typeString": "literal_string \"Error: Unable to set token decimals. Please check arguments.\"" + } + ], + "id": 1008, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2905:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1015, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2905:121:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1016, + "nodeType": "ExpressionStatement", + "src": "2905:121:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1020, + "name": "_feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 967, + "src": "3061:12:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1018, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "3042:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1019, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2102, + "src": "3042:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) returns (bool)" + } + }, + "id": 1021, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3042:32:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e74726163742e20506c6561736520636865636b20617267756d656e74732e", + "id": 1022, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3084:60:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d56731c6af5d7a18359bcc1d0d4d9e58ed62ffcb6e170e5fa9cb217035b6bedf", + "typeString": "literal_string \"Error: Unable to set fee contract. Please check arguments.\"" + }, + "value": "Error: Unable to set fee contract. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d56731c6af5d7a18359bcc1d0d4d9e58ed62ffcb6e170e5fa9cb217035b6bedf", + "typeString": "literal_string \"Error: Unable to set fee contract. Please check arguments.\"" + } + ], + "id": 1017, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "3034:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1023, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3034:111:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1024, + "nodeType": "ExpressionStatement", + "src": "3034:111:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1028, + "name": "_symbol", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 959, + "src": "3181:7:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1029, + "name": "_fxUSDBPSRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 969, + "src": "3190:13:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1026, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "3161:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1027, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFxUSDBPSRate", + "nodeType": "MemberAccess", + "referencedDeclaration": 4542, + "src": "3161:19:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,uint256) returns (bool)" + } + }, + "id": 1030, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3161:43:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066782055534420626173697320706f696e747320726174652e20506c6561736520636865636b20617267756d656e74732e", + "id": 1031, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3214:72:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_089d75b9656e8f27becbd3baa3fa44d6933e03b685d6a5a6a71eef402959560e", + "typeString": "literal_string \"Error: Unable to set fx USD basis points rate. Please check arguments.\"" + }, + "value": "Error: Unable to set fx USD basis points rate. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_089d75b9656e8f27becbd3baa3fa44d6933e03b685d6a5a6a71eef402959560e", + "typeString": "literal_string \"Error: Unable to set fx USD basis points rate. Please check arguments.\"" + } + ], + "id": 1025, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "3153:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1032, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3153:134:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1033, + "nodeType": "ExpressionStatement", + "src": "3153:134:5" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1034, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3302:4:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 975, + "id": 1035, + "nodeType": "Return", + "src": "3295:11:5" + } + ] + }, + "documentation": "@notice Sets erc20 globals and fee paramters\n@param _name Full token name 'USD by token.io'\n@param _symbol Symbol name 'USDx'\n@param _tla Three letter abbreviation 'USD'\n@param _version Release version 'v0.0.1'\n@param _decimals Decimal precision\n@param _feeContract Address of fee contract\n@return { \"success\" : \"Returns true if successfully called from another contract\"}", + "id": 1037, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 972, + "modifierName": { + "argumentTypes": null, + "id": 971, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "2413:9:5", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2413:9:5" + } + ], + "name": "setParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 970, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 957, + "name": "_name", + "nodeType": "VariableDeclaration", + "scope": 1037, + "src": "2266:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 956, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2266:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 959, + "name": "_symbol", + "nodeType": "VariableDeclaration", + "scope": 1037, + "src": "2284:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 958, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2284:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 961, + "name": "_tla", + "nodeType": "VariableDeclaration", + "scope": 1037, + "src": "2304:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 960, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2304:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 963, + "name": "_version", + "nodeType": "VariableDeclaration", + "scope": 1037, + "src": "2321:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 962, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2321:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 965, + "name": "_decimals", + "nodeType": "VariableDeclaration", + "scope": 1037, + "src": "2342:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 964, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2342:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 967, + "name": "_feeContract", + "nodeType": "VariableDeclaration", + "scope": 1037, + "src": "2362:20:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 966, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2362:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 969, + "name": "_fxUSDBPSRate", + "nodeType": "VariableDeclaration", + "scope": 1037, + "src": "2388:18:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 968, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2388:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2260:152:5" + }, + "payable": false, + "returnParameters": { + "id": 975, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 974, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1037, + "src": "2439:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 973, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2439:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2438:14:5" + }, + "scope": 1351, + "src": "2242:1071:5", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1049, + "nodeType": "Block", + "src": "3468:53:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1045, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "3508:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1044, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3500:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1046, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3500:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1042, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "3483:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1043, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenName", + "nodeType": "MemberAccess", + "referencedDeclaration": 2408, + "src": "3483:16:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1047, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3483:31:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 1041, + "id": 1048, + "nodeType": "Return", + "src": "3476:38:5" + } + ] + }, + "documentation": "@notice Gets name of token\n@return {\"_name\" : \"Returns name of token\"}", + "id": 1050, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "name", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1038, + "nodeType": "ParameterList", + "parameters": [], + "src": "3430:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1041, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1040, + "name": "_name", + "nodeType": "VariableDeclaration", + "scope": 1050, + "src": "3454:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1039, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3454:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3453:14:5" + }, + "scope": 1351, + "src": "3417:104:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1062, + "nodeType": "Block", + "src": "3686:55:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1058, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "3728:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1057, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3720:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1059, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3720:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1055, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "3701:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1056, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2434, + "src": "3701:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1060, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3701:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 1054, + "id": 1061, + "nodeType": "Return", + "src": "3694:40:5" + } + ] + }, + "documentation": "@notice Gets symbol of token\n@return {\"_symbol\" : \"Returns symbol of token\"}", + "id": 1063, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "symbol", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1051, + "nodeType": "ParameterList", + "parameters": [], + "src": "3646:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1054, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1053, + "name": "_symbol", + "nodeType": "VariableDeclaration", + "scope": 1063, + "src": "3670:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1052, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3670:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3669:16:5" + }, + "scope": 1351, + "src": "3631:110:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1075, + "nodeType": "Block", + "src": "3935:52:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1071, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "3974:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1070, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3966:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1072, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3966:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1068, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "3950:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1069, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenTLA", + "nodeType": "MemberAccess", + "referencedDeclaration": 2460, + "src": "3950:15:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1073, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3950:30:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 1067, + "id": 1074, + "nodeType": "Return", + "src": "3943:37:5" + } + ] + }, + "documentation": "@notice Gets three-letter-abbreviation of token\n@return {\"_tla\" : \"Returns three-letter-abbreviation of token\"}", + "id": 1076, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "tla", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1064, + "nodeType": "ParameterList", + "parameters": [], + "src": "3898:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1067, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1066, + "name": "_tla", + "nodeType": "VariableDeclaration", + "scope": 1076, + "src": "3922:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1065, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3922:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3921:13:5" + }, + "scope": 1351, + "src": "3886:101:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1088, + "nodeType": "Block", + "src": "4157:56:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1084, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "4200:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1083, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4192:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1085, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4192:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1081, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "4172:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1082, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenVersion", + "nodeType": "MemberAccess", + "referencedDeclaration": 2486, + "src": "4172:19:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1086, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4172:34:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 1080, + "id": 1087, + "nodeType": "Return", + "src": "4165:41:5" + } + ] + }, + "documentation": "@notice Gets version of token\n@return {\"_version\" : \"Returns version of token\"}", + "id": 1089, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "version", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1077, + "nodeType": "ParameterList", + "parameters": [], + "src": "4116:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1080, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1079, + "name": "_version", + "nodeType": "VariableDeclaration", + "scope": 1089, + "src": "4140:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1078, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "4140:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4139:17:5" + }, + "scope": 1351, + "src": "4100:113:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1104, + "nodeType": "Block", + "src": "4387:77:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1099, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "4450:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1098, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4442:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1100, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4442:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1096, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "4423:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1097, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2434, + "src": "4423:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1101, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4423:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 1094, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "4402:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1095, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenDecimals", + "nodeType": "MemberAccess", + "referencedDeclaration": 2512, + "src": "4402:20:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) view returns (uint256)" + } + }, + "id": 1102, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4402:55:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1093, + "id": 1103, + "nodeType": "Return", + "src": "4395:62:5" + } + ] + }, + "documentation": "@notice Gets decimals of token\n@return {\"_decimals\" : \"Returns number of decimals\"}", + "id": 1105, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "decimals", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1090, + "nodeType": "ParameterList", + "parameters": [], + "src": "4347:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1093, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1092, + "name": "_decimals", + "nodeType": "VariableDeclaration", + "scope": 1105, + "src": "4371:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1091, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "4371:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4370:16:5" + }, + "scope": 1351, + "src": "4330:134:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1120, + "nodeType": "Block", + "src": "4650:75:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1115, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "4711:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1114, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4703:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1116, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4703:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1112, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "4684:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1113, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2434, + "src": "4684:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1117, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4684:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 1110, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "4665:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1111, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSupply", + "nodeType": "MemberAccess", + "referencedDeclaration": 2762, + "src": "4665:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) view returns (uint256)" + } + }, + "id": 1118, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4665:53:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1109, + "id": 1119, + "nodeType": "Return", + "src": "4658:60:5" + } + ] + }, + "documentation": "@notice Gets total supply of token\n@return {\"supply\" : \"Returns current total supply of token\"}", + "id": 1121, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "totalSupply", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1106, + "nodeType": "ParameterList", + "parameters": [], + "src": "4613:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1109, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1108, + "name": "supply", + "nodeType": "VariableDeclaration", + "scope": 1121, + "src": "4637:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1107, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "4637:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4636:13:5" + }, + "scope": 1351, + "src": "4593:132:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1142, + "nodeType": "Block", + "src": "5050:96:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1135, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "5114:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1134, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5106:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1136, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5106:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1132, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "5087:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1133, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2434, + "src": "5087:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1137, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5087:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1138, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1123, + "src": "5122:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1139, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1125, + "src": "5131:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1130, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "5065:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1131, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenAllowance", + "nodeType": "MemberAccess", + "referencedDeclaration": 2800, + "src": "5065:21:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,address) view returns (uint256)" + } + }, + "id": 1140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5065:74:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1129, + "id": 1141, + "nodeType": "Return", + "src": "5058:81:5" + } + ] + }, + "documentation": "@notice Gets allowance that spender has with approver\n@param account Address of approver\n@param spender Address of spender\n@return {\"amount\" : \"Returns allowance of given account and spender\"}", + "id": 1143, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "allowance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1126, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1123, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 1143, + "src": "4982:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1122, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4982:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1125, + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 1143, + "src": "4999:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1124, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4999:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4981:34:5" + }, + "payable": false, + "returnParameters": { + "id": 1129, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1128, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1143, + "src": "5037:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1127, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5037:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5036:13:5" + }, + "scope": 1351, + "src": "4963:183:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1161, + "nodeType": "Block", + "src": "5377:85:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1155, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "5439:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1154, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5431:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1156, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5431:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1152, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "5412:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1153, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2434, + "src": "5412:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1157, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5412:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1158, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1145, + "src": "5447:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1150, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "5392:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1151, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenBalance", + "nodeType": "MemberAccess", + "referencedDeclaration": 2832, + "src": "5392:19:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address) view returns (uint256)" + } + }, + "id": 1159, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5392:63:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1149, + "id": 1160, + "nodeType": "Return", + "src": "5385:70:5" + } + ] + }, + "documentation": "@notice Gets balance of account\n@param account Address for balance lookup\n@return {\"balance\" : \"Returns balance amount\"}", + "id": 1162, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "balanceOf", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1146, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1145, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 1162, + "src": "5325:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1144, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5325:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5324:17:5" + }, + "payable": false, + "returnParameters": { + "id": 1149, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1148, + "name": "balance", + "nodeType": "VariableDeclaration", + "scope": 1162, + "src": "5363:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1147, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5363:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5362:14:5" + }, + "scope": 1351, + "src": "5306:156:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1209, + "nodeType": "Block", + "src": "5859:295:5", + "statements": [ + { + "assignments": [ + 1178 + ], + "declarations": [ + { + "constant": false, + "id": 1178, + "name": "feeContract", + "nodeType": "VariableDeclaration", + "scope": 1210, + "src": "5867:19:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1177, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5867:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1185, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1182, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "5916:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1181, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5908:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1183, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5908:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1179, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "5889:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1180, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2736, + "src": "5889:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 1184, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5889:33:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5867:55:5" + }, + { + "expression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1188, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1178, + "src": "5961:11:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1186, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "5947:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1187, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeBPS", + "nodeType": "MemberAccess", + "referencedDeclaration": 2538, + "src": "5947:13:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1189, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5947:26:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1192, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1178, + "src": "5997:11:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1190, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "5983:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1191, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMin", + "nodeType": "MemberAccess", + "referencedDeclaration": 2564, + "src": "5983:13:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1193, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5983:26:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1196, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1178, + "src": "6033:11:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1194, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "6019:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1195, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMax", + "nodeType": "MemberAccess", + "referencedDeclaration": 2590, + "src": "6019:13:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1197, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6019:26:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1200, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1178, + "src": "6070:11:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1198, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "6055:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1199, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeFlat", + "nodeType": "MemberAccess", + "referencedDeclaration": 2616, + "src": "6055:14:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1201, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6055:27:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1204, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1178, + "src": "6106:11:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1202, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "6092:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1203, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMsg", + "nodeType": "MemberAccess", + "referencedDeclaration": 2642, + "src": "6092:13:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bytes memory)" + } + }, + "id": 1205, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6092:26:5", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "argumentTypes": null, + "id": 1206, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1178, + "src": "6128:11:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 1207, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5937:210:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_address_$", + "typeString": "tuple(uint256,uint256,uint256,uint256,bytes memory,address)" + } + }, + "functionReturnParameters": 1176, + "id": 1208, + "nodeType": "Return", + "src": "5930:217:5" + } + ] + }, + "documentation": "@notice Gets fee parameters\n@return {\n\"bps\":\"Fee amount as a mesuare of basis points\",\n\"min\":\"Minimum fee amount\",\n\"max\":\"Maximum fee amount\",\n\"flat\":\"Flat fee amount\",\n\"contract\":\"Address of fee contract\"\n}", + "id": 1210, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getFeeParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1163, + "nodeType": "ParameterList", + "parameters": [], + "src": "5760:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1176, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1165, + "name": "bps", + "nodeType": "VariableDeclaration", + "scope": 1210, + "src": "5784:8:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1164, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5784:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1167, + "name": "min", + "nodeType": "VariableDeclaration", + "scope": 1210, + "src": "5794:8:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1166, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5794:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1169, + "name": "max", + "nodeType": "VariableDeclaration", + "scope": 1210, + "src": "5804:8:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1168, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5804:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1171, + "name": "flat", + "nodeType": "VariableDeclaration", + "scope": 1210, + "src": "5814:9:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1170, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5814:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1173, + "name": "feeMsg", + "nodeType": "VariableDeclaration", + "scope": 1210, + "src": "5825:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1172, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5825:5:5", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1175, + "name": "feeAccount", + "nodeType": "VariableDeclaration", + "scope": 1210, + "src": "5839:18:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1174, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5839:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5783:75:5" + }, + "scope": 1351, + "src": "5739:415:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1228, + "nodeType": "Block", + "src": "6453:82:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1222, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "6513:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1221, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6505:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1223, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6505:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1219, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "6486:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1220, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2736, + "src": "6486:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 1224, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6486:33:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1225, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1212, + "src": "6521:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1217, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "6468:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1218, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "calculateFees", + "nodeType": "MemberAccess", + "referencedDeclaration": 3004, + "src": "6468:17:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) view returns (uint256)" + } + }, + "id": 1226, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6468:60:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1216, + "id": 1227, + "nodeType": "Return", + "src": "6461:67:5" + } + ] + }, + "documentation": "@notice Calculates fee of a given transfer amount\n@param amount Amount to calculcate fee value\n@return {\"fees\": \"Returns the calculated transaction fees based on the fee contract parameters\"}", + "id": 1229, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "calculateFees", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1213, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1212, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1229, + "src": "6408:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1211, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "6408:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6407:13:5" + }, + "payable": false, + "returnParameters": { + "id": 1216, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1215, + "name": "fees", + "nodeType": "VariableDeclaration", + "scope": 1229, + "src": "6442:9:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1214, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "6442:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6441:11:5" + }, + "scope": 1351, + "src": "6385:150:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1258, + "nodeType": "Block", + "src": "6854:288:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1246, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "7008:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1245, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7000:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1247, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7000:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1243, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "6981:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1244, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2434, + "src": "6981:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1248, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6981:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1249, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1231, + "src": "7016:2:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1250, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1233, + "src": "7020:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "hexValue": "307830", + "id": 1251, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7028:5:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_77b7d82d931e1a403db0240b08c0716665eec4664af617c457918e4a67bc1810", + "typeString": "literal_string \"0x0\"" + }, + "value": "0x0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_stringliteral_77b7d82d931e1a403db0240b08c0716665eec4664af617c457918e4a67bc1810", + "typeString": "literal_string \"0x0\"" + } + ], + "expression": { + "argumentTypes": null, + "id": 1241, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "6968:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1242, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "transfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 3156, + "src": "6968:12:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,uint256,bytes memory) returns (bool)" + } + }, + "id": 1252, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6968:66:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207472616e736665722066756e64732e20506c6561736520636865636b20796f757220706172616d65746572732e", + "id": 1253, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7044:64:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7b56f975cae833aef0f2ad6bba848437a58a03519ddd4635658465a8db99bc8b", + "typeString": "literal_string \"Error: Unable to transfer funds. Please check your parameters.\"" + }, + "value": "Error: Unable to transfer funds. Please check your parameters." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7b56f975cae833aef0f2ad6bba848437a58a03519ddd4635658465a8db99bc8b", + "typeString": "literal_string \"Error: Unable to transfer funds. Please check your parameters.\"" + } + ], + "id": 1240, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "6951:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1254, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6951:165:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1255, + "nodeType": "ExpressionStatement", + "src": "6951:165:5" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1256, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7131:4:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1239, + "id": 1257, + "nodeType": "Return", + "src": "7124:11:5" + } + ] + }, + "documentation": "@notice transfers 'amount' from msg.sender to a receiving account 'to'\n@param to Receiving address\n@param amount Transfer amount\n@return {\"success\" : \"Returns true if transfer succeeds\"}", + "id": 1259, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 1236, + "modifierName": { + "argumentTypes": null, + "id": 1235, + "name": "notDeprecated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1350, + "src": "6817:13:5", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "6817:13:5" + } + ], + "name": "transfer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1234, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1231, + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 1259, + "src": "6785:10:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1230, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6785:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1233, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1259, + "src": "6797:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1232, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "6797:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6784:25:5" + }, + "payable": false, + "returnParameters": { + "id": 1239, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1238, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1259, + "src": "6840:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1237, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6840:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6839:14:5" + }, + "scope": 1351, + "src": "6767:375:5", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1291, + "nodeType": "Block", + "src": "7522:371:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1278, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "7685:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1277, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7677:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1279, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7677:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1275, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "7658:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1276, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2434, + "src": "7658:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1280, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7658:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1281, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1261, + "src": "7693:4:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1282, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1263, + "src": "7699:2:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1283, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1265, + "src": "7703:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "hexValue": "307830", + "id": 1284, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7711:5:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_77b7d82d931e1a403db0240b08c0716665eec4664af617c457918e4a67bc1810", + "typeString": "literal_string \"0x0\"" + }, + "value": "0x0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_stringliteral_77b7d82d931e1a403db0240b08c0716665eec4664af617c457918e4a67bc1810", + "typeString": "literal_string \"0x0\"" + } + ], + "expression": { + "argumentTypes": null, + "id": 1273, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "7641:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1274, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "transferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 3252, + "src": "7641:16:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,address,uint256,bytes memory) returns (bool)" + } + }, + "id": 1285, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7641:76:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207472616e736665722066756e64732e20506c6561736520636865636b20796f757220706172616d657465727320616e6420656e7375726520746865207370656e646572206861732074686520617070726f76656420616d6f756e74206f662066756e647320746f207472616e736665722e", + "id": 1286, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7727:132:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_90b3ee7dad40e5e7ebb3851f6571fdf83a7fec9d6544d7d132d092fa849919cf", + "typeString": "literal_string \"Error: Unable to transfer funds. Please check your parameters and ensure the spender has the approved amount of funds to transfer.\"" + }, + "value": "Error: Unable to transfer funds. Please check your parameters and ensure the spender has the approved amount of funds to transfer." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_90b3ee7dad40e5e7ebb3851f6571fdf83a7fec9d6544d7d132d092fa849919cf", + "typeString": "literal_string \"Error: Unable to transfer funds. Please check your parameters and ensure the spender has the approved amount of funds to transfer.\"" + } + ], + "id": 1272, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "7624:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1287, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7624:243:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1288, + "nodeType": "ExpressionStatement", + "src": "7624:243:5" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1289, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7882:4:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1271, + "id": 1290, + "nodeType": "Return", + "src": "7875:11:5" + } + ] + }, + "documentation": "@notice spender transfers from approvers account to the reciving account\n@param from Approver's address\n@param to Receiving address\n@param amount Transfer amount\n@return {\"success\" : \"Returns true if transferFrom succeeds\"}", + "id": 1292, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 1268, + "modifierName": { + "argumentTypes": null, + "id": 1267, + "name": "notDeprecated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1350, + "src": "7485:13:5", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "7485:13:5" + } + ], + "name": "transferFrom", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1266, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1261, + "name": "from", + "nodeType": "VariableDeclaration", + "scope": 1292, + "src": "7439:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1260, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7439:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1263, + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 1292, + "src": "7453:10:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1262, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7453:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1265, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1292, + "src": "7465:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1264, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "7465:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7438:39:5" + }, + "payable": false, + "returnParameters": { + "id": 1271, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1270, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1292, + "src": "7508:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1269, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7508:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7507:14:5" + }, + "scope": 1351, + "src": "7417:476:5", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1314, + "nodeType": "Block", + "src": "8190:315:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1306, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1294, + "src": "8326:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1307, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1296, + "src": "8335:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1304, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "8305:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1305, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "approveAllowance", + "nodeType": "MemberAccess", + "referencedDeclaration": 3524, + "src": "8305:20:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 1308, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8305:37:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20617070726f766520616c6c6f77616e636520666f72207370656e6465722e20506c6561736520656e73757265207370656e646572206973206e6f74206e756c6c20616e6420646f6573206e6f74206861766520612066726f7a656e2062616c616e63652e", + "id": 1309, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8352:119:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_10872a80d40cd7a7ea8407e27ca3b5f442e099403eb78ad6b966b1054a4f032f", + "typeString": "literal_string \"Error: Unable to approve allowance for spender. Please ensure spender is not null and does not have a frozen balance.\"" + }, + "value": "Error: Unable to approve allowance for spender. Please ensure spender is not null and does not have a frozen balance." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_10872a80d40cd7a7ea8407e27ca3b5f442e099403eb78ad6b966b1054a4f032f", + "typeString": "literal_string \"Error: Unable to approve allowance for spender. Please ensure spender is not null and does not have a frozen balance.\"" + } + ], + "id": 1303, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "8288:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1310, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8288:191:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1311, + "nodeType": "ExpressionStatement", + "src": "8288:191:5" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1312, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8494:4:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1302, + "id": 1313, + "nodeType": "Return", + "src": "8487:11:5" + } + ] + }, + "documentation": "@notice approves spender a given amount\n@param spender Spender's address\n@param amount Allowance amount\n@return {\"success\" : \"Returns true if approve succeeds\"}", + "id": 1315, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 1299, + "modifierName": { + "argumentTypes": null, + "id": 1298, + "name": "notDeprecated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1350, + "src": "8153:13:5", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "8153:13:5" + } + ], + "name": "approve", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1297, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1294, + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 1315, + "src": "8116:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1293, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8116:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1296, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1315, + "src": "8133:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1295, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "8133:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8115:30:5" + }, + "payable": false, + "returnParameters": { + "id": 1302, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1301, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1315, + "src": "8176:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1300, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8176:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8175:14:5" + }, + "scope": 1351, + "src": "8099:406:5", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1334, + "nodeType": "Block", + "src": "8723:131:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1326, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "8773:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1325, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8765:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1327, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8765:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1323, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "8739:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1324, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setDeprecatedContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 4188, + "src": "8739:25:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) returns (bool)" + } + }, + "id": 1328, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8739:40:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2064657072656361746520636f6e747261637421", + "id": 1329, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8789:38:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f549c81276a394c8d1eccc4a6bca4eec7c9bb1e25bd84511bd278b767e7ca4e8", + "typeString": "literal_string \"Error: Unable to deprecate contract!\"" + }, + "value": "Error: Unable to deprecate contract!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_f549c81276a394c8d1eccc4a6bca4eec7c9bb1e25bd84511bd278b767e7ca4e8", + "typeString": "literal_string \"Error: Unable to deprecate contract!\"" + } + ], + "id": 1322, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "8731:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1330, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8731:97:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1331, + "nodeType": "ExpressionStatement", + "src": "8731:97:5" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1332, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8843:4:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1321, + "id": 1333, + "nodeType": "Return", + "src": "8836:11:5" + } + ] + }, + "documentation": "@notice gets currency status of contract\n@return {\"deprecated\" : \"Returns true if deprecated, false otherwise\"}", + "id": 1335, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 1318, + "modifierName": { + "argumentTypes": null, + "id": 1317, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "8687:9:5", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "8687:9:5" + } + ], + "name": "deprecateInterface", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1316, + "nodeType": "ParameterList", + "parameters": [], + "src": "8677:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1321, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1320, + "name": "deprecated", + "nodeType": "VariableDeclaration", + "scope": 1335, + "src": "8706:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1319, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8706:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8705:17:5" + }, + "scope": 1351, + "src": "8650:204:5", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1349, + "nodeType": "Block", + "src": "8885:198:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1344, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "8952:40:5", + "subExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1341, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "8986:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1340, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8978:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1342, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8978:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1338, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "8953:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1339, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "isContractDeprecated", + "nodeType": "MemberAccess", + "referencedDeclaration": 4214, + "src": "8953:24:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bool)" + } + }, + "id": 1343, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8953:39:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20436f6e747261637420686173206265656e20646570726563617465642c2063616e6e6f7420706572666f726d206f7065726174696f6e21", + "id": 1345, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9002:64:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_a6979b55ecdc4b5fbdddeea2b203ef30bc5c99bf716d9b4a8c9faef6ad0dbbcc", + "typeString": "literal_string \"Error: Contract has been deprecated, cannot perform operation!\"" + }, + "value": "Error: Contract has been deprecated, cannot perform operation!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_a6979b55ecdc4b5fbdddeea2b203ef30bc5c99bf716d9b4a8c9faef6ad0dbbcc", + "typeString": "literal_string \"Error: Contract has been deprecated, cannot perform operation!\"" + } + ], + "id": 1337, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "8944:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1346, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8944:123:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1347, + "nodeType": "ExpressionStatement", + "src": "8944:123:5" + }, + { + "id": 1348, + "nodeType": "PlaceholderStatement", + "src": "9075:1:5" + } + ] + }, + "documentation": null, + "id": 1350, + "name": "notDeprecated", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 1336, + "nodeType": "ParameterList", + "parameters": [], + "src": "8882:2:5" + }, + "src": "8860:223:5", + "visibility": "internal" + } + ], + "scope": 1352, + "src": "1060:8028:5" + } + ], + "src": "0:9089:5" + }, + "legacyAST": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOERC20.sol", + "exportedSymbols": { + "TokenIOERC20": [ + 1351 + ] + }, + "id": 1352, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 924, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:5" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 925, + "nodeType": "ImportDirective", + "scope": 1352, + "sourceUnit": 185, + "src": "25:23:5", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 926, + "nodeType": "ImportDirective", + "scope": 1352, + "sourceUnit": 5242, + "src": "49:30:5", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 927, + "nodeType": "ImportDirective", + "scope": 1352, + "sourceUnit": 4623, + "src": "80:26:5", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 928, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "1085:7:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 929, + "nodeType": "InheritanceSpecifier", + "src": "1085:7:5" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 1351, + "linearizedBaseContracts": [ + 1351, + 184 + ], + "name": "TokenIOERC20", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 932, + "libraryName": { + "contractScope": null, + "id": 930, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4622, + "src": "1185:10:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4622", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "1179:37:5", + "typeName": { + "contractScope": null, + "id": 931, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1200:15:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 934, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 1351, + "src": "1219:19:5", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 933, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1219:15:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 954, + "nodeType": "Block", + "src": "1416:420:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 945, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 939, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "1708:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 941, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1645, + "src": "1708:11:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 943, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 936, + "src": "1737:16:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 942, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5241, + "src": "1722:14:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5241_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 944, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1722:32:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1708:46:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "id": 946, + "nodeType": "ExpressionStatement", + "src": "1708:46:5" + }, + { + "expression": { + "argumentTypes": null, + "id": 952, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 947, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1807:5:5", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 950, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 948, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "1813:3:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 949, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1813:10:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1807:17:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 951, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1827:4:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1807:24:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 953, + "nodeType": "ExpressionStatement", + "src": "1807:24:5" + } + ] + }, + "documentation": "@notice Constructor method for ERC20 contract\n@param _storageContract address of TokenIOStorage contract", + "id": 955, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 937, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 936, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 955, + "src": "1383:24:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 935, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1383:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1382:26:5" + }, + "payable": false, + "returnParameters": { + "id": 938, + "nodeType": "ParameterList", + "parameters": [], + "src": "1416:0:5" + }, + "scope": 1351, + "src": "1371:465:5", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1036, + "nodeType": "Block", + "src": "2453:860:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 979, + "name": "_name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 957, + "src": "2486:5:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 977, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "2469:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 978, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setTokenName", + "nodeType": "MemberAccess", + "referencedDeclaration": 1762, + "src": "2469:16:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) returns (bool)" + } + }, + "id": 980, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2469:23:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420746f6b656e206e616d652e20506c6561736520636865636b20617267756d656e74732e", + "id": 981, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2502:58:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_141dfda9ec7d030d71a0272572dd425cf90676e5296d5f58002425f3caea3960", + "typeString": "literal_string \"Error: Unable to set token name. Please check arguments.\"" + }, + "value": "Error: Unable to set token name. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_141dfda9ec7d030d71a0272572dd425cf90676e5296d5f58002425f3caea3960", + "typeString": "literal_string \"Error: Unable to set token name. Please check arguments.\"" + } + ], + "id": 976, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2461:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 982, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2461:100:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 983, + "nodeType": "ExpressionStatement", + "src": "2461:100:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 987, + "name": "_symbol", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 959, + "src": "2596:7:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 985, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "2577:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 986, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 1796, + "src": "2577:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) returns (bool)" + } + }, + "id": 988, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2577:27:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420746f6b656e2073796d626f6c2e20506c6561736520636865636b20617267756d656e74732e", + "id": 989, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2614:60:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_a4d419aaf1b7e0c1b217a216005ff121a20a3a58ed5048acbd3d22a85502af69", + "typeString": "literal_string \"Error: Unable to set token symbol. Please check arguments.\"" + }, + "value": "Error: Unable to set token symbol. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_a4d419aaf1b7e0c1b217a216005ff121a20a3a58ed5048acbd3d22a85502af69", + "typeString": "literal_string \"Error: Unable to set token symbol. Please check arguments.\"" + } + ], + "id": 984, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2569:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 990, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2569:106:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 991, + "nodeType": "ExpressionStatement", + "src": "2569:106:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 995, + "name": "_tla", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 961, + "src": "2707:4:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 993, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "2691:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 994, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setTokenTLA", + "nodeType": "MemberAccess", + "referencedDeclaration": 1830, + "src": "2691:15:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) returns (bool)" + } + }, + "id": 996, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2691:21:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420746f6b656e20544c412e20506c6561736520636865636b20617267756d656e74732e", + "id": 997, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2722:57:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7221954eb7ab5ca7d7e112df96ffa1ba108181fc69cf565d48f56781bc167176", + "typeString": "literal_string \"Error: Unable to set token TLA. Please check arguments.\"" + }, + "value": "Error: Unable to set token TLA. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7221954eb7ab5ca7d7e112df96ffa1ba108181fc69cf565d48f56781bc167176", + "typeString": "literal_string \"Error: Unable to set token TLA. Please check arguments.\"" + } + ], + "id": 992, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2683:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 998, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2683:97:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 999, + "nodeType": "ExpressionStatement", + "src": "2683:97:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1003, + "name": "_version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 963, + "src": "2816:8:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 1001, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "2796:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1002, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setTokenVersion", + "nodeType": "MemberAccess", + "referencedDeclaration": 1864, + "src": "2796:19:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) returns (bool)" + } + }, + "id": 1004, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2796:29:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420746f6b656e2076657273696f6e2e20506c6561736520636865636b20617267756d656e74732e", + "id": 1005, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2835:61:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0e049f6dc7ca1210cdbb63f5bd5546abce5203f36e68544787d7650cbf630ddb", + "typeString": "literal_string \"Error: Unable to set token version. Please check arguments.\"" + }, + "value": "Error: Unable to set token version. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0e049f6dc7ca1210cdbb63f5bd5546abce5203f36e68544787d7650cbf630ddb", + "typeString": "literal_string \"Error: Unable to set token version. Please check arguments.\"" + } + ], + "id": 1000, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2788:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1006, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2788:109:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1007, + "nodeType": "ExpressionStatement", + "src": "2788:109:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1011, + "name": "_symbol", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 959, + "src": "2934:7:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1012, + "name": "_decimals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 965, + "src": "2943:9:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1009, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "2913:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1010, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setTokenDecimals", + "nodeType": "MemberAccess", + "referencedDeclaration": 1898, + "src": "2913:20:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,uint256) returns (bool)" + } + }, + "id": 1013, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2913:40:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420746f6b656e20646563696d616c732e20506c6561736520636865636b20617267756d656e74732e", + "id": 1014, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2963:62:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_984353017a3e5d4b2995ed8ec56faa3d144c96f6e7a16298eed064720b2a0901", + "typeString": "literal_string \"Error: Unable to set token decimals. Please check arguments.\"" + }, + "value": "Error: Unable to set token decimals. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_984353017a3e5d4b2995ed8ec56faa3d144c96f6e7a16298eed064720b2a0901", + "typeString": "literal_string \"Error: Unable to set token decimals. Please check arguments.\"" + } + ], + "id": 1008, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2905:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1015, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2905:121:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1016, + "nodeType": "ExpressionStatement", + "src": "2905:121:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1020, + "name": "_feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 967, + "src": "3061:12:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1018, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "3042:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1019, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2102, + "src": "3042:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) returns (bool)" + } + }, + "id": 1021, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3042:32:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e74726163742e20506c6561736520636865636b20617267756d656e74732e", + "id": 1022, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3084:60:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d56731c6af5d7a18359bcc1d0d4d9e58ed62ffcb6e170e5fa9cb217035b6bedf", + "typeString": "literal_string \"Error: Unable to set fee contract. Please check arguments.\"" + }, + "value": "Error: Unable to set fee contract. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d56731c6af5d7a18359bcc1d0d4d9e58ed62ffcb6e170e5fa9cb217035b6bedf", + "typeString": "literal_string \"Error: Unable to set fee contract. Please check arguments.\"" + } + ], + "id": 1017, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "3034:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1023, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3034:111:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1024, + "nodeType": "ExpressionStatement", + "src": "3034:111:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1028, + "name": "_symbol", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 959, + "src": "3181:7:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1029, + "name": "_fxUSDBPSRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 969, + "src": "3190:13:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1026, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "3161:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1027, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFxUSDBPSRate", + "nodeType": "MemberAccess", + "referencedDeclaration": 4542, + "src": "3161:19:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,uint256) returns (bool)" + } + }, + "id": 1030, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3161:43:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066782055534420626173697320706f696e747320726174652e20506c6561736520636865636b20617267756d656e74732e", + "id": 1031, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3214:72:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_089d75b9656e8f27becbd3baa3fa44d6933e03b685d6a5a6a71eef402959560e", + "typeString": "literal_string \"Error: Unable to set fx USD basis points rate. Please check arguments.\"" + }, + "value": "Error: Unable to set fx USD basis points rate. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_089d75b9656e8f27becbd3baa3fa44d6933e03b685d6a5a6a71eef402959560e", + "typeString": "literal_string \"Error: Unable to set fx USD basis points rate. Please check arguments.\"" + } + ], + "id": 1025, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "3153:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1032, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3153:134:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1033, + "nodeType": "ExpressionStatement", + "src": "3153:134:5" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1034, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3302:4:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 975, + "id": 1035, + "nodeType": "Return", + "src": "3295:11:5" + } + ] + }, + "documentation": "@notice Sets erc20 globals and fee paramters\n@param _name Full token name 'USD by token.io'\n@param _symbol Symbol name 'USDx'\n@param _tla Three letter abbreviation 'USD'\n@param _version Release version 'v0.0.1'\n@param _decimals Decimal precision\n@param _feeContract Address of fee contract\n@return { \"success\" : \"Returns true if successfully called from another contract\"}", + "id": 1037, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 972, + "modifierName": { + "argumentTypes": null, + "id": 971, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "2413:9:5", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2413:9:5" + } + ], + "name": "setParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 970, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 957, + "name": "_name", + "nodeType": "VariableDeclaration", + "scope": 1037, + "src": "2266:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 956, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2266:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 959, + "name": "_symbol", + "nodeType": "VariableDeclaration", + "scope": 1037, + "src": "2284:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 958, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2284:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 961, + "name": "_tla", + "nodeType": "VariableDeclaration", + "scope": 1037, + "src": "2304:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 960, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2304:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 963, + "name": "_version", + "nodeType": "VariableDeclaration", + "scope": 1037, + "src": "2321:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 962, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2321:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 965, + "name": "_decimals", + "nodeType": "VariableDeclaration", + "scope": 1037, + "src": "2342:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 964, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2342:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 967, + "name": "_feeContract", + "nodeType": "VariableDeclaration", + "scope": 1037, + "src": "2362:20:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 966, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2362:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 969, + "name": "_fxUSDBPSRate", + "nodeType": "VariableDeclaration", + "scope": 1037, + "src": "2388:18:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 968, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2388:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2260:152:5" + }, + "payable": false, + "returnParameters": { + "id": 975, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 974, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1037, + "src": "2439:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 973, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2439:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2438:14:5" + }, + "scope": 1351, + "src": "2242:1071:5", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1049, + "nodeType": "Block", + "src": "3468:53:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1045, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "3508:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1044, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3500:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1046, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3500:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1042, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "3483:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1043, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenName", + "nodeType": "MemberAccess", + "referencedDeclaration": 2408, + "src": "3483:16:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1047, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3483:31:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 1041, + "id": 1048, + "nodeType": "Return", + "src": "3476:38:5" + } + ] + }, + "documentation": "@notice Gets name of token\n@return {\"_name\" : \"Returns name of token\"}", + "id": 1050, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "name", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1038, + "nodeType": "ParameterList", + "parameters": [], + "src": "3430:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1041, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1040, + "name": "_name", + "nodeType": "VariableDeclaration", + "scope": 1050, + "src": "3454:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1039, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3454:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3453:14:5" + }, + "scope": 1351, + "src": "3417:104:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1062, + "nodeType": "Block", + "src": "3686:55:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1058, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "3728:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1057, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3720:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1059, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3720:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1055, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "3701:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1056, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2434, + "src": "3701:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1060, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3701:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 1054, + "id": 1061, + "nodeType": "Return", + "src": "3694:40:5" + } + ] + }, + "documentation": "@notice Gets symbol of token\n@return {\"_symbol\" : \"Returns symbol of token\"}", + "id": 1063, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "symbol", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1051, + "nodeType": "ParameterList", + "parameters": [], + "src": "3646:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1054, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1053, + "name": "_symbol", + "nodeType": "VariableDeclaration", + "scope": 1063, + "src": "3670:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1052, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3670:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3669:16:5" + }, + "scope": 1351, + "src": "3631:110:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1075, + "nodeType": "Block", + "src": "3935:52:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1071, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "3974:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1070, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3966:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1072, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3966:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1068, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "3950:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1069, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenTLA", + "nodeType": "MemberAccess", + "referencedDeclaration": 2460, + "src": "3950:15:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1073, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3950:30:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 1067, + "id": 1074, + "nodeType": "Return", + "src": "3943:37:5" + } + ] + }, + "documentation": "@notice Gets three-letter-abbreviation of token\n@return {\"_tla\" : \"Returns three-letter-abbreviation of token\"}", + "id": 1076, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "tla", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1064, + "nodeType": "ParameterList", + "parameters": [], + "src": "3898:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1067, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1066, + "name": "_tla", + "nodeType": "VariableDeclaration", + "scope": 1076, + "src": "3922:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1065, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3922:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3921:13:5" + }, + "scope": 1351, + "src": "3886:101:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1088, + "nodeType": "Block", + "src": "4157:56:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1084, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "4200:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1083, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4192:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1085, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4192:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1081, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "4172:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1082, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenVersion", + "nodeType": "MemberAccess", + "referencedDeclaration": 2486, + "src": "4172:19:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1086, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4172:34:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 1080, + "id": 1087, + "nodeType": "Return", + "src": "4165:41:5" + } + ] + }, + "documentation": "@notice Gets version of token\n@return {\"_version\" : \"Returns version of token\"}", + "id": 1089, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "version", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1077, + "nodeType": "ParameterList", + "parameters": [], + "src": "4116:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1080, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1079, + "name": "_version", + "nodeType": "VariableDeclaration", + "scope": 1089, + "src": "4140:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1078, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "4140:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4139:17:5" + }, + "scope": 1351, + "src": "4100:113:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1104, + "nodeType": "Block", + "src": "4387:77:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1099, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "4450:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1098, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4442:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1100, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4442:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1096, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "4423:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1097, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2434, + "src": "4423:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1101, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4423:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 1094, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "4402:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1095, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenDecimals", + "nodeType": "MemberAccess", + "referencedDeclaration": 2512, + "src": "4402:20:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) view returns (uint256)" + } + }, + "id": 1102, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4402:55:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1093, + "id": 1103, + "nodeType": "Return", + "src": "4395:62:5" + } + ] + }, + "documentation": "@notice Gets decimals of token\n@return {\"_decimals\" : \"Returns number of decimals\"}", + "id": 1105, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "decimals", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1090, + "nodeType": "ParameterList", + "parameters": [], + "src": "4347:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1093, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1092, + "name": "_decimals", + "nodeType": "VariableDeclaration", + "scope": 1105, + "src": "4371:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1091, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "4371:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4370:16:5" + }, + "scope": 1351, + "src": "4330:134:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1120, + "nodeType": "Block", + "src": "4650:75:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1115, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "4711:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1114, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4703:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1116, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4703:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1112, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "4684:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1113, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2434, + "src": "4684:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1117, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4684:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 1110, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "4665:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1111, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSupply", + "nodeType": "MemberAccess", + "referencedDeclaration": 2762, + "src": "4665:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) view returns (uint256)" + } + }, + "id": 1118, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4665:53:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1109, + "id": 1119, + "nodeType": "Return", + "src": "4658:60:5" + } + ] + }, + "documentation": "@notice Gets total supply of token\n@return {\"supply\" : \"Returns current total supply of token\"}", + "id": 1121, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "totalSupply", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1106, + "nodeType": "ParameterList", + "parameters": [], + "src": "4613:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1109, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1108, + "name": "supply", + "nodeType": "VariableDeclaration", + "scope": 1121, + "src": "4637:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1107, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "4637:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4636:13:5" + }, + "scope": 1351, + "src": "4593:132:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1142, + "nodeType": "Block", + "src": "5050:96:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1135, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "5114:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1134, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5106:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1136, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5106:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1132, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "5087:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1133, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2434, + "src": "5087:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1137, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5087:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1138, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1123, + "src": "5122:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1139, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1125, + "src": "5131:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1130, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "5065:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1131, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenAllowance", + "nodeType": "MemberAccess", + "referencedDeclaration": 2800, + "src": "5065:21:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,address) view returns (uint256)" + } + }, + "id": 1140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5065:74:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1129, + "id": 1141, + "nodeType": "Return", + "src": "5058:81:5" + } + ] + }, + "documentation": "@notice Gets allowance that spender has with approver\n@param account Address of approver\n@param spender Address of spender\n@return {\"amount\" : \"Returns allowance of given account and spender\"}", + "id": 1143, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "allowance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1126, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1123, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 1143, + "src": "4982:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1122, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4982:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1125, + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 1143, + "src": "4999:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1124, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4999:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4981:34:5" + }, + "payable": false, + "returnParameters": { + "id": 1129, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1128, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1143, + "src": "5037:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1127, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5037:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5036:13:5" + }, + "scope": 1351, + "src": "4963:183:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1161, + "nodeType": "Block", + "src": "5377:85:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1155, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "5439:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1154, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5431:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1156, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5431:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1152, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "5412:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1153, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2434, + "src": "5412:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1157, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5412:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1158, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1145, + "src": "5447:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1150, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "5392:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1151, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenBalance", + "nodeType": "MemberAccess", + "referencedDeclaration": 2832, + "src": "5392:19:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address) view returns (uint256)" + } + }, + "id": 1159, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5392:63:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1149, + "id": 1160, + "nodeType": "Return", + "src": "5385:70:5" + } + ] + }, + "documentation": "@notice Gets balance of account\n@param account Address for balance lookup\n@return {\"balance\" : \"Returns balance amount\"}", + "id": 1162, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "balanceOf", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1146, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1145, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 1162, + "src": "5325:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1144, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5325:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5324:17:5" + }, + "payable": false, + "returnParameters": { + "id": 1149, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1148, + "name": "balance", + "nodeType": "VariableDeclaration", + "scope": 1162, + "src": "5363:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1147, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5363:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5362:14:5" + }, + "scope": 1351, + "src": "5306:156:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1209, + "nodeType": "Block", + "src": "5859:295:5", + "statements": [ + { + "assignments": [ + 1178 + ], + "declarations": [ + { + "constant": false, + "id": 1178, + "name": "feeContract", + "nodeType": "VariableDeclaration", + "scope": 1210, + "src": "5867:19:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1177, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5867:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1185, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1182, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "5916:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1181, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5908:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1183, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5908:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1179, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "5889:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1180, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2736, + "src": "5889:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 1184, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5889:33:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5867:55:5" + }, + { + "expression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1188, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1178, + "src": "5961:11:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1186, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "5947:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1187, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeBPS", + "nodeType": "MemberAccess", + "referencedDeclaration": 2538, + "src": "5947:13:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1189, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5947:26:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1192, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1178, + "src": "5997:11:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1190, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "5983:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1191, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMin", + "nodeType": "MemberAccess", + "referencedDeclaration": 2564, + "src": "5983:13:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1193, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5983:26:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1196, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1178, + "src": "6033:11:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1194, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "6019:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1195, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMax", + "nodeType": "MemberAccess", + "referencedDeclaration": 2590, + "src": "6019:13:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1197, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6019:26:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1200, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1178, + "src": "6070:11:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1198, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "6055:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1199, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeFlat", + "nodeType": "MemberAccess", + "referencedDeclaration": 2616, + "src": "6055:14:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1201, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6055:27:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1204, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1178, + "src": "6106:11:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1202, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "6092:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1203, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMsg", + "nodeType": "MemberAccess", + "referencedDeclaration": 2642, + "src": "6092:13:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bytes memory)" + } + }, + "id": 1205, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6092:26:5", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "argumentTypes": null, + "id": 1206, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1178, + "src": "6128:11:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 1207, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5937:210:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_address_$", + "typeString": "tuple(uint256,uint256,uint256,uint256,bytes memory,address)" + } + }, + "functionReturnParameters": 1176, + "id": 1208, + "nodeType": "Return", + "src": "5930:217:5" + } + ] + }, + "documentation": "@notice Gets fee parameters\n@return {\n\"bps\":\"Fee amount as a mesuare of basis points\",\n\"min\":\"Minimum fee amount\",\n\"max\":\"Maximum fee amount\",\n\"flat\":\"Flat fee amount\",\n\"contract\":\"Address of fee contract\"\n}", + "id": 1210, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getFeeParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1163, + "nodeType": "ParameterList", + "parameters": [], + "src": "5760:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1176, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1165, + "name": "bps", + "nodeType": "VariableDeclaration", + "scope": 1210, + "src": "5784:8:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1164, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5784:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1167, + "name": "min", + "nodeType": "VariableDeclaration", + "scope": 1210, + "src": "5794:8:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1166, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5794:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1169, + "name": "max", + "nodeType": "VariableDeclaration", + "scope": 1210, + "src": "5804:8:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1168, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5804:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1171, + "name": "flat", + "nodeType": "VariableDeclaration", + "scope": 1210, + "src": "5814:9:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1170, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5814:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1173, + "name": "feeMsg", + "nodeType": "VariableDeclaration", + "scope": 1210, + "src": "5825:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1172, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5825:5:5", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1175, + "name": "feeAccount", + "nodeType": "VariableDeclaration", + "scope": 1210, + "src": "5839:18:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1174, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5839:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5783:75:5" + }, + "scope": 1351, + "src": "5739:415:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1228, + "nodeType": "Block", + "src": "6453:82:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1222, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "6513:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1221, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6505:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1223, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6505:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1219, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "6486:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1220, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2736, + "src": "6486:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 1224, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6486:33:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1225, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1212, + "src": "6521:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1217, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "6468:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1218, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "calculateFees", + "nodeType": "MemberAccess", + "referencedDeclaration": 3004, + "src": "6468:17:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) view returns (uint256)" + } + }, + "id": 1226, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6468:60:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1216, + "id": 1227, + "nodeType": "Return", + "src": "6461:67:5" + } + ] + }, + "documentation": "@notice Calculates fee of a given transfer amount\n@param amount Amount to calculcate fee value\n@return {\"fees\": \"Returns the calculated transaction fees based on the fee contract parameters\"}", + "id": 1229, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "calculateFees", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1213, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1212, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1229, + "src": "6408:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1211, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "6408:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6407:13:5" + }, + "payable": false, + "returnParameters": { + "id": 1216, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1215, + "name": "fees", + "nodeType": "VariableDeclaration", + "scope": 1229, + "src": "6442:9:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1214, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "6442:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6441:11:5" + }, + "scope": 1351, + "src": "6385:150:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1258, + "nodeType": "Block", + "src": "6854:288:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1246, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "7008:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1245, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7000:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1247, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7000:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1243, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "6981:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1244, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2434, + "src": "6981:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1248, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6981:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1249, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1231, + "src": "7016:2:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1250, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1233, + "src": "7020:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "hexValue": "307830", + "id": 1251, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7028:5:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_77b7d82d931e1a403db0240b08c0716665eec4664af617c457918e4a67bc1810", + "typeString": "literal_string \"0x0\"" + }, + "value": "0x0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_stringliteral_77b7d82d931e1a403db0240b08c0716665eec4664af617c457918e4a67bc1810", + "typeString": "literal_string \"0x0\"" + } + ], + "expression": { + "argumentTypes": null, + "id": 1241, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "6968:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1242, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "transfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 3156, + "src": "6968:12:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,uint256,bytes memory) returns (bool)" + } + }, + "id": 1252, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6968:66:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207472616e736665722066756e64732e20506c6561736520636865636b20796f757220706172616d65746572732e", + "id": 1253, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7044:64:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7b56f975cae833aef0f2ad6bba848437a58a03519ddd4635658465a8db99bc8b", + "typeString": "literal_string \"Error: Unable to transfer funds. Please check your parameters.\"" + }, + "value": "Error: Unable to transfer funds. Please check your parameters." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7b56f975cae833aef0f2ad6bba848437a58a03519ddd4635658465a8db99bc8b", + "typeString": "literal_string \"Error: Unable to transfer funds. Please check your parameters.\"" + } + ], + "id": 1240, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "6951:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1254, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6951:165:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1255, + "nodeType": "ExpressionStatement", + "src": "6951:165:5" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1256, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7131:4:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1239, + "id": 1257, + "nodeType": "Return", + "src": "7124:11:5" + } + ] + }, + "documentation": "@notice transfers 'amount' from msg.sender to a receiving account 'to'\n@param to Receiving address\n@param amount Transfer amount\n@return {\"success\" : \"Returns true if transfer succeeds\"}", + "id": 1259, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 1236, + "modifierName": { + "argumentTypes": null, + "id": 1235, + "name": "notDeprecated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1350, + "src": "6817:13:5", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "6817:13:5" + } + ], + "name": "transfer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1234, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1231, + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 1259, + "src": "6785:10:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1230, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6785:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1233, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1259, + "src": "6797:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1232, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "6797:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6784:25:5" + }, + "payable": false, + "returnParameters": { + "id": 1239, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1238, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1259, + "src": "6840:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1237, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6840:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6839:14:5" + }, + "scope": 1351, + "src": "6767:375:5", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1291, + "nodeType": "Block", + "src": "7522:371:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1278, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "7685:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1277, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7677:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1279, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7677:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1275, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "7658:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1276, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2434, + "src": "7658:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1280, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7658:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1281, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1261, + "src": "7693:4:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1282, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1263, + "src": "7699:2:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1283, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1265, + "src": "7703:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "hexValue": "307830", + "id": 1284, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7711:5:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_77b7d82d931e1a403db0240b08c0716665eec4664af617c457918e4a67bc1810", + "typeString": "literal_string \"0x0\"" + }, + "value": "0x0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_stringliteral_77b7d82d931e1a403db0240b08c0716665eec4664af617c457918e4a67bc1810", + "typeString": "literal_string \"0x0\"" + } + ], + "expression": { + "argumentTypes": null, + "id": 1273, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "7641:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1274, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "transferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 3252, + "src": "7641:16:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,address,uint256,bytes memory) returns (bool)" + } + }, + "id": 1285, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7641:76:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207472616e736665722066756e64732e20506c6561736520636865636b20796f757220706172616d657465727320616e6420656e7375726520746865207370656e646572206861732074686520617070726f76656420616d6f756e74206f662066756e647320746f207472616e736665722e", + "id": 1286, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7727:132:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_90b3ee7dad40e5e7ebb3851f6571fdf83a7fec9d6544d7d132d092fa849919cf", + "typeString": "literal_string \"Error: Unable to transfer funds. Please check your parameters and ensure the spender has the approved amount of funds to transfer.\"" + }, + "value": "Error: Unable to transfer funds. Please check your parameters and ensure the spender has the approved amount of funds to transfer." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_90b3ee7dad40e5e7ebb3851f6571fdf83a7fec9d6544d7d132d092fa849919cf", + "typeString": "literal_string \"Error: Unable to transfer funds. Please check your parameters and ensure the spender has the approved amount of funds to transfer.\"" + } + ], + "id": 1272, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "7624:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1287, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7624:243:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1288, + "nodeType": "ExpressionStatement", + "src": "7624:243:5" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1289, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7882:4:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1271, + "id": 1290, + "nodeType": "Return", + "src": "7875:11:5" + } + ] + }, + "documentation": "@notice spender transfers from approvers account to the reciving account\n@param from Approver's address\n@param to Receiving address\n@param amount Transfer amount\n@return {\"success\" : \"Returns true if transferFrom succeeds\"}", + "id": 1292, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 1268, + "modifierName": { + "argumentTypes": null, + "id": 1267, + "name": "notDeprecated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1350, + "src": "7485:13:5", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "7485:13:5" + } + ], + "name": "transferFrom", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1266, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1261, + "name": "from", + "nodeType": "VariableDeclaration", + "scope": 1292, + "src": "7439:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1260, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7439:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1263, + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 1292, + "src": "7453:10:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1262, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7453:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1265, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1292, + "src": "7465:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1264, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "7465:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7438:39:5" + }, + "payable": false, + "returnParameters": { + "id": 1271, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1270, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1292, + "src": "7508:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1269, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7508:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7507:14:5" + }, + "scope": 1351, + "src": "7417:476:5", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1314, + "nodeType": "Block", + "src": "8190:315:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1306, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1294, + "src": "8326:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1307, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1296, + "src": "8335:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1304, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "8305:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1305, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "approveAllowance", + "nodeType": "MemberAccess", + "referencedDeclaration": 3524, + "src": "8305:20:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 1308, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8305:37:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20617070726f766520616c6c6f77616e636520666f72207370656e6465722e20506c6561736520656e73757265207370656e646572206973206e6f74206e756c6c20616e6420646f6573206e6f74206861766520612066726f7a656e2062616c616e63652e", + "id": 1309, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8352:119:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_10872a80d40cd7a7ea8407e27ca3b5f442e099403eb78ad6b966b1054a4f032f", + "typeString": "literal_string \"Error: Unable to approve allowance for spender. Please ensure spender is not null and does not have a frozen balance.\"" + }, + "value": "Error: Unable to approve allowance for spender. Please ensure spender is not null and does not have a frozen balance." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_10872a80d40cd7a7ea8407e27ca3b5f442e099403eb78ad6b966b1054a4f032f", + "typeString": "literal_string \"Error: Unable to approve allowance for spender. Please ensure spender is not null and does not have a frozen balance.\"" + } + ], + "id": 1303, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "8288:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1310, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8288:191:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1311, + "nodeType": "ExpressionStatement", + "src": "8288:191:5" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1312, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8494:4:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1302, + "id": 1313, + "nodeType": "Return", + "src": "8487:11:5" + } + ] + }, + "documentation": "@notice approves spender a given amount\n@param spender Spender's address\n@param amount Allowance amount\n@return {\"success\" : \"Returns true if approve succeeds\"}", + "id": 1315, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 1299, + "modifierName": { + "argumentTypes": null, + "id": 1298, + "name": "notDeprecated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1350, + "src": "8153:13:5", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "8153:13:5" + } + ], + "name": "approve", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1297, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1294, + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 1315, + "src": "8116:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1293, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8116:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1296, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1315, + "src": "8133:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1295, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "8133:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8115:30:5" + }, + "payable": false, + "returnParameters": { + "id": 1302, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1301, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1315, + "src": "8176:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1300, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8176:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8175:14:5" + }, + "scope": 1351, + "src": "8099:406:5", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1334, + "nodeType": "Block", + "src": "8723:131:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1326, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "8773:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1325, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8765:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1327, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8765:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1323, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "8739:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1324, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setDeprecatedContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 4188, + "src": "8739:25:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) returns (bool)" + } + }, + "id": 1328, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8739:40:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2064657072656361746520636f6e747261637421", + "id": 1329, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8789:38:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f549c81276a394c8d1eccc4a6bca4eec7c9bb1e25bd84511bd278b767e7ca4e8", + "typeString": "literal_string \"Error: Unable to deprecate contract!\"" + }, + "value": "Error: Unable to deprecate contract!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_f549c81276a394c8d1eccc4a6bca4eec7c9bb1e25bd84511bd278b767e7ca4e8", + "typeString": "literal_string \"Error: Unable to deprecate contract!\"" + } + ], + "id": 1322, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "8731:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1330, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8731:97:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1331, + "nodeType": "ExpressionStatement", + "src": "8731:97:5" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1332, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8843:4:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1321, + "id": 1333, + "nodeType": "Return", + "src": "8836:11:5" + } + ] + }, + "documentation": "@notice gets currency status of contract\n@return {\"deprecated\" : \"Returns true if deprecated, false otherwise\"}", + "id": 1335, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 1318, + "modifierName": { + "argumentTypes": null, + "id": 1317, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "8687:9:5", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "8687:9:5" + } + ], + "name": "deprecateInterface", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1316, + "nodeType": "ParameterList", + "parameters": [], + "src": "8677:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1321, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1320, + "name": "deprecated", + "nodeType": "VariableDeclaration", + "scope": 1335, + "src": "8706:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1319, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8706:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8705:17:5" + }, + "scope": 1351, + "src": "8650:204:5", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1349, + "nodeType": "Block", + "src": "8885:198:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1344, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "8952:40:5", + "subExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1341, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "8986:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1351", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1340, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8978:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1342, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8978:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1338, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 934, + "src": "8953:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1339, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "isContractDeprecated", + "nodeType": "MemberAccess", + "referencedDeclaration": 4214, + "src": "8953:24:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bool)" + } + }, + "id": 1343, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8953:39:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20436f6e747261637420686173206265656e20646570726563617465642c2063616e6e6f7420706572666f726d206f7065726174696f6e21", + "id": 1345, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9002:64:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_a6979b55ecdc4b5fbdddeea2b203ef30bc5c99bf716d9b4a8c9faef6ad0dbbcc", + "typeString": "literal_string \"Error: Contract has been deprecated, cannot perform operation!\"" + }, + "value": "Error: Contract has been deprecated, cannot perform operation!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_a6979b55ecdc4b5fbdddeea2b203ef30bc5c99bf716d9b4a8c9faef6ad0dbbcc", + "typeString": "literal_string \"Error: Contract has been deprecated, cannot perform operation!\"" + } + ], + "id": 1337, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "8944:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1346, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8944:123:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1347, + "nodeType": "ExpressionStatement", + "src": "8944:123:5" + }, + { + "id": 1348, + "nodeType": "PlaceholderStatement", + "src": "9075:1:5" + } + ] + }, + "documentation": null, + "id": 1350, + "name": "notDeprecated", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 1336, + "nodeType": "ParameterList", + "parameters": [], + "src": "8882:2:5" + }, + "src": "8860:223:5", + "visibility": "internal" + } + ], + "scope": 1352, + "src": "1060:8028:5" + } + ], + "src": "0:9089:5" + }, + "compiler": { + "name": "solc", + "version": "0.4.24+commit.e67f0147.Emscripten.clang" + }, + "networks": { + "1": { + "events": {}, + "links": {}, + "address": "0x40d378cb3a6ae236e504482e31af36edce336daa", + "transactionHash": "0xcf63686a41cdf5300f860fe7ebcc7643082d6ca98c4af6380b9a77a58e58d9c7" + } + }, + "schemaVersion": "2.0.1", + "updatedAt": "2018-09-18T18:57:45.586Z" +} \ No newline at end of file diff --git a/deployed/mainnet-deprecated/TokenIOFX.json b/deployed/mainnet-deprecated/TokenIOFX.json new file mode 100644 index 0000000..597e40c --- /dev/null +++ b/deployed/mainnet-deprecated/TokenIOFX.json @@ -0,0 +1,2192 @@ +{ + "contractName": "TokenIOFX", + "abi": [ + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "allowOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "removeOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "", + "type": "address" + } + ], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "name": "_storageContract", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "AllowOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "RevokeOwnership", + "type": "event" + }, + { + "constant": false, + "inputs": [ + { + "name": "requester", + "type": "address" + }, + { + "name": "symbolA", + "type": "string" + }, + { + "name": "symbolB", + "type": "string" + }, + { + "name": "valueA", + "type": "uint256" + }, + { + "name": "valueB", + "type": "uint256" + }, + { + "name": "sigV", + "type": "uint8" + }, + { + "name": "sigR", + "type": "bytes32" + }, + { + "name": "sigS", + "type": "bytes32" + }, + { + "name": "expiration", + "type": "uint256" + } + ], + "name": "swap", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051602080611ee3833981016040908152905133600090815260208190529182208054600160ff19918216811783558054600160a060020a031916600160a060020a039094169390931783558154169091179055611e6d90819061007690396000f3006080604052600436106100535763ffffffff60e060020a6000350416634bbc142c8114610058578063666a34271461008d578063666e1b39146100ae578063987c6b9d146100cf578063f2fde38b14610194575b600080fd5b34801561006457600080fd5b50610079600160a060020a03600435166101b5565b604080519115158252519081900360200190f35b34801561009957600080fd5b50610079600160a060020a0360043516610295565b3480156100ba57600080fd5b50610079600160a060020a0360043516610372565b3480156100db57600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610079958335600160a060020a031695369560449491939091019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497505084359550505060208301359260ff60408201351692506060810135915060808101359060a00135610387565b3480156101a057600080fd5b50610079600160a060020a0360043516610454565b3360009081526020819052604081205460ff161515610244576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b3360009081526020819052604081205460ff161515610324576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b60006103a260018b8b8b8b8b8b8b8b8b63ffffffff6105b216565b1515610444576040805160e560020a62461bcd02815260206004820152604760248201527f4572726f723a20556e61626c6520746f20706572666f726d2061746f6d69632060448201527f63757272656e637920737761702e20506c6561736520636865636b207061726160648201527f6d65746572732e00000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b5060019998505050505050505050565b3360009081526020819052604081205460ff1615156104e3576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a0382161515610543576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b6000808a8a8a8a8a876040516020018087600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140186805190602001908083835b602083106106145780518252601f1990920191602091820191016105f5565b51815160209384036101000a600019018019909216911617905288519190930192880191508083835b6020831061065c5780518252601f19909201916020918201910161063d565b6001836020036101000a03801982511681845116808217855250505050505090500184815260200183815260200182815260200196505050505050506040516020818303038152906040526040518082805190602001908083835b602083106106d65780518252601f1990920191602091820191016106b7565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090506107108c338d610c3c565b151561078c576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a204f6e6c79207665726966696564206163636f756e747320636160448201527f6e20706572666f726d2063757272656e63792073776170732e00000000000000606482015290519081900360840190fd5b6107968c82610da0565b1515610812576040805160e560020a62461bcd02815260206004820152603560248201527f4572726f723a204661696c656420746f20736574207472616e73616374696f6e60448201527f2073746174757320746f2066756c66696c6c65642e0000000000000000000000606482015290519081900360840190fd5b4283101561086a576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a205472616e73616374696f6e2068617320657870697265642100604482015290519081900360640190fd5b604080516000808252602080830180855285905260ff8a168385015260608301899052608083018890529251600160a060020a038f169360019360a0808201949293601f198101939281900390910191865af11580156108ce573d6000803e3d6000fd5b50505060206040510351600160a060020a0316141515610984576040805160e560020a62461bcd02815260206004820152605660248201527f4572726f723a204164647265737320646572697665642066726f6d207472616e60448201527f73616374696f6e207369676e617475726520646f6573206e6f74206d6174636860648201527f2074686520726571756573746572206164647265737300000000000000000000608482015290519081900360a40190fd5b6109c78c8b338e8c6040805190810160405280600381526020017f307830000000000000000000000000000000000000000000000000000000000081525061105d565b1515610a43576040805160e560020a62461bcd02815260206004820152602b60248201527f4572726f723a20556e61626c6520746f207472616e736665722066756e64732060448201527f746f206163636f756e742e000000000000000000000000000000000000000000606482015290519081900360840190fd5b610a868c8a8d338b6040805190810160405280600381526020017f307830000000000000000000000000000000000000000000000000000000000081525061105d565b1515610b02576040805160e560020a62461bcd02815260206004820152602b60248201527f4572726f723a20556e61626c6520746f207472616e736665722066756e64732060448201527f746f206163636f756e742e000000000000000000000000000000000000000000606482015290519081900360840190fd5b7f8afc838de412aaa0858b29e225f1811126bc93a1e25da13505909c403d2097d18a8a8a8a87866040518080602001806020018781526020018681526020018581526020018460001916600019168152602001838103835289818151815260200191508051906020019080838360005b83811015610b8a578181015183820152602001610b72565b50505050905090810190601f168015610bb75780820380516001836020036101000a031916815260200191505b5083810382528851815288516020918201918a019080838360005b83811015610bea578181015183820152602001610bd2565b50505050905090810190601f168015610c175780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a15060019b9a5050505050505050505050565b6000610c488484611817565b1515610cea576040805160e560020a62461bcd02815260206004820152605a60248201527f4572726f723a204163636f756e74206973206e6f74207665726966696564206660448201527f6f72206f7065726174696f6e2e20506c6561736520656e73757265206163636f60648201527f756e7420686173206265656e204b594320617070726f7665642e000000000000608482015290519081900360a40190fd5b610cf48483611817565b1515610d96576040805160e560020a62461bcd02815260206004820152605a60248201527f4572726f723a204163636f756e74206973206e6f74207665726966696564206660448201527f6f72206f7065726174696f6e2e20506c6561736520656e73757265206163636f60648201527f756e7420686173206265656e204b594320617070726f7665642e000000000000608482015290519081900360a40190fd5b5060019392505050565b6000808260405160200180807f74782e737461747573000000000000000000000000000000000000000000000081525060090182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b60208310610e225780518252601f199092019160209182019101610e03565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050610e5b848461192e565b15610efc576040805160e560020a62461bcd02815260206004820152604e60248201527f4572726f723a205472616e73616374696f6e20737461747573206d757374206260448201527f652066616c7365206265666f72652073657474696e6720746865207472616e7360648201527f616374696f6e207374617475732e000000000000000000000000000000000000608482015290519081900360a40190fd5b8354604080517fabfdcced00000000000000000000000000000000000000000000000000000000815260048101849052600160248201529051600160a060020a039092169163abfdcced916044808201926020929091908290030181600087803b158015610f6957600080fd5b505af1158015610f7d573d6000803e3d6000fd5b505050506040513d6020811015610f9357600080fd5b50511515610d96576040805160e560020a62461bcd02815260206004820152606960248201527f4572726f723a20556e61626c6520746f207365742073746f726167652076616c60448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b60008080600160a060020a03861615156110e7576040805160e560020a62461bcd02815260206004820152602560248201527f4572726f723a2060746f602061646472657373206d757374206e6f742062652060448201527f6e756c6c2e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b876110f28a89611a71565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b6020831061114c5780518252601f19909201916020918201910161112d565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106111d75780518252601f1990920191602091820191016111b8565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209150876112118a88611a71565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b6020831061126b5780518252601f19909201916020918201910161124c565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106112f65780518252601f1990920191602091820191016112d7565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208f547fbd02d0f5000000000000000000000000000000000000000000000000000000008452600484018a90529451909750600160a060020a03909416955063e2a4853a945087936113c793508b92879263bd02d0f5926024808401938290030181600087803b15801561138f57600080fd5b505af11580156113a3573d6000803e3d6000fd5b505050506040513d60208110156113b957600080fd5b50519063ffffffff611bec16565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b15801561140f57600080fd5b505af1158015611423573d6000803e3d6000fd5b505050506040513d602081101561143957600080fd5b50511515611503576040805160e560020a62461bcd02815260206004820152606960248201527f4572726f723a20556e61626c6520746f207365742073746f726167652076616c60448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b8854604080517fbd02d0f5000000000000000000000000000000000000000000000000000000008152600481018490529051600160a060020a039092169163e2a4853a9184916115b0918a91869163bd02d0f59160248083019260209291908290030181600087803b15801561157857600080fd5b505af115801561158c573d6000803e3d6000fd5b505050506040513d60208110156115a257600080fd5b50519063ffffffff611c7116565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b1580156115f857600080fd5b505af115801561160c573d6000803e3d6000fd5b505050506040513d602081101561162257600080fd5b505115156116ec576040805160e560020a62461bcd02815260206004820152606960248201527f4572726f723a20556e61626c6520746f207365742073746f726167652076616c60448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b85600160a060020a031687600160a060020a03167f6f3dcde00ed34d4f404b335a65d18fb4adf74f5b817aa46f5d7c4f05c6d1e96e8a8888604051808060200184815260200180602001838103835286818151815260200191508051906020019080838360005b8381101561176b578181015183820152602001611753565b50505050905090810190601f1680156117985780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156117cb5781810151838201526020016117b3565b50505050905090810190601f1680156117f85780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a350600198975050505050505050565b60006118238383611cfb565b151561189f576040805160e560020a62461bcd02815260206004820152602a60248201527f4572726f723a204163636f756e7420646f6573206e6f742068617665204b594360448201527f20617070726f76616c2e00000000000000000000000000000000000000000000606482015290519081900360840190fd5b6118a98383611d9e565b1515611925576040805160e560020a62461bcd02815260206004820152602481018290527f4572726f723a204163636f756e7420737461747573206973206066616c73656060448201527f2e204163636f756e7420737461747573206d757374206265206074727565602e606482015290519081900360840190fd5b50600192915050565b6000808260405160200180807f74782e737461747573000000000000000000000000000000000000000000000081525060090182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b602083106119b05780518252601f199092019160209182019101611991565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547f7ae1cfca000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a039094169550637ae1cfca945060248083019491935090918290030181600087803b158015611a3d57600080fd5b505af1158015611a51573d6000803e3d6000fd5b505050506040513d6020811015611a6757600080fd5b5051949350505050565b60008060008360405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611b0e5780518252601f199092019160209182019101611aef565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015611b9b57600080fd5b505af1158015611baf573d6000803e3d6000fd5b505050506040513d6020811015611bc557600080fd5b50519050600160a060020a03811615611be057809250611be4565b8392505b505092915050565b600082821115611c6b576040805160e560020a62461bcd028152602060048201526024808201527f4572726f723a20556e73616665207375627472616374696f6e206f706572617460448201527f696f6e2100000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50900390565b600082820183811015611cf4576040805160e560020a62461bcd02815260206004820152602160248201527f4572726f723a20556e73616665206164646974696f6e206f7065726174696f6e60448201527f2100000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b9392505050565b600080611d088484611a71565b60405160200180807f6163636f756e742e6b7963000000000000000000000000000000000000000000815250600b0182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401915050604051602081830303815290604052604051808280519060200190808383602083106119b05780518252601f199092019160209182019101611991565b600080611dab8484611a71565b60405160200180807f6163636f756e742e616c6c6f7765640000000000000000000000000000000000815250600f0182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401915050604051602081830303815290604052604051808280519060200190808383602083106119b05780518252601f1990920191602091820191016119915600a165627a7a72305820ee14a97fa29abf13ca394e57c4b446c5bc87af092005db37c705fda2a6da93920029", + "deployedBytecode": "0x6080604052600436106100535763ffffffff60e060020a6000350416634bbc142c8114610058578063666a34271461008d578063666e1b39146100ae578063987c6b9d146100cf578063f2fde38b14610194575b600080fd5b34801561006457600080fd5b50610079600160a060020a03600435166101b5565b604080519115158252519081900360200190f35b34801561009957600080fd5b50610079600160a060020a0360043516610295565b3480156100ba57600080fd5b50610079600160a060020a0360043516610372565b3480156100db57600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610079958335600160a060020a031695369560449491939091019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497505084359550505060208301359260ff60408201351692506060810135915060808101359060a00135610387565b3480156101a057600080fd5b50610079600160a060020a0360043516610454565b3360009081526020819052604081205460ff161515610244576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b3360009081526020819052604081205460ff161515610324576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b60006103a260018b8b8b8b8b8b8b8b8b63ffffffff6105b216565b1515610444576040805160e560020a62461bcd02815260206004820152604760248201527f4572726f723a20556e61626c6520746f20706572666f726d2061746f6d69632060448201527f63757272656e637920737761702e20506c6561736520636865636b207061726160648201527f6d65746572732e00000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b5060019998505050505050505050565b3360009081526020819052604081205460ff1615156104e3576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a0382161515610543576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b6000808a8a8a8a8a876040516020018087600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140186805190602001908083835b602083106106145780518252601f1990920191602091820191016105f5565b51815160209384036101000a600019018019909216911617905288519190930192880191508083835b6020831061065c5780518252601f19909201916020918201910161063d565b6001836020036101000a03801982511681845116808217855250505050505090500184815260200183815260200182815260200196505050505050506040516020818303038152906040526040518082805190602001908083835b602083106106d65780518252601f1990920191602091820191016106b7565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090506107108c338d610c3c565b151561078c576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a204f6e6c79207665726966696564206163636f756e747320636160448201527f6e20706572666f726d2063757272656e63792073776170732e00000000000000606482015290519081900360840190fd5b6107968c82610da0565b1515610812576040805160e560020a62461bcd02815260206004820152603560248201527f4572726f723a204661696c656420746f20736574207472616e73616374696f6e60448201527f2073746174757320746f2066756c66696c6c65642e0000000000000000000000606482015290519081900360840190fd5b4283101561086a576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a205472616e73616374696f6e2068617320657870697265642100604482015290519081900360640190fd5b604080516000808252602080830180855285905260ff8a168385015260608301899052608083018890529251600160a060020a038f169360019360a0808201949293601f198101939281900390910191865af11580156108ce573d6000803e3d6000fd5b50505060206040510351600160a060020a0316141515610984576040805160e560020a62461bcd02815260206004820152605660248201527f4572726f723a204164647265737320646572697665642066726f6d207472616e60448201527f73616374696f6e207369676e617475726520646f6573206e6f74206d6174636860648201527f2074686520726571756573746572206164647265737300000000000000000000608482015290519081900360a40190fd5b6109c78c8b338e8c6040805190810160405280600381526020017f307830000000000000000000000000000000000000000000000000000000000081525061105d565b1515610a43576040805160e560020a62461bcd02815260206004820152602b60248201527f4572726f723a20556e61626c6520746f207472616e736665722066756e64732060448201527f746f206163636f756e742e000000000000000000000000000000000000000000606482015290519081900360840190fd5b610a868c8a8d338b6040805190810160405280600381526020017f307830000000000000000000000000000000000000000000000000000000000081525061105d565b1515610b02576040805160e560020a62461bcd02815260206004820152602b60248201527f4572726f723a20556e61626c6520746f207472616e736665722066756e64732060448201527f746f206163636f756e742e000000000000000000000000000000000000000000606482015290519081900360840190fd5b7f8afc838de412aaa0858b29e225f1811126bc93a1e25da13505909c403d2097d18a8a8a8a87866040518080602001806020018781526020018681526020018581526020018460001916600019168152602001838103835289818151815260200191508051906020019080838360005b83811015610b8a578181015183820152602001610b72565b50505050905090810190601f168015610bb75780820380516001836020036101000a031916815260200191505b5083810382528851815288516020918201918a019080838360005b83811015610bea578181015183820152602001610bd2565b50505050905090810190601f168015610c175780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a15060019b9a5050505050505050505050565b6000610c488484611817565b1515610cea576040805160e560020a62461bcd02815260206004820152605a60248201527f4572726f723a204163636f756e74206973206e6f74207665726966696564206660448201527f6f72206f7065726174696f6e2e20506c6561736520656e73757265206163636f60648201527f756e7420686173206265656e204b594320617070726f7665642e000000000000608482015290519081900360a40190fd5b610cf48483611817565b1515610d96576040805160e560020a62461bcd02815260206004820152605a60248201527f4572726f723a204163636f756e74206973206e6f74207665726966696564206660448201527f6f72206f7065726174696f6e2e20506c6561736520656e73757265206163636f60648201527f756e7420686173206265656e204b594320617070726f7665642e000000000000608482015290519081900360a40190fd5b5060019392505050565b6000808260405160200180807f74782e737461747573000000000000000000000000000000000000000000000081525060090182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b60208310610e225780518252601f199092019160209182019101610e03565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050610e5b848461192e565b15610efc576040805160e560020a62461bcd02815260206004820152604e60248201527f4572726f723a205472616e73616374696f6e20737461747573206d757374206260448201527f652066616c7365206265666f72652073657474696e6720746865207472616e7360648201527f616374696f6e207374617475732e000000000000000000000000000000000000608482015290519081900360a40190fd5b8354604080517fabfdcced00000000000000000000000000000000000000000000000000000000815260048101849052600160248201529051600160a060020a039092169163abfdcced916044808201926020929091908290030181600087803b158015610f6957600080fd5b505af1158015610f7d573d6000803e3d6000fd5b505050506040513d6020811015610f9357600080fd5b50511515610d96576040805160e560020a62461bcd02815260206004820152606960248201527f4572726f723a20556e61626c6520746f207365742073746f726167652076616c60448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b60008080600160a060020a03861615156110e7576040805160e560020a62461bcd02815260206004820152602560248201527f4572726f723a2060746f602061646472657373206d757374206e6f742062652060448201527f6e756c6c2e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b876110f28a89611a71565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b6020831061114c5780518252601f19909201916020918201910161112d565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106111d75780518252601f1990920191602091820191016111b8565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209150876112118a88611a71565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b6020831061126b5780518252601f19909201916020918201910161124c565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106112f65780518252601f1990920191602091820191016112d7565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208f547fbd02d0f5000000000000000000000000000000000000000000000000000000008452600484018a90529451909750600160a060020a03909416955063e2a4853a945087936113c793508b92879263bd02d0f5926024808401938290030181600087803b15801561138f57600080fd5b505af11580156113a3573d6000803e3d6000fd5b505050506040513d60208110156113b957600080fd5b50519063ffffffff611bec16565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b15801561140f57600080fd5b505af1158015611423573d6000803e3d6000fd5b505050506040513d602081101561143957600080fd5b50511515611503576040805160e560020a62461bcd02815260206004820152606960248201527f4572726f723a20556e61626c6520746f207365742073746f726167652076616c60448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b8854604080517fbd02d0f5000000000000000000000000000000000000000000000000000000008152600481018490529051600160a060020a039092169163e2a4853a9184916115b0918a91869163bd02d0f59160248083019260209291908290030181600087803b15801561157857600080fd5b505af115801561158c573d6000803e3d6000fd5b505050506040513d60208110156115a257600080fd5b50519063ffffffff611c7116565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b1580156115f857600080fd5b505af115801561160c573d6000803e3d6000fd5b505050506040513d602081101561162257600080fd5b505115156116ec576040805160e560020a62461bcd02815260206004820152606960248201527f4572726f723a20556e61626c6520746f207365742073746f726167652076616c60448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b85600160a060020a031687600160a060020a03167f6f3dcde00ed34d4f404b335a65d18fb4adf74f5b817aa46f5d7c4f05c6d1e96e8a8888604051808060200184815260200180602001838103835286818151815260200191508051906020019080838360005b8381101561176b578181015183820152602001611753565b50505050905090810190601f1680156117985780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156117cb5781810151838201526020016117b3565b50505050905090810190601f1680156117f85780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a350600198975050505050505050565b60006118238383611cfb565b151561189f576040805160e560020a62461bcd02815260206004820152602a60248201527f4572726f723a204163636f756e7420646f6573206e6f742068617665204b594360448201527f20617070726f76616c2e00000000000000000000000000000000000000000000606482015290519081900360840190fd5b6118a98383611d9e565b1515611925576040805160e560020a62461bcd02815260206004820152602481018290527f4572726f723a204163636f756e7420737461747573206973206066616c73656060448201527f2e204163636f756e7420737461747573206d757374206265206074727565602e606482015290519081900360840190fd5b50600192915050565b6000808260405160200180807f74782e737461747573000000000000000000000000000000000000000000000081525060090182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b602083106119b05780518252601f199092019160209182019101611991565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547f7ae1cfca000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a039094169550637ae1cfca945060248083019491935090918290030181600087803b158015611a3d57600080fd5b505af1158015611a51573d6000803e3d6000fd5b505050506040513d6020811015611a6757600080fd5b5051949350505050565b60008060008360405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611b0e5780518252601f199092019160209182019101611aef565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015611b9b57600080fd5b505af1158015611baf573d6000803e3d6000fd5b505050506040513d6020811015611bc557600080fd5b50519050600160a060020a03811615611be057809250611be4565b8392505b505092915050565b600082821115611c6b576040805160e560020a62461bcd028152602060048201526024808201527f4572726f723a20556e73616665207375627472616374696f6e206f706572617460448201527f696f6e2100000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50900390565b600082820183811015611cf4576040805160e560020a62461bcd02815260206004820152602160248201527f4572726f723a20556e73616665206164646974696f6e206f7065726174696f6e60448201527f2100000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b9392505050565b600080611d088484611a71565b60405160200180807f6163636f756e742e6b7963000000000000000000000000000000000000000000815250600b0182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401915050604051602081830303815290604052604051808280519060200190808383602083106119b05780518252601f199092019160209182019101611991565b600080611dab8484611a71565b60405160200180807f6163636f756e742e616c6c6f7765640000000000000000000000000000000000815250600f0182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401915050604051602081830303815290604052604051808280519060200190808383602083106119b05780518252601f1990920191602091820191016119915600a165627a7a72305820ee14a97fa29abf13ca394e57c4b446c5bc87af092005db37c705fda2a6da93920029", + "sourceMap": "1069:2138:6:-;;;1374:458;8:9:-1;5:2;;;30:1;27;20:12;5:2;1374:458:6;;;;;;;;;;;;;;;;1117:10:1;1111:5;:17;;;1374:458:6;1111:17:1;;;;;;:24;;1131:4;-1:-1:-1;;1111:24:1;;;;;;;1708:46:6;;-1:-1:-1;;;;;;1708:46:6;-1:-1:-1;;;;;1708:46:6;;;;;;;;;1804:24;;;;;;;;1069:2138;;;;;;;;", + "deployedSourceMap": "1069:2138:6:-;;;;;;;;;-1:-1:-1;;;1069:2138:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2127:185:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2127:185:1;-1:-1:-1;;;;;2127:185:1;;;;;;;;;;;;;;;;;;;;;;;2571:188;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2571:188:1;-1:-1:-1;;;;;2571:188:1;;;;;725:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;725:37:1;-1:-1:-1;;;;;725:37:1;;;;;2769:435:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2769:435:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2769:435:6;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2769:435:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2769:435:6;;;;-1:-1:-1;2769:435:6;-1:-1:-1;2769:435:6;;-1:-1:-1;2769:435:6;;;;;;;;-1:-1:-1;2769:435:6;;-1:-1:-1;;2769:435:6;;;-1:-1:-1;;;2769:435:6;;;;;;;;;;;;-1:-1:-1;2769:435:6;;;;;-1:-1:-1;2769:435:6;;;;;;;;;;1589:291:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1589:291:1;-1:-1:-1;;;;;1589:291:1;;;;;2127:185;1261:10;2201:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2221:21:1;;:5;:21;;;;;;;;;;;:28;;-1:-1:-1;;2221:28:1;2245:4;2221:28;;;2260:30;;;2221:5;2260:30;-1:-1:-1;2303:4:1;2127:185;;;:::o;2571:188::-;1261:10;2646:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2666:21:1;;2690:5;2666:21;;;;;;;;;;;:29;;-1:-1:-1;;2666:29:1;;;2706:31;;;2690:5;2706:31;-1:-1:-1;2750:4:1;2571:188;;;:::o;725:37::-;;;;;;;;;;;;;;;;:::o;2769:435:6:-;2973:12;3008:87;:3;3021:9;3032:7;3041;3050:6;3058;3066:4;3072;3078;3084:10;3008:87;:12;:87;:::i;:::-;2993:189;;;;;;;-1:-1:-1;;;;;2993:189:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3195:4:6;2769:435;;;;;;;;;;;:::o;1589:291:1:-;1261:10;1660:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1688:22:1;;;;1680:66;;;;;-1:-1:-1;;;;;1680:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1757:42;;-1:-1:-1;;;;;1757:42:1;;;1778:10;;1757:42;;;;;-1:-1:-1;;;;;;1805:15:1;:5;:15;;;;;;;;;;;:22;;1823:4;-1:-1:-1;;1805:22:1;;;;;;;;1839:10;1833:17;;;;;;:25;;;;;;;1823:4;1589:291::o;53100:1683:8:-;53333:12;53354:16;53400:9;53411:7;53420;53429:6;53437;53445:10;53383:73;;;;;;-1:-1:-1;;;;;53383:73:8;-1:-1:-1;;;;;53383:73:8;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;53383:73:8;;;;;;;;;;-1:-1:-1;53383:73:8;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;53383:73:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;53383:73:8;;;53373:84;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;53373:84:8;;;;;;;;;;;;;;;;53354:103;;53615:43;53630:4;53636:10;53648:9;53615:14;:43::i;:::-;53600:126;;;;;;;-1:-1:-1;;;;;53600:126:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53838:27;53850:4;53856:8;53838:11;:27::i;:::-;53823:106;;;;;;;-1:-1:-1;;;;;53823:106:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54008:3;53994:17;;;53986:61;;;;;-1:-1:-1;;;;;53986:61:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;54197:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;54197:50:8;;;:37;;;;;;;;;-1:-1:-1;;54197:37:8;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;54197:37:8;;;;;;;;-1:-1:-1;;;;;54197:50:8;;54182:162;;;;;;;-1:-1:-1;;;;;54182:162:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54424:66;54438:4;54444:7;54453:10;54465:9;54476:6;54424:66;;;;;;;;;;;;;;;;;;:13;:66::i;:::-;54409:135;;;;;;;-1:-1:-1;;;;;54409:135:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54566:66;54580:4;54586:7;54595:9;54606:10;54618:6;54566:66;;;;;;;;;;;;;;;;;;:13;:66::i;:::-;54551:135;;;;;;;-1:-1:-1;;;;;54551:135:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54698:62;54705:7;54714;54723:6;54731;54739:10;54751:8;54698:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;54698:62:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54698:62:8;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;54698:62:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54774:4:8;;53100:1683;-1:-1:-1;;;;;;;;;;;53100:1683:8:o;32273:451::-;32375:13;32411:29;32425:4;32431:8;32411:13;:29::i;:::-;32396:150;;;;;;;-1:-1:-1;;;;;32396:150:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32567:29;32581:4;32587:8;32567:13;:29::i;:::-;32552:150;;;;;;;-1:-1:-1;;;;;32552:150:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32715:4:8;32273:451;;;;;:::o;51453:574::-;51527:12;51547:10;51600:6;51570:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;51570:37:8;;;51560:48;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;51560:48:8;;;;;;;;;;;;;;;;51547:61;;51678:25;51690:4;51696:6;51678:11;:25::i;:::-;51677:26;51669:123;;;;;-1:-1:-1;;;;;51669:123:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51858:12;;:30;;;;;;;;;;;;:12;:30;;;;;;-1:-1:-1;;;;;51858:12:8;;;;:20;;:30;;;;;;;;;;;;;;;:12;;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;51858:30:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51858:30:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;51858:30:8;51850:154;;;;;;;-1:-1:-1;;;;;51850:154:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38209:943;38337:12;;;-1:-1:-1;;;;;38372:18:8;;;;38357:86;;;;;-1:-1:-1;;;;;38357:86:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38509:8;38519:31;38539:4;38545;38519:19;:31::i;:::-;38475:76;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38475:76:8;;;;;;;-1:-1:-1;;;;;38475:76:8;-1:-1:-1;;;;;38475:76:8;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;38475:76:8;;;38465:87;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38465:87:8;;;;;;;;;;;;;;;;38450:102;;38617:8;38627:29;38647:4;38653:2;38627:19;:29::i;:::-;38583:74;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38583:74:8;;;;;;;-1:-1:-1;;;;;38583:74:8;-1:-1:-1;;;;;38583:74:8;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;38583:74:8;;;38573:85;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;38573:85:8;;;;;;;;;;;;38680:12;;38707:26;;;;;;;;;;;38573:85;;-1:-1:-1;;;;;;38680:12:8;;;;-1:-1:-1;38680:20:8;;-1:-1:-1;38707:26:8;;:38;;-1:-1:-1;38738:6:8;;38680:12;;38707:20;;:26;;;;;;;;;;-1:-1:-1;38680:12:8;38707:26;;;5:2:-1;;;;30:1;27;20:12;5:2;38707:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38707:26:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38707:26:8;;:38;:30;:38;:::i;:::-;38680:66;;;;;-1:-1:-1;;;38680:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38680:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38680:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38680:66:8;38665:202;;;;;;;-1:-1:-1;;;;;38665:202:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38888:12;;38915:26;;;;;;;;;;;;;;-1:-1:-1;;;;;38888:12:8;;;;:20;;38909:4;;38915:38;;38946:6;;38888:12;;38915:20;;:26;;;;;;;;;;;;;;38888:12;;38915:26;;;5:2:-1;;;;30:1;27;20:12;5:2;38915:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38915:26:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38915:26:8;;:38;:30;:38;:::i;:::-;38888:66;;;;;-1:-1:-1;;;38888:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38888:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38888:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38888:66:8;38873:202;;;;;;;-1:-1:-1;;;;;38873:202:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39112:2;-1:-1:-1;;;;;39087:42:8;39106:4;-1:-1:-1;;;;;39087:42:8;;39096:8;39116:6;39124:4;39087:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;39087:42:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39087:42:8;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;39087:42:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39143:4:8;;38209:943;-1:-1:-1;;;;;;;;38209:943:8:o;33117:359::-;33199:13;33235:29;33250:4;33256:7;33235:14;:29::i;:::-;33220:102;;;;;;;-1:-1:-1;;;;;33220:102:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33343:31;33360:4;33366:7;33343:16;:31::i;:::-;33328:126;;;;;;;-1:-1:-1;;;;;33328:126:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33467:4:8;33117:359;;;;:::o;50929:203::-;51008:13;51029:10;51082:6;51052:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;51052:37:8;;;51042:48;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;51042:48:8;;;;;;;;;;;;51103:12;;:24;;;;;;;;;;;51042:48;;-1:-1:-1;;;;;;51103:12:8;;;;-1:-1:-1;51103:20:8;;-1:-1:-1;51103:24:8;;;;;263:2:-1;;-1:-1;51103:24:8;;;;;;;-1:-1:-1;51103:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;51103:24:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51103:24:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;51103:24:8;;50929:203;-1:-1:-1;;;;50929:203:8:o;16402:357::-;16490:25;16523:10;16596:23;16581:7;16546:43;;;;;;;;;;;;;-1:-1:-1;;;;;16546:43:8;-1:-1:-1;;;;;16546:43:8;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16546:43:8;;;16536:54;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;16536:54:8;;;;;;;;;;;;16622:12;;:27;;;;;;;;;;;16536:54;;-1:-1:-1;;;;;;16622:12:8;;;;-1:-1:-1;16622:23:8;;-1:-1:-1;16622:27:8;;;;;263:2:-1;;-1:-1;16622:27:8;;;;;;;-1:-1:-1;16622:12:8;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;16622:27:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16622:27:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16622:27:8;;-1:-1:-1;;;;;;16659:22:8;;;16655:100;;16698:15;16691:22;;;;16655:100;16741:7;16734:14;;16655:100;16402:357;;;;;;:::o;1143:234:2:-;1201:14;1307:6;;;;1299:55;;;;;-1:-1:-1;;;;;1299:55:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1367:5:2;;;1143:234::o;1540:174::-;1598:14;1632:5;;;1651:6;;;;1643:52;;;;;-1:-1:-1;;;;;1643:52:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1708:1;1540:174;-1:-1:-1;;;1540:174:2:o;17162:239:8:-;17245:11;17266:10;17321:34;17341:4;17347:7;17321:19;:34::i;:::-;17289:67;;;;;;;;;;;;;-1:-1:-1;;;;;17289:67:8;-1:-1:-1;;;;;17289:67:8;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;17289:67:8;;;17279:78;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;17810:241:8;17895:11;17914:10;17973:34;17993:4;17999:7;17973:19;:34::i;:::-;17937:71;;;;;;;;;;;;;-1:-1:-1;;;;;17937:71:8;-1:-1:-1;;;;;17937:71:8;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;17937:71:8;;;17927:82;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;", + "source": "pragma solidity 0.4.24;\n\nimport \"./Ownable.sol\";\nimport \"./TokenIOLib.sol\";\nimport \"./TokenIOStorage.sol\";\n\n\n/**\nCOPYRIGHT 2018 Token, Inc.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n@title Currency FX Contract for Token, Inc. Smart Money System\n\n@author Ryan Tate , Sean Pollock \n\n@notice Contract uses generalized storage contract, `TokenIOStorage`, for\nupgradeability of interface contract.\n\n@dev In the event that the main contract becomes deprecated, the upgraded contract\nwill be set as the owner of this contract, and use this contract's storage to\nmaintain data consistency between contract.\n\n*/\n\ncontract TokenIOFX is Ownable {\n\n /// @dev Set reference to TokenIOLib interface which proxies to TokenIOStorage\n using TokenIOLib for TokenIOLib.Data;\n TokenIOLib.Data lib;\n\n\n /**\n\t* @notice Constructor method for TokenIOFX contract\n\t* @param _storageContract Address of TokenIOStorage contract\n\t*/\n\tconstructor(address _storageContract) public {\n\t\t\t/// @dev Set the storage contract for the interface\n\t\t\t/// @dev NOTE: This contract will be unable to use the storage constract until\n\t\t\t/// @dev contract address is authorized with the storage contract\n\t\t\t/// @dev Once authorized, Use the `setParams` method to set storage values\n\t\t\tlib.Storage = TokenIOStorage(_storageContract);\n\n\t\t\t/// @dev set owner to contract initiator\n\t\t\towner[msg.sender] = true;\n\t}\n\n\n /**\n * @notice Accepts a signed fx request to swap currency pairs at a given amount;\n * @dev This method can be called directly between peers.\n * @param requester address Requester is the orginator of the offer and must\n * match the signature of the payload submitted by the fulfiller\n * @param symbolA Symbol of the currency desired\n * @param symbolB Symbol of the currency offered\n * @param valueA Amount of the currency desired\n * @param valueB Amount of the currency offered\n * @param sigV Ethereum secp256k1 signature V value; used by ecrecover()\n * @param sigR Ethereum secp256k1 signature R value; used by ecrecover()\n * @param sigS Ethereum secp256k1 signature S value; used by ecrecover()\n * @param expiration Expiration of the offer; Offer is good until expired\n * @return {\"success\" : \"Returns true if successfully called from another contract\"}\n */\n function swap(\n address requester,\n string symbolA,\n string symbolB,\n uint valueA,\n uint valueB,\n uint8 sigV,\n bytes32 sigR,\n bytes32 sigS,\n uint expiration\n ) public returns (bool success) {\n require(\n lib.execSwap(requester, symbolA, symbolB, valueA, valueB, sigV, sigR, sigS, expiration),\n \"Error: Unable to perform atomic currency swap. Please check parameters.\"\n );\n return true;\n }\n\n}\n", + "sourcePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOFX.sol", + "ast": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOFX.sol", + "exportedSymbols": { + "TokenIOFX": [ + 1427 + ] + }, + "id": 1428, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1353, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:6" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 1354, + "nodeType": "ImportDirective", + "scope": 1428, + "sourceUnit": 185, + "src": "25:23:6", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 1355, + "nodeType": "ImportDirective", + "scope": 1428, + "sourceUnit": 4623, + "src": "49:26:6", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 1356, + "nodeType": "ImportDirective", + "scope": 1428, + "sourceUnit": 5242, + "src": "76:30:6", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 1357, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "1091:7:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 1358, + "nodeType": "InheritanceSpecifier", + "src": "1091:7:6" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": "COPYRIGHT 2018 Token, Inc.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n@title Currency FX Contract for Token, Inc. Smart Money System\n@author Ryan Tate , Sean Pollock \n@notice Contract uses generalized storage contract, `TokenIOStorage`, for\nupgradeability of interface contract.\n@dev In the event that the main contract becomes deprecated, the upgraded contract\nwill be set as the owner of this contract, and use this contract's storage to\nmaintain data consistency between contract.", + "fullyImplemented": true, + "id": 1427, + "linearizedBaseContracts": [ + 1427, + 184 + ], + "name": "TokenIOFX", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 1361, + "libraryName": { + "contractScope": null, + "id": 1359, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4622, + "src": "1191:10:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4622", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "1185:37:6", + "typeName": { + "contractScope": null, + "id": 1360, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1206:15:6", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 1363, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 1427, + "src": "1225:19:6", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 1362, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1225:15:6", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 1383, + "nodeType": "Block", + "src": "1419:413:6", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 1374, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1368, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1363, + "src": "1708:3:6", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1370, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1645, + "src": "1708:11:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1372, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1365, + "src": "1737:16:6", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1371, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5241, + "src": "1722:14:6", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5241_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 1373, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1722:32:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1708:46:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "id": 1375, + "nodeType": "ExpressionStatement", + "src": "1708:46:6" + }, + { + "expression": { + "argumentTypes": null, + "id": 1381, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1376, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1804:5:6", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 1379, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1377, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "1810:3:6", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1378, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1810:10:6", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1804:17:6", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1380, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1824:4:6", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1804:24:6", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 1382, + "nodeType": "ExpressionStatement", + "src": "1804:24:6" + } + ] + }, + "documentation": "@notice Constructor method for TokenIOFX contract\n@param _storageContract Address of TokenIOStorage contract", + "id": 1384, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1366, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1365, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 1384, + "src": "1386:24:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1364, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1386:7:6", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1385:26:6" + }, + "payable": false, + "returnParameters": { + "id": 1367, + "nodeType": "ParameterList", + "parameters": [], + "src": "1419:0:6" + }, + "scope": 1427, + "src": "1374:458:6", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1425, + "nodeType": "Block", + "src": "2987:217:6", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1410, + "name": "requester", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1386, + "src": "3021:9:6", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1411, + "name": "symbolA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1388, + "src": "3032:7:6", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1412, + "name": "symbolB", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1390, + "src": "3041:7:6", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1413, + "name": "valueA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1392, + "src": "3050:6:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1414, + "name": "valueB", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1394, + "src": "3058:6:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1415, + "name": "sigV", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1396, + "src": "3066:4:6", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + { + "argumentTypes": null, + "id": 1416, + "name": "sigR", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1398, + "src": "3072:4:6", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "argumentTypes": null, + "id": 1417, + "name": "sigS", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1400, + "src": "3078:4:6", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "argumentTypes": null, + "id": 1418, + "name": "expiration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1402, + "src": "3084:10:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1408, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1363, + "src": "3008:3:6", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1409, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "execSwap", + "nodeType": "MemberAccess", + "referencedDeclaration": 4149, + "src": "3008:12:6", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint8_$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,string memory,string memory,uint256,uint256,uint8,bytes32,bytes32,uint256) returns (bool)" + } + }, + "id": 1419, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3008:87:6", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20706572666f726d2061746f6d69632063757272656e637920737761702e20506c6561736520636865636b20706172616d65746572732e", + "id": 1420, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3103:73:6", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_6ca463b35e5e08da21998ab6b3d6ced7b8f7a272da9305fde927b3e1999f0037", + "typeString": "literal_string \"Error: Unable to perform atomic currency swap. Please check parameters.\"" + }, + "value": "Error: Unable to perform atomic currency swap. Please check parameters." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_6ca463b35e5e08da21998ab6b3d6ced7b8f7a272da9305fde927b3e1999f0037", + "typeString": "literal_string \"Error: Unable to perform atomic currency swap. Please check parameters.\"" + } + ], + "id": 1407, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2993:7:6", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1421, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2993:189:6", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1422, + "nodeType": "ExpressionStatement", + "src": "2993:189:6" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1423, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3195:4:6", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1406, + "id": 1424, + "nodeType": "Return", + "src": "3188:11:6" + } + ] + }, + "documentation": "@notice Accepts a signed fx request to swap currency pairs at a given amount;\n@dev This method can be called directly between peers.\n@param requester address Requester is the orginator of the offer and must\nmatch the signature of the payload submitted by the fulfiller\n@param symbolA Symbol of the currency desired\n@param symbolB Symbol of the currency offered\n@param valueA Amount of the currency desired\n@param valueB Amount of the currency offered\n@param sigV Ethereum secp256k1 signature V value; used by ecrecover()\n@param sigR Ethereum secp256k1 signature R value; used by ecrecover()\n@param sigS Ethereum secp256k1 signature S value; used by ecrecover()\n@param expiration Expiration of the offer; Offer is good until expired\n@return {\"success\" : \"Returns true if successfully called from another contract\"}", + "id": 1426, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [], + "name": "swap", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1403, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1386, + "name": "requester", + "nodeType": "VariableDeclaration", + "scope": 1426, + "src": "2788:17:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1385, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2788:7:6", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1388, + "name": "symbolA", + "nodeType": "VariableDeclaration", + "scope": 1426, + "src": "2811:14:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1387, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2811:6:6", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1390, + "name": "symbolB", + "nodeType": "VariableDeclaration", + "scope": 1426, + "src": "2831:14:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1389, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2831:6:6", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1392, + "name": "valueA", + "nodeType": "VariableDeclaration", + "scope": 1426, + "src": "2851:11:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1391, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2851:4:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1394, + "name": "valueB", + "nodeType": "VariableDeclaration", + "scope": 1426, + "src": "2868:11:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1393, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2868:4:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1396, + "name": "sigV", + "nodeType": "VariableDeclaration", + "scope": 1426, + "src": "2885:10:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 1395, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "2885:5:6", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1398, + "name": "sigR", + "nodeType": "VariableDeclaration", + "scope": 1426, + "src": "2901:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1397, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2901:7:6", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1400, + "name": "sigS", + "nodeType": "VariableDeclaration", + "scope": 1426, + "src": "2919:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1399, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2919:7:6", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1402, + "name": "expiration", + "nodeType": "VariableDeclaration", + "scope": 1426, + "src": "2937:15:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1401, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2937:4:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2782:174:6" + }, + "payable": false, + "returnParameters": { + "id": 1406, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1405, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1426, + "src": "2973:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1404, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2973:4:6", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2972:14:6" + }, + "scope": 1427, + "src": "2769:435:6", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 1428, + "src": "1069:2138:6" + } + ], + "src": "0:3208:6" + }, + "legacyAST": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOFX.sol", + "exportedSymbols": { + "TokenIOFX": [ + 1427 + ] + }, + "id": 1428, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1353, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:6" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 1354, + "nodeType": "ImportDirective", + "scope": 1428, + "sourceUnit": 185, + "src": "25:23:6", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 1355, + "nodeType": "ImportDirective", + "scope": 1428, + "sourceUnit": 4623, + "src": "49:26:6", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 1356, + "nodeType": "ImportDirective", + "scope": 1428, + "sourceUnit": 5242, + "src": "76:30:6", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 1357, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "1091:7:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 1358, + "nodeType": "InheritanceSpecifier", + "src": "1091:7:6" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": "COPYRIGHT 2018 Token, Inc.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n@title Currency FX Contract for Token, Inc. Smart Money System\n@author Ryan Tate , Sean Pollock \n@notice Contract uses generalized storage contract, `TokenIOStorage`, for\nupgradeability of interface contract.\n@dev In the event that the main contract becomes deprecated, the upgraded contract\nwill be set as the owner of this contract, and use this contract's storage to\nmaintain data consistency between contract.", + "fullyImplemented": true, + "id": 1427, + "linearizedBaseContracts": [ + 1427, + 184 + ], + "name": "TokenIOFX", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 1361, + "libraryName": { + "contractScope": null, + "id": 1359, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4622, + "src": "1191:10:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4622", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "1185:37:6", + "typeName": { + "contractScope": null, + "id": 1360, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1206:15:6", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 1363, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 1427, + "src": "1225:19:6", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 1362, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1225:15:6", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 1383, + "nodeType": "Block", + "src": "1419:413:6", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 1374, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1368, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1363, + "src": "1708:3:6", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1370, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1645, + "src": "1708:11:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1372, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1365, + "src": "1737:16:6", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1371, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5241, + "src": "1722:14:6", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5241_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 1373, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1722:32:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1708:46:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "id": 1375, + "nodeType": "ExpressionStatement", + "src": "1708:46:6" + }, + { + "expression": { + "argumentTypes": null, + "id": 1381, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1376, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1804:5:6", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 1379, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1377, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "1810:3:6", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1378, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1810:10:6", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1804:17:6", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1380, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1824:4:6", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1804:24:6", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 1382, + "nodeType": "ExpressionStatement", + "src": "1804:24:6" + } + ] + }, + "documentation": "@notice Constructor method for TokenIOFX contract\n@param _storageContract Address of TokenIOStorage contract", + "id": 1384, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1366, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1365, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 1384, + "src": "1386:24:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1364, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1386:7:6", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1385:26:6" + }, + "payable": false, + "returnParameters": { + "id": 1367, + "nodeType": "ParameterList", + "parameters": [], + "src": "1419:0:6" + }, + "scope": 1427, + "src": "1374:458:6", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1425, + "nodeType": "Block", + "src": "2987:217:6", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1410, + "name": "requester", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1386, + "src": "3021:9:6", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1411, + "name": "symbolA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1388, + "src": "3032:7:6", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1412, + "name": "symbolB", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1390, + "src": "3041:7:6", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1413, + "name": "valueA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1392, + "src": "3050:6:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1414, + "name": "valueB", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1394, + "src": "3058:6:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1415, + "name": "sigV", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1396, + "src": "3066:4:6", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + { + "argumentTypes": null, + "id": 1416, + "name": "sigR", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1398, + "src": "3072:4:6", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "argumentTypes": null, + "id": 1417, + "name": "sigS", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1400, + "src": "3078:4:6", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "argumentTypes": null, + "id": 1418, + "name": "expiration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1402, + "src": "3084:10:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1408, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1363, + "src": "3008:3:6", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1409, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "execSwap", + "nodeType": "MemberAccess", + "referencedDeclaration": 4149, + "src": "3008:12:6", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint8_$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,string memory,string memory,uint256,uint256,uint8,bytes32,bytes32,uint256) returns (bool)" + } + }, + "id": 1419, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3008:87:6", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20706572666f726d2061746f6d69632063757272656e637920737761702e20506c6561736520636865636b20706172616d65746572732e", + "id": 1420, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3103:73:6", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_6ca463b35e5e08da21998ab6b3d6ced7b8f7a272da9305fde927b3e1999f0037", + "typeString": "literal_string \"Error: Unable to perform atomic currency swap. Please check parameters.\"" + }, + "value": "Error: Unable to perform atomic currency swap. Please check parameters." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_6ca463b35e5e08da21998ab6b3d6ced7b8f7a272da9305fde927b3e1999f0037", + "typeString": "literal_string \"Error: Unable to perform atomic currency swap. Please check parameters.\"" + } + ], + "id": 1407, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2993:7:6", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1421, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2993:189:6", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1422, + "nodeType": "ExpressionStatement", + "src": "2993:189:6" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1423, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3195:4:6", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1406, + "id": 1424, + "nodeType": "Return", + "src": "3188:11:6" + } + ] + }, + "documentation": "@notice Accepts a signed fx request to swap currency pairs at a given amount;\n@dev This method can be called directly between peers.\n@param requester address Requester is the orginator of the offer and must\nmatch the signature of the payload submitted by the fulfiller\n@param symbolA Symbol of the currency desired\n@param symbolB Symbol of the currency offered\n@param valueA Amount of the currency desired\n@param valueB Amount of the currency offered\n@param sigV Ethereum secp256k1 signature V value; used by ecrecover()\n@param sigR Ethereum secp256k1 signature R value; used by ecrecover()\n@param sigS Ethereum secp256k1 signature S value; used by ecrecover()\n@param expiration Expiration of the offer; Offer is good until expired\n@return {\"success\" : \"Returns true if successfully called from another contract\"}", + "id": 1426, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [], + "name": "swap", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1403, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1386, + "name": "requester", + "nodeType": "VariableDeclaration", + "scope": 1426, + "src": "2788:17:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1385, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2788:7:6", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1388, + "name": "symbolA", + "nodeType": "VariableDeclaration", + "scope": 1426, + "src": "2811:14:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1387, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2811:6:6", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1390, + "name": "symbolB", + "nodeType": "VariableDeclaration", + "scope": 1426, + "src": "2831:14:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1389, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2831:6:6", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1392, + "name": "valueA", + "nodeType": "VariableDeclaration", + "scope": 1426, + "src": "2851:11:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1391, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2851:4:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1394, + "name": "valueB", + "nodeType": "VariableDeclaration", + "scope": 1426, + "src": "2868:11:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1393, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2868:4:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1396, + "name": "sigV", + "nodeType": "VariableDeclaration", + "scope": 1426, + "src": "2885:10:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 1395, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "2885:5:6", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1398, + "name": "sigR", + "nodeType": "VariableDeclaration", + "scope": 1426, + "src": "2901:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1397, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2901:7:6", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1400, + "name": "sigS", + "nodeType": "VariableDeclaration", + "scope": 1426, + "src": "2919:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1399, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2919:7:6", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1402, + "name": "expiration", + "nodeType": "VariableDeclaration", + "scope": 1426, + "src": "2937:15:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1401, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2937:4:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2782:174:6" + }, + "payable": false, + "returnParameters": { + "id": 1406, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1405, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1426, + "src": "2973:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1404, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2973:4:6", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2972:14:6" + }, + "scope": 1427, + "src": "2769:435:6", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 1428, + "src": "1069:2138:6" + } + ], + "src": "0:3208:6" + }, + "compiler": { + "name": "solc", + "version": "0.4.24+commit.e67f0147.Emscripten.clang" + }, + "networks": { + "1": { + "events": {}, + "links": {}, + "address": "0x741090779fb989fcf39468cc3719de45666f3cc7", + "transactionHash": "0xce8ed3ada7c3a64449ff1e876d386a682d0ea841bf52ff24cbcebc6b953ccba5" + } + }, + "schemaVersion": "2.0.1", + "updatedAt": "2018-09-18T18:57:45.577Z" +} \ No newline at end of file diff --git a/deployed/mainnet-deprecated/TokenIOFeeContract.json b/deployed/mainnet-deprecated/TokenIOFeeContract.json new file mode 100644 index 0000000..00a3728 --- /dev/null +++ b/deployed/mainnet-deprecated/TokenIOFeeContract.json @@ -0,0 +1,6205 @@ +{ + "contractName": "TokenIOFeeContract", + "abi": [ + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "allowOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "removeOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "", + "type": "address" + } + ], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "name": "_storageContract", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "AllowOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "RevokeOwnership", + "type": "event" + }, + { + "constant": false, + "inputs": [ + { + "name": "feeBps", + "type": "uint256" + }, + { + "name": "feeMin", + "type": "uint256" + }, + { + "name": "feeMax", + "type": "uint256" + }, + { + "name": "feeFlat", + "type": "uint256" + }, + { + "name": "feeMsg", + "type": "bytes" + } + ], + "name": "setFeeParams", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getFeeParams", + "outputs": [ + { + "name": "bps", + "type": "uint256" + }, + { + "name": "min", + "type": "uint256" + }, + { + "name": "max", + "type": "uint256" + }, + { + "name": "flat", + "type": "uint256" + }, + { + "name": "feeMsg", + "type": "bytes" + }, + { + "name": "feeContract", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "currency", + "type": "string" + } + ], + "name": "getTokenBalance", + "outputs": [ + { + "name": "balance", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "amount", + "type": "uint256" + } + ], + "name": "calculateFees", + "outputs": [ + { + "name": "fees", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "currency", + "type": "string" + }, + { + "name": "to", + "type": "address" + }, + { + "name": "amount", + "type": "uint256" + }, + { + "name": "data", + "type": "bytes" + } + ], + "name": "transferCollectedFees", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b506040516020806126a4833981016040908152905133600090815260208190529182208054600160ff19918216811783558054600160a060020a031916600160a060020a03909416939093178355815416909117905561262e90819061007690396000f30060806040526004361061007f5763ffffffff60e060020a600035041663025abd58811461008457806313b4312f146100ef5780634bbc142c146101b057806352238fdd146101d1578063666a3427146101e9578063666e1b391461020a578063aa08dfd31461022b578063be6fc18114610296578063f2fde38b14610358575b600080fd5b34801561009057600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100dd9436949293602493928401919081908401838280828437509497506103799650505050505050565b60408051918252519081900360200190f35b3480156100fb57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261019c94369492936024939284019190819084018382808284375050604080516020888301358a018035601f8101839004830284018301909452838352979a8935600160a060020a03169a8a8301359a919990985060609091019650919450908101925081908401838280828437509497506103939650505050505050565b604080519115158252519081900360200190f35b3480156101bc57600080fd5b5061019c600160a060020a036004351661049a565b3480156101dd57600080fd5b506100dd600435610556565b3480156101f557600080fd5b5061019c600160a060020a036004351661056a565b34801561021657600080fd5b5061019c600160a060020a0360043516610623565b34801561023757600080fd5b50604080516020601f60843560048181013592830184900484028501840190955281845261019c948035946024803595604435956064359536959460a49490939101919081908401838280828437509497506106389650505050505050565b3480156102a257600080fd5b506102ab610916565b604051808781526020018681526020018581526020018481526020018060200183600160a060020a0316600160a060020a03168152602001828103825284818151815260200191508051906020019080838360005b83811015610318578181015183820152602001610300565b50505050905090810190601f1680156103455780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b34801561036457600080fd5b5061019c600160a060020a0360043516610987565b600061038d6001833063ffffffff610ac116565b92915050565b3360009081526020819052604081205460ff1615156103fe576040805160e560020a62461bcd02815260206004820152603960248201526000805160206125e383398151915260448201526000805160206125a3833981519152606482015290519081900360840190fd5b6104136001863087878763ffffffff610c5716565b151561048f576040805160e560020a62461bcd02815260206004820152602a60248201527f4572726f723a20756e61626c6520746f207472616e736665722066656573207460448201527f6f206163636f756e742e00000000000000000000000000000000000000000000606482015290519081900360840190fd5b506001949350505050565b3360009081526020819052604081205460ff161515610505576040805160e560020a62461bcd02815260206004820152603960248201526000805160206125e383398151915260448201526000805160206125a3833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b600061038d6001308463ffffffff6113d316565b3360009081526020819052604081205460ff1615156105d5576040805160e560020a62461bcd02815260206004820152603960248201526000805160206125e383398151915260448201526000805160206125a3833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b3360009081526020819052604081205460ff1615156106a3576040805160e560020a62461bcd02815260206004820152603960248201526000805160206125e383398151915260448201526000805160206125a3833981519152606482015290519081900360840190fd5b6106b460018763ffffffff6118c416565b151561071e576040805160e560020a62461bcd02815260206004820152602f60248201526000805160206125c383398151915260448201527f7420626173697320706f696e74732e0000000000000000000000000000000000606482015290519081900360840190fd5b61072f60018663ffffffff611ad716565b1515610799576040805160e560020a62461bcd02815260206004820152602e60248201526000805160206125c383398151915260448201527f74206d696e696d756d206665652e000000000000000000000000000000000000606482015290519081900360840190fd5b6107aa60018563ffffffff611b5516565b1515610814576040805160e560020a62461bcd02815260206004820152602e60248201526000805160206125c383398151915260448201527f74206d6178696d756d206665652e000000000000000000000000000000000000606482015290519081900360840190fd5b61082560018463ffffffff611bd316565b151561088f576040805160e560020a62461bcd02815260206004820152602b60248201526000805160206125c383398151915260448201527f7420666c6174206665652e000000000000000000000000000000000000000000606482015290519081900360840190fd5b6108a060018363ffffffff611c5116565b151561090a576040805160e560020a62461bcd02815260206004820152603260248201526000805160206125c383398151915260448201527f742064656661756c74206d6573736167652e0000000000000000000000000000606482015290519081900360840190fd5b50600195945050505050565b600080808060608161092f60013063ffffffff611dc816565b61094060013063ffffffff611f0516565b61095160013063ffffffff611f9616565b61096260013063ffffffff61202716565b61097360013063ffffffff6120b816565b939a92995090975095509093503092509050565b3360009081526020819052604081205460ff1615156109f2576040805160e560020a62461bcd02815260206004820152603960248201526000805160206125e383398151915260448201526000805160206125a3833981519152606482015290519081900360840190fd5b600160a060020a0382161515610a52576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b60008083610acf868561226b565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b60208310610b295780518252601f199092019160209182019101610b0a565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610bab5780518252601f199092019160209182019101610b8c565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b158015610c2257600080fd5b505af1158015610c36573d6000803e3d6000fd5b505050506040513d6020811015610c4c57600080fd5b505195945050505050565b60008080600160a060020a0386161515610ce1576040805160e560020a62461bcd02815260206004820152602560248201527f4572726f723a2060746f602061646472657373206d757374206e6f742062652060448201527f6e756c6c2e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b87610cec8a8961226b565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b60208310610d465780518252601f199092019160209182019101610d27565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610dc85780518252601f199092019160209182019101610da9565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020915087610e028a8861226b565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b60208310610e5c5780518252601f199092019160209182019101610e3d565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610ede5780518252601f199092019160209182019101610ebf565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208f5460e060020a63bd02d0f5028452600484018a90529451909750600160a060020a03909416955063e2a4853a94508793610f9993508b92879263bd02d0f5926024808401938290030181600087803b158015610f6157600080fd5b505af1158015610f75573d6000803e3d6000fd5b505050506040513d6020811015610f8b57600080fd5b50519063ffffffff6123dd16565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015610fe157600080fd5b505af1158015610ff5573d6000803e3d6000fd5b505050506040513d602081101561100b57600080fd5b505115156110d5576040805160e560020a62461bcd02815260206004820152606960248201527f4572726f723a20556e61626c6520746f207365742073746f726167652076616c60448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b88546040805160e060020a63bd02d0f5028152600481018490529051600160a060020a039092169163e2a4853a91849161116c918a91869163bd02d0f59160248083019260209291908290030181600087803b15801561113457600080fd5b505af1158015611148573d6000803e3d6000fd5b505050506040513d602081101561115e57600080fd5b50519063ffffffff61246216565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b1580156111b457600080fd5b505af11580156111c8573d6000803e3d6000fd5b505050506040513d60208110156111de57600080fd5b505115156112a8576040805160e560020a62461bcd02815260206004820152606960248201527f4572726f723a20556e61626c6520746f207365742073746f726167652076616c60448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b85600160a060020a031687600160a060020a03167f6f3dcde00ed34d4f404b335a65d18fb4adf74f5b817aa46f5d7c4f05c6d1e96e8a8888604051808060200184815260200180602001838103835286818151815260200191508051906020019080838360005b8381101561132757818101518382015260200161130f565b50505050905090810190601f1680156113545780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561138757818101518382015260200161136f565b50505050905090810190601f1680156113b45780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a350600198975050505050505050565b8254604080517f6665652e6d617800000000000000000000000000000000000000000000000000602080830191909152600160a060020a03868116606060020a0260278401528351808403601b018152603b9093019384905282516000958695869586958695869594169363bd02d0f593918291908401908083835b6020831061146e5780518252601f19909201916020918201910161144f565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b1580156114cf57600080fd5b505af11580156114e3573d6000803e3d6000fd5b505050506040513d60208110156114f957600080fd5b50518954604080517f6665652e6d696e00000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260278401528351808403601b018152603b909301938490528251959a509093169363bd02d0f5939192918291908401908083835b6020831061158f5780518252601f199092019160209182019101611570565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b1580156115f057600080fd5b505af1158015611604573d6000803e3d6000fd5b505050506040513d602081101561161a57600080fd5b50518954604080517f6665652e62707300000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260278401528351808403601b018152603b9093019384905282519599509093169363bd02d0f5939192918291908401908083835b602083106116b05780518252601f199092019160209182019101611691565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b15801561171157600080fd5b505af1158015611725573d6000803e3d6000fd5b505050506040513d602081101561173b57600080fd5b50518954604080517f6665652e666c6174000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260288401528351808403601c018152603c9093019384905282519598509093169363bd02d0f5939192918291908401908083835b602083106117d15780518252601f1990920191602091820191016117b2565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b15801561183257600080fd5b505af1158015611846573d6000803e3d6000fd5b505050506040513d602081101561185c57600080fd5b505191506118928261188661271061187a8b8863ffffffff6124ec16565b9063ffffffff61258b16565b9063ffffffff61246216565b9050848111156118a4578495506118b8565b838110156118b4578395506118b8565b8095505b50505050509392505050565b604080517f6665652e62707300000000000000000000000000000000000000000000000000602080830191909152606060020a300260278301528251601b818403018152603b909201928390528151600093849392909182918401908083835b602083106119435780518252601f199092019160209182019101611924565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547fe2a4853a00000000000000000000000000000000000000000000000000000000845260048401829052602484018b90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b1580156119d757600080fd5b505af11580156119eb573d6000803e3d6000fd5b505050506040513d6020811015611a0157600080fd5b50511515611acb576040805160e560020a62461bcd02815260206004820152606860248201527f4572726f723a20556e61626c6520746f207365742073746f726167652076616c60448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b600191505b5092915050565b604080517f6665652e6d696e00000000000000000000000000000000000000000000000000602080830191909152606060020a300260278301528251601b818403018152603b90920192839052815160009384939290918291840190808383602083106119435780518252601f199092019160209182019101611924565b604080517f6665652e6d617800000000000000000000000000000000000000000000000000602080830191909152606060020a300260278301528251601b818403018152603b90920192839052815160009384939290918291840190808383602083106119435780518252601f199092019160209182019101611924565b604080517f6665652e666c6174000000000000000000000000000000000000000000000000602080830191909152606060020a300260288301528251601c818403018152603c90920192839052815160009384939290918291840190808383602083106119435780518252601f199092019160209182019101611924565b604080517f6665652e6d736700000000000000000000000000000000000000000000000000602080830191909152606060020a300260278301528251601b818403018152603b909201928390528151600093849392909182918401908083835b60208310611cd05780518252601f199092019160209182019101611cb1565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547f2e28d08400000000000000000000000000000000000000000000000000000000845260048401828152602485019687528b5160448601528b51929950600160a060020a039091169750632e28d084965088958b9550909390926064909101919085019080838360005b83811015611d7b578181015183820152602001611d63565b50505050905090810190601f168015611da85780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b1580156119d757600080fd5b6000808260405160200180807f6665652e6270730000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611e5a5780518252601f199092019160209182019101611e3b565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b158015611ed157600080fd5b505af1158015611ee5573d6000803e3d6000fd5b505050506040513d6020811015611efb57600080fd5b5051949350505050565b6000808260405160200180807f6665652e6d696e0000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e5a5780518252601f199092019160209182019101611e3b565b6000808260405160200180807f6665652e6d61780000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e5a5780518252601f199092019160209182019101611e3b565b6000808260405160200180807f6665652e666c617400000000000000000000000000000000000000000000000081525060080182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e5a5780518252601f199092019160209182019101611e3b565b606060008260405160200180807f6665652e6d73670000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b6020831061214b5780518252601f19909201916020918201910161212c565b5181516020939093036101000a60001901801990911692169190911790526040805191909301819003812089547fc031a180000000000000000000000000000000000000000000000000000000008352600483018290529351909650600160a060020a03909316945063c031a1809350602480820193600093509182900301818387803b1580156121db57600080fd5b505af11580156121ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561221857600080fd5b81019080805164010000000081111561223057600080fd5b8201602081018481111561224357600080fd5b815164010000000081118282018710171561225d57600080fd5b509098975050505050505050565b60008060008360405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106122ff5780518252601f1990920191602091820191016122e0565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b15801561238c57600080fd5b505af11580156123a0573d6000803e3d6000fd5b505050506040513d60208110156123b657600080fd5b50519050600160a060020a038116156123d1578092506123d5565b8392505b505092915050565b60008282111561245c576040805160e560020a62461bcd028152602060048201526024808201527f4572726f723a20556e73616665207375627472616374696f6e206f706572617460448201527f696f6e2100000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50900390565b6000828201838110156124e5576040805160e560020a62461bcd02815260206004820152602160248201527f4572726f723a20556e73616665206164646974696f6e206f7065726174696f6e60448201527f2100000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b9392505050565b6000808315156124ff5760009150611ad0565b5082820282848281151561250f57fe5b04146124e5576040805160e560020a62461bcd02815260206004820152602760248201527f4572726f723a20556e73616665206d756c7469706c69636174696f6e206f706560448201527f726174696f6e2100000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600080828481151561259957fe5b04949350505050560020616c6c6f7765642062792074686520636f6e74726163742e000000000000004572726f723a20556e61626c6520746f207365742066656520636f6e747261634572726f723a205472616e73616374696f6e2073656e646572206973206e6f74a165627a7a72305820d4483eecc10f9e5a0385f3e782788a18e4ac3d2ed8d1c107d614e3c30fd164fb0029", + "deployedBytecode": "0x60806040526004361061007f5763ffffffff60e060020a600035041663025abd58811461008457806313b4312f146100ef5780634bbc142c146101b057806352238fdd146101d1578063666a3427146101e9578063666e1b391461020a578063aa08dfd31461022b578063be6fc18114610296578063f2fde38b14610358575b600080fd5b34801561009057600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100dd9436949293602493928401919081908401838280828437509497506103799650505050505050565b60408051918252519081900360200190f35b3480156100fb57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261019c94369492936024939284019190819084018382808284375050604080516020888301358a018035601f8101839004830284018301909452838352979a8935600160a060020a03169a8a8301359a919990985060609091019650919450908101925081908401838280828437509497506103939650505050505050565b604080519115158252519081900360200190f35b3480156101bc57600080fd5b5061019c600160a060020a036004351661049a565b3480156101dd57600080fd5b506100dd600435610556565b3480156101f557600080fd5b5061019c600160a060020a036004351661056a565b34801561021657600080fd5b5061019c600160a060020a0360043516610623565b34801561023757600080fd5b50604080516020601f60843560048181013592830184900484028501840190955281845261019c948035946024803595604435956064359536959460a49490939101919081908401838280828437509497506106389650505050505050565b3480156102a257600080fd5b506102ab610916565b604051808781526020018681526020018581526020018481526020018060200183600160a060020a0316600160a060020a03168152602001828103825284818151815260200191508051906020019080838360005b83811015610318578181015183820152602001610300565b50505050905090810190601f1680156103455780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b34801561036457600080fd5b5061019c600160a060020a0360043516610987565b600061038d6001833063ffffffff610ac116565b92915050565b3360009081526020819052604081205460ff1615156103fe576040805160e560020a62461bcd02815260206004820152603960248201526000805160206125e383398151915260448201526000805160206125a3833981519152606482015290519081900360840190fd5b6104136001863087878763ffffffff610c5716565b151561048f576040805160e560020a62461bcd02815260206004820152602a60248201527f4572726f723a20756e61626c6520746f207472616e736665722066656573207460448201527f6f206163636f756e742e00000000000000000000000000000000000000000000606482015290519081900360840190fd5b506001949350505050565b3360009081526020819052604081205460ff161515610505576040805160e560020a62461bcd02815260206004820152603960248201526000805160206125e383398151915260448201526000805160206125a3833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b600061038d6001308463ffffffff6113d316565b3360009081526020819052604081205460ff1615156105d5576040805160e560020a62461bcd02815260206004820152603960248201526000805160206125e383398151915260448201526000805160206125a3833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b3360009081526020819052604081205460ff1615156106a3576040805160e560020a62461bcd02815260206004820152603960248201526000805160206125e383398151915260448201526000805160206125a3833981519152606482015290519081900360840190fd5b6106b460018763ffffffff6118c416565b151561071e576040805160e560020a62461bcd02815260206004820152602f60248201526000805160206125c383398151915260448201527f7420626173697320706f696e74732e0000000000000000000000000000000000606482015290519081900360840190fd5b61072f60018663ffffffff611ad716565b1515610799576040805160e560020a62461bcd02815260206004820152602e60248201526000805160206125c383398151915260448201527f74206d696e696d756d206665652e000000000000000000000000000000000000606482015290519081900360840190fd5b6107aa60018563ffffffff611b5516565b1515610814576040805160e560020a62461bcd02815260206004820152602e60248201526000805160206125c383398151915260448201527f74206d6178696d756d206665652e000000000000000000000000000000000000606482015290519081900360840190fd5b61082560018463ffffffff611bd316565b151561088f576040805160e560020a62461bcd02815260206004820152602b60248201526000805160206125c383398151915260448201527f7420666c6174206665652e000000000000000000000000000000000000000000606482015290519081900360840190fd5b6108a060018363ffffffff611c5116565b151561090a576040805160e560020a62461bcd02815260206004820152603260248201526000805160206125c383398151915260448201527f742064656661756c74206d6573736167652e0000000000000000000000000000606482015290519081900360840190fd5b50600195945050505050565b600080808060608161092f60013063ffffffff611dc816565b61094060013063ffffffff611f0516565b61095160013063ffffffff611f9616565b61096260013063ffffffff61202716565b61097360013063ffffffff6120b816565b939a92995090975095509093503092509050565b3360009081526020819052604081205460ff1615156109f2576040805160e560020a62461bcd02815260206004820152603960248201526000805160206125e383398151915260448201526000805160206125a3833981519152606482015290519081900360840190fd5b600160a060020a0382161515610a52576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b60008083610acf868561226b565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b60208310610b295780518252601f199092019160209182019101610b0a565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610bab5780518252601f199092019160209182019101610b8c565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b158015610c2257600080fd5b505af1158015610c36573d6000803e3d6000fd5b505050506040513d6020811015610c4c57600080fd5b505195945050505050565b60008080600160a060020a0386161515610ce1576040805160e560020a62461bcd02815260206004820152602560248201527f4572726f723a2060746f602061646472657373206d757374206e6f742062652060448201527f6e756c6c2e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b87610cec8a8961226b565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b60208310610d465780518252601f199092019160209182019101610d27565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610dc85780518252601f199092019160209182019101610da9565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020915087610e028a8861226b565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b60208310610e5c5780518252601f199092019160209182019101610e3d565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610ede5780518252601f199092019160209182019101610ebf565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208f5460e060020a63bd02d0f5028452600484018a90529451909750600160a060020a03909416955063e2a4853a94508793610f9993508b92879263bd02d0f5926024808401938290030181600087803b158015610f6157600080fd5b505af1158015610f75573d6000803e3d6000fd5b505050506040513d6020811015610f8b57600080fd5b50519063ffffffff6123dd16565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015610fe157600080fd5b505af1158015610ff5573d6000803e3d6000fd5b505050506040513d602081101561100b57600080fd5b505115156110d5576040805160e560020a62461bcd02815260206004820152606960248201527f4572726f723a20556e61626c6520746f207365742073746f726167652076616c60448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b88546040805160e060020a63bd02d0f5028152600481018490529051600160a060020a039092169163e2a4853a91849161116c918a91869163bd02d0f59160248083019260209291908290030181600087803b15801561113457600080fd5b505af1158015611148573d6000803e3d6000fd5b505050506040513d602081101561115e57600080fd5b50519063ffffffff61246216565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b1580156111b457600080fd5b505af11580156111c8573d6000803e3d6000fd5b505050506040513d60208110156111de57600080fd5b505115156112a8576040805160e560020a62461bcd02815260206004820152606960248201527f4572726f723a20556e61626c6520746f207365742073746f726167652076616c60448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b85600160a060020a031687600160a060020a03167f6f3dcde00ed34d4f404b335a65d18fb4adf74f5b817aa46f5d7c4f05c6d1e96e8a8888604051808060200184815260200180602001838103835286818151815260200191508051906020019080838360005b8381101561132757818101518382015260200161130f565b50505050905090810190601f1680156113545780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561138757818101518382015260200161136f565b50505050905090810190601f1680156113b45780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a350600198975050505050505050565b8254604080517f6665652e6d617800000000000000000000000000000000000000000000000000602080830191909152600160a060020a03868116606060020a0260278401528351808403601b018152603b9093019384905282516000958695869586958695869594169363bd02d0f593918291908401908083835b6020831061146e5780518252601f19909201916020918201910161144f565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b1580156114cf57600080fd5b505af11580156114e3573d6000803e3d6000fd5b505050506040513d60208110156114f957600080fd5b50518954604080517f6665652e6d696e00000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260278401528351808403601b018152603b909301938490528251959a509093169363bd02d0f5939192918291908401908083835b6020831061158f5780518252601f199092019160209182019101611570565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b1580156115f057600080fd5b505af1158015611604573d6000803e3d6000fd5b505050506040513d602081101561161a57600080fd5b50518954604080517f6665652e62707300000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260278401528351808403601b018152603b9093019384905282519599509093169363bd02d0f5939192918291908401908083835b602083106116b05780518252601f199092019160209182019101611691565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b15801561171157600080fd5b505af1158015611725573d6000803e3d6000fd5b505050506040513d602081101561173b57600080fd5b50518954604080517f6665652e666c6174000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260288401528351808403601c018152603c9093019384905282519598509093169363bd02d0f5939192918291908401908083835b602083106117d15780518252601f1990920191602091820191016117b2565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b15801561183257600080fd5b505af1158015611846573d6000803e3d6000fd5b505050506040513d602081101561185c57600080fd5b505191506118928261188661271061187a8b8863ffffffff6124ec16565b9063ffffffff61258b16565b9063ffffffff61246216565b9050848111156118a4578495506118b8565b838110156118b4578395506118b8565b8095505b50505050509392505050565b604080517f6665652e62707300000000000000000000000000000000000000000000000000602080830191909152606060020a300260278301528251601b818403018152603b909201928390528151600093849392909182918401908083835b602083106119435780518252601f199092019160209182019101611924565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547fe2a4853a00000000000000000000000000000000000000000000000000000000845260048401829052602484018b90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b1580156119d757600080fd5b505af11580156119eb573d6000803e3d6000fd5b505050506040513d6020811015611a0157600080fd5b50511515611acb576040805160e560020a62461bcd02815260206004820152606860248201527f4572726f723a20556e61626c6520746f207365742073746f726167652076616c60448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b600191505b5092915050565b604080517f6665652e6d696e00000000000000000000000000000000000000000000000000602080830191909152606060020a300260278301528251601b818403018152603b90920192839052815160009384939290918291840190808383602083106119435780518252601f199092019160209182019101611924565b604080517f6665652e6d617800000000000000000000000000000000000000000000000000602080830191909152606060020a300260278301528251601b818403018152603b90920192839052815160009384939290918291840190808383602083106119435780518252601f199092019160209182019101611924565b604080517f6665652e666c6174000000000000000000000000000000000000000000000000602080830191909152606060020a300260288301528251601c818403018152603c90920192839052815160009384939290918291840190808383602083106119435780518252601f199092019160209182019101611924565b604080517f6665652e6d736700000000000000000000000000000000000000000000000000602080830191909152606060020a300260278301528251601b818403018152603b909201928390528151600093849392909182918401908083835b60208310611cd05780518252601f199092019160209182019101611cb1565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547f2e28d08400000000000000000000000000000000000000000000000000000000845260048401828152602485019687528b5160448601528b51929950600160a060020a039091169750632e28d084965088958b9550909390926064909101919085019080838360005b83811015611d7b578181015183820152602001611d63565b50505050905090810190601f168015611da85780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b1580156119d757600080fd5b6000808260405160200180807f6665652e6270730000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611e5a5780518252601f199092019160209182019101611e3b565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b158015611ed157600080fd5b505af1158015611ee5573d6000803e3d6000fd5b505050506040513d6020811015611efb57600080fd5b5051949350505050565b6000808260405160200180807f6665652e6d696e0000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e5a5780518252601f199092019160209182019101611e3b565b6000808260405160200180807f6665652e6d61780000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e5a5780518252601f199092019160209182019101611e3b565b6000808260405160200180807f6665652e666c617400000000000000000000000000000000000000000000000081525060080182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e5a5780518252601f199092019160209182019101611e3b565b606060008260405160200180807f6665652e6d73670000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b6020831061214b5780518252601f19909201916020918201910161212c565b5181516020939093036101000a60001901801990911692169190911790526040805191909301819003812089547fc031a180000000000000000000000000000000000000000000000000000000008352600483018290529351909650600160a060020a03909316945063c031a1809350602480820193600093509182900301818387803b1580156121db57600080fd5b505af11580156121ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561221857600080fd5b81019080805164010000000081111561223057600080fd5b8201602081018481111561224357600080fd5b815164010000000081118282018710171561225d57600080fd5b509098975050505050505050565b60008060008360405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106122ff5780518252601f1990920191602091820191016122e0565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b15801561238c57600080fd5b505af11580156123a0573d6000803e3d6000fd5b505050506040513d60208110156123b657600080fd5b50519050600160a060020a038116156123d1578092506123d5565b8392505b505092915050565b60008282111561245c576040805160e560020a62461bcd028152602060048201526024808201527f4572726f723a20556e73616665207375627472616374696f6e206f706572617460448201527f696f6e2100000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50900390565b6000828201838110156124e5576040805160e560020a62461bcd02815260206004820152602160248201527f4572726f723a20556e73616665206164646974696f6e206f7065726174696f6e60448201527f2100000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b9392505050565b6000808315156124ff5760009150611ad0565b5082820282848281151561250f57fe5b04146124e5576040805160e560020a62461bcd02815260206004820152602760248201527f4572726f723a20556e73616665206d756c7469706c69636174696f6e206f706560448201527f726174696f6e2100000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600080828481151561259957fe5b04949350505050560020616c6c6f7765642062792074686520636f6e74726163742e000000000000004572726f723a20556e61626c6520746f207365742066656520636f6e747261634572726f723a205472616e73616374696f6e2073656e646572206973206e6f74a165627a7a72305820d4483eecc10f9e5a0385f3e782788a18e4ac3d2ed8d1c107d614e3c30fd164fb0029", + "sourceMap": "1070:3794:7:-;;;1380:458;8:9:-1;5:2;;;30:1;27;20:12;5:2;1380:458:7;;;;;;;;;;;;;;;;1117:10:1;1111:5;:17;;;1380:458:7;1111:17:1;;;;;;:24;;1131:4;-1:-1:-1;;1111:24:1;;;;;;;1714:46:7;;-1:-1:-1;;;;;;1714:46:7;-1:-1:-1;;;;;1714:46:7;;;;;;;;;1810:24;;;;;;;;1070:3794;;;;;;;;", + "deployedSourceMap": "1070:3794:7:-;;;;;;;;;-1:-1:-1;;;1070:3794:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3729:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3729:135:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3729:135:7;;-1:-1:-1;3729:135:7;;-1:-1:-1;;;;;;;3729:135:7;;;;;;;;;;;;;;;;;4587:273;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4587:273:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4587:273:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4587:273:7;;;;;;;;;;;-1:-1:-1;4587:273:7;;;;;-1:-1:-1;4587:273:7;;-1:-1:-1;4587:273:7;;;;-1:-1:-1;4587:273:7;;;;;;;;;;-1:-1:-1;4587:273:7;;-1:-1:-1;4587:273:7;;-1:-1:-1;;;;;;;4587:273:7;;;;;;;;;;;;;;;;;;;2127:185:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2127:185:1;-1:-1:-1;;;;;2127:185:1;;;;;4033:123:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4033:123:7;;;;;2571:188:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2571:188:1;-1:-1:-1;;;;;2571:188:1;;;;;725:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;725:37:1;-1:-1:-1;;;;;725:37:1;;;;;2242:572:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2242:572:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2242:572:7;;-1:-1:-1;2242:572:7;;-1:-1:-1;;;;;;;2242:572:7;3159:338;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3159:338:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3159:338:7;-1:-1:-1;;;;;3159:338:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3159:338:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1589:291:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1589:291:1;-1:-1:-1;;;;;1589:291:1;;;;;3729:135:7;3791:12;3816:44;:3;3836:8;3854:4;3816:44;:19;:44;:::i;:::-;3809:51;3729:135;-1:-1:-1;;3729:135:7:o;4587:273::-;1261:10:1;4698:12:7;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;4728:60:7;:3;4746:8;4764:4;4771:2;4775:6;4783:4;4728:60;:17;:60;:::i;:::-;4716:125;;;;;;;-1:-1:-1;;;;;4716:125:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4852:4:7;4587:273;;;;;;:::o;2127:185:1:-;1261:10;2201:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;2221:21:1;;:5;:21;;;;;;;;;;;:28;;-1:-1:-1;;2221:28:1;2245:4;2221:28;;;2260:30;;;2221:5;2260:30;-1:-1:-1;2303:4:1;2127:185;;;:::o;4033:123:7:-;4090:9;4112:40;:3;4138:4;4145:6;4112:40;:17;:40;:::i;2571:188:1:-;1261:10;2646:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;2666:21:1;;2690:5;2666:21;;;;;;;;;;;:29;;-1:-1:-1;;2666:29:1;;;2706:31;;;2690:5;2706:31;-1:-1:-1;2750:4:1;2571:188;;;:::o;725:37::-;;;;;;;;;;;;;;;;:::o;2242:572:7:-;1261:10:1;2357:12:7;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;2383:21:7;:3;2397:6;2383:21;:13;:21;:::i;:::-;2375:81;;;;;;;-1:-1:-1;;;;;2375:81:7;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2375:81:7;;;;;;;;;;;;;;;;;;;;2468:21;:3;2482:6;2468:21;:13;:21;:::i;:::-;2460:80;;;;;;;-1:-1:-1;;;;;2460:80:7;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2460:80:7;;;;;;;;;;;;;;;;;;;;2552:21;:3;2566:6;2552:21;:13;:21;:::i;:::-;2544:80;;;;;;;-1:-1:-1;;;;;2544:80:7;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2544:80:7;;;;;;;;;;;;;;;;;;;;2636:23;:3;2651:7;2636:23;:14;:23;:::i;:::-;2628:79;;;;;;;-1:-1:-1;;;;;2628:79:7;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2628:79:7;;;;;;;;;;;;;;;;;;;;2719:21;:3;2733:6;2719:21;:13;:21;:::i;:::-;2711:84;;;;;;;-1:-1:-1;;;;;2711:84:7;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2711:84:7;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2806:4:7;2242:572;;;;;;;:::o;3159:338::-;3204:8;;;;3245:12;3204:8;3299:28;:3;3321:4;3299:28;:13;:28;:::i;:::-;3334;:3;3356:4;3334:28;:13;:28;:::i;:::-;3369;:3;3391:4;3369:28;:13;:28;:::i;:::-;3404:29;:3;3427:4;3404:29;:14;:29;:::i;:::-;3440:28;:3;3462:4;3440:28;:13;:28;:::i;:::-;3285:208;;;;-1:-1:-1;3285:208:7;;-1:-1:-1;3285:208:7;-1:-1:-1;3285:208:7;;-1:-1:-1;3483:4:7;;-1:-1:-1;3159:338:7;-1:-1:-1;3159:338:7:o;1589:291:1:-;1261:10;1660:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;1688:22:1;;;;1680:66;;;;;-1:-1:-1;;;;;1680:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1757:42;;-1:-1:-1;;;;;1757:42:1;;;1778:10;;1757:42;;;;;-1:-1:-1;;;;;;1805:15:1;:5;:15;;;;;;;;;;;:22;;1823:4;-1:-1:-1;;1805:22:1;;;;;;;;1839:10;1833:17;;;;;;:25;;;;;;;1823:4;1589:291::o;28791:266:8:-;28892:12;28912:10;28969:8;28979:34;28999:4;29005:7;28979:19;:34::i;:::-;28935:79;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;28935:79:8;;;;;;;-1:-1:-1;;;;;28935:79:8;-1:-1:-1;;;;;28935:79:8;-1:-1:-1;;;28935:79:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;28935:79:8;;;28925:90;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;28925:90:8;;;;;;;;;;;;29028:12;;-1:-1:-1;;;;;29028:24:8;;;;;;;;;;28925:90;;-1:-1:-1;;;;;;29028:12:8;;;;-1:-1:-1;29028:20:8;;-1:-1:-1;29028:24:8;;;;;263:2:-1;;-1:-1;29028:24:8;;;;;;;-1:-1:-1;29028:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;29028:24:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29028:24:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29028:24:8;;28791:266;-1:-1:-1;;;;;28791:266:8:o;38209:943::-;38337:12;;;-1:-1:-1;;;;;38372:18:8;;;;38357:86;;;;;-1:-1:-1;;;;;38357:86:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38509:8;38519:31;38539:4;38545;38519:19;:31::i;:::-;38475:76;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38475:76:8;;;;;;;-1:-1:-1;;;;;38475:76:8;-1:-1:-1;;;;;38475:76:8;-1:-1:-1;;;38475:76:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;38475:76:8;;;38465:87;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38465:87:8;;;;;;;;;;;;;;;;38450:102;;38617:8;38627:29;38647:4;38653:2;38627:19;:29::i;:::-;38583:74;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38583:74:8;;;;;;;-1:-1:-1;;;;;38583:74:8;-1:-1:-1;;;;;38583:74:8;-1:-1:-1;;;38583:74:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;38583:74:8;;;38573:85;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;38573:85:8;;;;;;;;;;;;38680:12;;-1:-1:-1;;;;;38707:26:8;;;;;;;;;;38573:85;;-1:-1:-1;;;;;;38680:12:8;;;;-1:-1:-1;38680:20:8;;-1:-1:-1;38707:26:8;;:38;;-1:-1:-1;38738:6:8;;38680:12;;38707:20;;:26;;;;;;;;;;-1:-1:-1;38680:12:8;38707:26;;;5:2:-1;;;;30:1;27;20:12;5:2;38707:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38707:26:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38707:26:8;;:38;:30;:38;:::i;:::-;38680:66;;;;;-1:-1:-1;;;38680:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38680:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38680:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38680:66:8;38665:202;;;;;;;-1:-1:-1;;;;;38665:202:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38888:12;;38915:26;;;-1:-1:-1;;;;;38915:26:8;;;;;;;;;;-1:-1:-1;;;;;38888:12:8;;;;:20;;38909:4;;38915:38;;38946:6;;38888:12;;38915:20;;:26;;;;;;;;;;;;;;38888:12;;38915:26;;;5:2:-1;;;;30:1;27;20:12;5:2;38915:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38915:26:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38915:26:8;;:38;:30;:38;:::i;:::-;38888:66;;;;;-1:-1:-1;;;38888:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38888:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38888:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38888:66:8;38873:202;;;;;;;-1:-1:-1;;;;;38873:202:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39112:2;-1:-1:-1;;;;;39087:42:8;39106:4;-1:-1:-1;;;;;39087:42:8;;39096:8;39116:6;39124:4;39087:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;39087:42:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39087:42:8;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;39087:42:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39143:4:8;;38209:943;-1:-1:-1;;;;;;;;38209:943:8:o;31068:722::-;31213:12;;31244:44;;;;;;;;;;;;-1:-1:-1;;;;;31244:44:8;;;-1:-1:-1;;;31244:44:8;;;;;;;26:21:-1;;;22:32;;6:49;;31244:44:8;;;;;;;;31234:55;;-1:-1:-1;;;;;;;;;;;;31213:12:8;;;:20;;31244:44;;;31234:55;;;;;31244:44;31234:55;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;31234:55:8;;;;;;;;;;;;31213:77;;;-1:-1:-1;;;31213:77:8;;;;;;;;;;;;;;-1:-1:-1;263:2;;-1:-1;31213:77:8;;;;;;;-1:-1:-1;31213:77:8;-1:-1:-1;31213:77:8;;;;5:2:-1;;;;30:1;27;20:12;5:2;31213:77:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31213:77:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31213:77:8;31310:12;;31341:44;;;;31213:77;31341:44;;;;;;;-1:-1:-1;;;;;31341:44:8;;;-1:-1:-1;;;31341:44:8;;;;;;;26:21:-1;;;22:32;;6:49;;31341:44:8;;;;;;;;31331:55;;31213:77;;-1:-1:-1;31310:12:8;;;;:20;;31341:44;;;;;31331:55;;;;;31341:44;31331:55;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;31331:55:8;;;;;;;;;;;;31310:77;;;-1:-1:-1;;;31310:77:8;;;;;;;;;;;;;;-1:-1:-1;263:2;;-1:-1;31310:77:8;;;;;;;-1:-1:-1;31310:77:8;-1:-1:-1;31310:77:8;;;;5:2:-1;;;;30:1;27;20:12;5:2;31310:77:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31310:77:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31310:77:8;31407:12;;31438:44;;;;31310:77;31438:44;;;;;;;-1:-1:-1;;;;;31438:44:8;;;-1:-1:-1;;;31438:44:8;;;;;;;26:21:-1;;;22:32;;6:49;;31438:44:8;;;;;;;;31428:55;;31310:77;;-1:-1:-1;31407:12:8;;;;:20;;31438:44;;;;;31428:55;;;;;31438:44;31428:55;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;31428:55:8;;;;;;;;;;;;31407:77;;;-1:-1:-1;;;31407:77:8;;;;;;;;;;;;;;-1:-1:-1;263:2;;-1:-1;31407:77:8;;;;;;;-1:-1:-1;31407:77:8;-1:-1:-1;31407:77:8;;;;5:2:-1;;;;30:1;27;20:12;5:2;31407:77:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31407:77:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31407:77:8;31505:12;;31536:45;;;;31407:77;31536:45;;;;;;;-1:-1:-1;;;;;31536:45:8;;;-1:-1:-1;;;31536:45:8;;;;;;;26:21:-1;;;22:32;;6:49;;31536:45:8;;;;;;;;31526:56;;31407:77;;-1:-1:-1;31505:12:8;;;;:20;;31536:45;;;;;31526:56;;;;;31536:45;31526:56;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;31526:56:8;;;;;;;;;;;;31505:78;;;-1:-1:-1;;;31505:78:8;;;;;;;;;;;;;;-1:-1:-1;263:2;;-1:-1;31505:78:8;;;;;;;-1:-1:-1;31505:78:8;-1:-1:-1;31505:78:8;;;;5:2:-1;;;;30:1;27;20:12;5:2;31505:78:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31505:78:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31505:78:8;;-1:-1:-1;31601:46:8;31505:78;31602:31;31627:5;31603:18;:6;31614;31603:18;:10;:18;:::i;:::-;31602:24;:31;:24;:31;:::i;:::-;31601:37;:46;:37;:46;:::i;:::-;31589:58;;31665:6;31658:4;:13;31654:132;;;31688:6;31681:13;;;;31654:132;31718:6;31711:4;:13;31707:79;;;31741:6;31734:13;;;;31707:79;31775:4;31768:11;;31707:79;31068:722;;;;;;;;;;:::o;6806:350::-;6918:42;;;;;;;;;;;;-1:-1:-1;;;6954:4:8;6918:42;;;;;;;22:32:-1;26:21;;;22:32;6:49;;6918:42:8;;;;;;;;6908:53;;6875:12;;;;6918:42;;;;;6908:53;;;;6918:42;6908:53;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;6908:53:8;;;;;;;;;;;;6982:12;;:32;;;;;;;;;;;;;;;;;6908:53;;-1:-1:-1;;;;;;6982:12:8;;;;-1:-1:-1;6982:20:8;;-1:-1:-1;6982:32:8;;;;;263:2:-1;;-1:-1;6982:32:8;;;;;;;-1:-1:-1;6982:12:8;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;6982:32:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6982:32:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6982:32:8;6967:167;;;;;;;-1:-1:-1;;;;;6967:167:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7147:4;7140:11;;6806:350;;;;;;:::o;7624:::-;7736:42;;;;;;;;;;;;-1:-1:-1;;;7772:4:8;7736:42;;;;;;;22:32:-1;26:21;;;22:32;6:49;;7736:42:8;;;;;;;;7726:53;;7693:12;;;;7736:42;;;;;7726:53;;;;7736:42;7726:53;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;8442:350:8;8554:42;;;;;;;;;;;;-1:-1:-1;;;8590:4:8;8554:42;;;;;;;22:32:-1;26:21;;;22:32;6:49;;8554:42:8;;;;;;;;8544:53;;8511:12;;;;8554:42;;;;;8544:53;;;;8554:42;8544:53;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;9255:354:8;9369:43;;;;;;;;;;;;-1:-1:-1;;;9406:4:8;9369:43;;;;;;;22:32:-1;26:21;;;22:32;6:49;;9369:43:8;;;;;;;;9359:54;;9326:12;;;;9369:43;;;;;9359:54;;;;9369:43;9359:54;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;10106:352:8;10219:42;;;;;;;;;;;;-1:-1:-1;;;10255:4:8;10219:42;;;;;;;22:32:-1;26:21;;;22:32;6:49;;10219:42:8;;;;;;;;10209:53;;10176:12;;;;10219:42;;;;;10209:53;;;;10219:42;10209:53;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;10209:53:8;;;;;;;;;;;;10283:12;;:33;;;;;;;;;;;;;;;;;;;;;;;10209:53;;-1:-1:-1;;;;;;10283:12:8;;;;-1:-1:-1;10283:21:8;;-1:-1:-1;10209:53:8;;10283:33;;-1:-1:-1;10283:33:8;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;10283:33:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;22196:215:8;22282:11;22301:10;22352:15;22324:44;;;;;;;;;;;;;-1:-1:-1;;;;;22324:44:8;-1:-1:-1;;;;;22324:44:8;-1:-1:-1;;;22324:44:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;22324:44:8;;;22314:55;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;22314:55:8;;;;;;;;;;;;22382:12;;-1:-1:-1;;;;;22382:24:8;;;;;;;;;;22314:55;;-1:-1:-1;;;;;;22382:12:8;;;;-1:-1:-1;22382:20:8;;-1:-1:-1;22382:24:8;;;;;263:2:-1;;-1:-1;22382:24:8;;;;;;;-1:-1:-1;22382:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;22382:24:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22382:24:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22382:24:8;;22196:215;-1:-1:-1;;;;22196:215:8:o;22791:::-;22877:11;22896:10;22947:15;22919:44;;;;;;;;;;;;;-1:-1:-1;;;;;22919:44:8;-1:-1:-1;;;;;22919:44:8;-1:-1:-1;;;22919:44:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;22919:44:8;;;22909:55;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;23386:215:8;23472:11;23491:10;23542:15;23514:44;;;;;;;;;;;;;-1:-1:-1;;;;;23514:44:8;-1:-1:-1;;;;;23514:44:8;-1:-1:-1;;;23514:44:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;23514:44:8;;;23504:55;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;23976:218:8;24063:12;24083:10;24135:15;24106:45;;;;;;;;;;;;;-1:-1:-1;;;;;24106:45:8;-1:-1:-1;;;;;24106:45:8;-1:-1:-1;;;24106:45:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;24106:45:8;;;24096:56;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;24582:217:8;24668:12;24688:10;24739:15;24711:44;;;;;;;;;;;;;-1:-1:-1;;;;;24711:44:8;-1:-1:-1;;;;;24711:44:8;-1:-1:-1;;;24711:44:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;24711:44:8;;;24701:55;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;24701:55:8;;;;;;;;;;;;24769:12;;:25;;;;;;;;;;;24701:55;;-1:-1:-1;;;;;;24769:12:8;;;;-1:-1:-1;24769:21:8;;-1:-1:-1;24769:25:8;;;;;-1:-1:-1;;;24769:25:8;;;;;;-1:-1:-1;24769:12:8;:25;;;5:2:-1;;;;30:1;27;20:12;5:2;24769:25:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24769:25:8;;;;;;39:16:-1;36:1;17:17;2:54;101:4;24769:25:8;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;24769:25:8;;;;;;20:11:-1;15:3;12:20;9:2;;;45:1;42;35:12;9:2;64:21;;126:4;117:14;;142:31;;;139:2;;;186:1;183;176:12;139:2;218:10;;268:11;251:29;;293:43;;;290:58;-1:-1;239:118;236:2;;;370:1;367;360:12;236:2;-1:-1;24769:25:8;;24582:217;-1:-1:-1;;;;;;;;24582:217:8:o;16402:357::-;16490:25;16523:10;16596:23;16581:7;16546:43;;;;;;;;;;;;;-1:-1:-1;;;;;16546:43:8;-1:-1:-1;;;;;16546:43:8;-1:-1:-1;;;16546:43:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16546:43:8;;;16536:54;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;16536:54:8;;;;;;;;;;;;16622:12;;:27;;;;;;;;;;;16536:54;;-1:-1:-1;;;;;;16622:12:8;;;;-1:-1:-1;16622:23:8;;-1:-1:-1;16622:27:8;;;;;263:2:-1;;-1:-1;16622:27:8;;;;;;;-1:-1:-1;16622:12:8;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;16622:27:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16622:27:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16622:27:8;;-1:-1:-1;;;;;;16659:22:8;;;16655:100;;16698:15;16691:22;;;;16655:100;16741:7;16734:14;;16655:100;16402:357;;;;;;:::o;1143:234:2:-;1201:14;1307:6;;;;1299:55;;;;;-1:-1:-1;;;;;1299:55:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1367:5:2;;;1143:234::o;1540:174::-;1598:14;1632:5;;;1651:6;;;;1643:52;;;;;-1:-1:-1;;;;;1643:52:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1708:1;1540:174;-1:-1:-1;;;1540:174:2:o;301:224::-;359:14;;385:6;;381:35;;;408:1;401:8;;;;381:35;-1:-1:-1;433:5:2;;;437:1;433;:5;452;;;;;;;;:10;444:62;;;;;-1:-1:-1;;;;;444:62:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;697:284;755:14;857:9;873:1;869;:5;;;;;;;;;697:284;-1:-1:-1;;;;697:284:2:o", + "source": "pragma solidity 0.4.24;\n\nimport \"./Ownable.sol\";\nimport \"./TokenIOStorage.sol\";\nimport \"./TokenIOLib.sol\";\n\n\n/*\nCOPYRIGHT 2018 Token, Inc.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n@title Standard Fee Contract for Token, Inc. Smart Money System\n\n@author Ryan Tate , Sean Pollock \n\n@notice Contract uses generalized storage contract, `TokenIOStorage`, for\nupgradeability of interface contract.\n\n@dev In the event that the main contract becomes deprecated, the upgraded contract\nwill be set as the owner of this contract, and use this contract's storage to\nmaintain data consistency between contract.\n\n*/\n\n\ncontract TokenIOFeeContract is Ownable {\n\n\t/// @dev Set reference to TokenIOLib interface which proxies to TokenIOStorage\n\tusing TokenIOLib for TokenIOLib.Data;\n\tTokenIOLib.Data lib;\n\n\n\t/**\n\t* @notice Constructor method for ERC20 contract\n\t* @param _storageContract address of TokenIOStorage contract\n\t*/\n\tconstructor(address _storageContract) public {\n\t\t\t/// @dev Set the storage contract for the interface\n\t\t\t/// @dev NOTE: This contract will be unable to use the storage constract until\n\t\t\t/// @dev contract address is authorized with the storage contract\n\t\t\t/// @dev Once authorized, Use the `setParams` method to set storage values\n\t\t\tlib.Storage = TokenIOStorage(_storageContract);\n\n\t\t\t/// @dev set owner to contract initiator\n\t\t\towner[msg.sender] = true;\n\t}\n\n\t/**\n\t * @notice Set Fee Parameters for Fee Contract\n\t * @dev The min, max, flat transaction fees should be relative to decimal precision\n\t * @param feeBps Basis points transaction fee\n\t * @param feeMin Minimum transaction fees\n\t * @param feeMax Maximum transaction fee\n\t * @param feeFlat Flat transaction fee\n\t * returns {\"success\" : \"Returns true if successfully called from another contract\"}\n\t */\n\tfunction setFeeParams(uint feeBps, uint feeMin, uint feeMax, uint feeFlat, bytes feeMsg) public onlyOwner returns (bool success) {\n\t\trequire(lib.setFeeBPS(feeBps), \"Error: Unable to set fee contract basis points.\");\n\t\trequire(lib.setFeeMin(feeMin), \"Error: Unable to set fee contract minimum fee.\");\n\t\trequire(lib.setFeeMax(feeMax), \"Error: Unable to set fee contract maximum fee.\");\n\t\trequire(lib.setFeeFlat(feeFlat), \"Error: Unable to set fee contract flat fee.\");\n\t\trequire(lib.setFeeMsg(feeMsg), \"Error: Unable to set fee contract default message.\");\n\t\treturn true;\n\t}\n\n\t/**\n\t \t* @notice Gets fee parameters\n\t\t* @return {\n\t\t\"bps\":\"Returns the basis points fee of the TokenIOFeeContract\",\n\t\t\"min\":\"Returns the min fee of the TokenIOFeeContract\",\n\t\t\"max\":\"Returns the max fee of the TokenIOFeeContract\",\n\t\t\"flat\":\"Returns the flat fee of the TokenIOFeeContract\",\n\t\t\"feeContract\": \"Address of this contract\"\n\t}\n\t*/\n\tfunction getFeeParams() public view returns (uint bps, uint min, uint max, uint flat, bytes feeMsg, address feeContract) {\n\t\t\treturn (\n\t\t\t\t\tlib.getFeeBPS(address(this)),\n\t\t\t\t\tlib.getFeeMin(address(this)),\n\t\t\t\t\tlib.getFeeMax(address(this)),\n\t\t\t\t\tlib.getFeeFlat(address(this)),\n\t\t\t\t\tlib.getFeeMsg(address(this)),\n\t\t\t\t\taddress(this)\n\t\t\t);\n\t}\n\n\t/**\n\t * @notice Returns balance of this contract associated with currency symbol.\n\t * @param currency Currency symbol of the token (e.g. USDx, JYPx, GBPx)\n\t * @return {\"balance\": \"Balance of TokenIO TSM currency account\"}\n\t */\n\tfunction getTokenBalance(string currency) public view returns(uint balance) {\n\t\treturn lib.getTokenBalance(currency, address(this));\n\t}\n\n\t/** @notice Calculates fee of a given transfer amount\n\t * @param amount transfer amount\n\t * @return { \"fees\": \"Returns the fees associated with this contract\"}\n\t */\n\tfunction calculateFees(uint amount) public view returns (uint fees) {\n\t\treturn lib.calculateFees(address(this), amount);\n\t}\n\n\n\t/**\n\t * @notice Transfer collected fees to another account; onlyOwner\n\t * @param currency Currency symbol of the token (e.g. USDx, JYPx, GBPx)\n\t * @param to \t\t\tEthereum address of account to send token amount to\n\t * @param amount\t Amount of tokens to transfer\n\t * @param data\t\t Arbitrary bytes data message to include in transfer\n\t * @return {\"success\": \"Returns ture if successfully called from another contract\"}\n\t */\n\tfunction transferCollectedFees(string currency, address to, uint amount, bytes data) public onlyOwner returns (bool success) {\n\t\trequire(\n\t\t\tlib.forceTransfer(currency, address(this), to, amount, data),\n\t\t\t\"Error: unable to transfer fees to account.\"\n\t\t);\n\t\treturn true;\n\t}\n\n\n}\n", + "sourcePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOFeeContract.sol", + "ast": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOFeeContract.sol", + "exportedSymbols": { + "TokenIOFeeContract": [ + 1636 + ] + }, + "id": 1637, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1429, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:7" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 1430, + "nodeType": "ImportDirective", + "scope": 1637, + "sourceUnit": 185, + "src": "25:23:7", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 1431, + "nodeType": "ImportDirective", + "scope": 1637, + "sourceUnit": 5242, + "src": "49:30:7", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 1432, + "nodeType": "ImportDirective", + "scope": 1637, + "sourceUnit": 4623, + "src": "80:26:7", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 1433, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "1101:7:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 1434, + "nodeType": "InheritanceSpecifier", + "src": "1101:7:7" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 1636, + "linearizedBaseContracts": [ + 1636, + 184 + ], + "name": "TokenIOFeeContract", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 1437, + "libraryName": { + "contractScope": null, + "id": 1435, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4622, + "src": "1199:10:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4622", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "1193:37:7", + "typeName": { + "contractScope": null, + "id": 1436, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1214:15:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 1439, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 1636, + "src": "1232:19:7", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 1438, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1232:15:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 1459, + "nodeType": "Block", + "src": "1425:413:7", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 1450, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1444, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "1714:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1446, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1645, + "src": "1714:11:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1448, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1441, + "src": "1743:16:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1447, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5241, + "src": "1728:14:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5241_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 1449, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1728:32:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1714:46:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "id": 1451, + "nodeType": "ExpressionStatement", + "src": "1714:46:7" + }, + { + "expression": { + "argumentTypes": null, + "id": 1457, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1452, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1810:5:7", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 1455, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1453, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "1816:3:7", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1454, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1816:10:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1810:17:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1456, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1830:4:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1810:24:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 1458, + "nodeType": "ExpressionStatement", + "src": "1810:24:7" + } + ] + }, + "documentation": "@notice Constructor method for ERC20 contract\n@param _storageContract address of TokenIOStorage contract", + "id": 1460, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1442, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1441, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 1460, + "src": "1392:24:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1440, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1392:7:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1391:26:7" + }, + "payable": false, + "returnParameters": { + "id": 1443, + "nodeType": "ParameterList", + "parameters": [], + "src": "1425:0:7" + }, + "scope": 1636, + "src": "1380:458:7", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1519, + "nodeType": "Block", + "src": "2371:443:7", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1480, + "name": "feeBps", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1462, + "src": "2397:6:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1478, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "2383:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1479, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeBPS", + "nodeType": "MemberAccess", + "referencedDeclaration": 1932, + "src": "2383:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,uint256) returns (bool)" + } + }, + "id": 1481, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2383:21:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e747261637420626173697320706f696e74732e", + "id": 1482, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2406:49:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_fabd5d1fd4f46cccda6663dddcde851f014c68fb6b477db4d11f0ae282983893", + "typeString": "literal_string \"Error: Unable to set fee contract basis points.\"" + }, + "value": "Error: Unable to set fee contract basis points." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_fabd5d1fd4f46cccda6663dddcde851f014c68fb6b477db4d11f0ae282983893", + "typeString": "literal_string \"Error: Unable to set fee contract basis points.\"" + } + ], + "id": 1477, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2375:7:7", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1483, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2375:81:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1484, + "nodeType": "ExpressionStatement", + "src": "2375:81:7" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1488, + "name": "feeMin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1464, + "src": "2482:6:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1486, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "2468:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1487, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeMin", + "nodeType": "MemberAccess", + "referencedDeclaration": 1966, + "src": "2468:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,uint256) returns (bool)" + } + }, + "id": 1489, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2468:21:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e7472616374206d696e696d756d206665652e", + "id": 1490, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2491:48:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_9d061faaf87dcb8cd3753e1f1579fa198544ef425a6a0fa7431375fb437439d3", + "typeString": "literal_string \"Error: Unable to set fee contract minimum fee.\"" + }, + "value": "Error: Unable to set fee contract minimum fee." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_9d061faaf87dcb8cd3753e1f1579fa198544ef425a6a0fa7431375fb437439d3", + "typeString": "literal_string \"Error: Unable to set fee contract minimum fee.\"" + } + ], + "id": 1485, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2460:7:7", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1491, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2460:80:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1492, + "nodeType": "ExpressionStatement", + "src": "2460:80:7" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1496, + "name": "feeMax", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1466, + "src": "2566:6:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1494, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "2552:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1495, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeMax", + "nodeType": "MemberAccess", + "referencedDeclaration": 2000, + "src": "2552:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,uint256) returns (bool)" + } + }, + "id": 1497, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2552:21:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e7472616374206d6178696d756d206665652e", + "id": 1498, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2575:48:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_169ffce6c52c466e162efa9907d18f3ba172d8306517a48ca6d1e404adce90b4", + "typeString": "literal_string \"Error: Unable to set fee contract maximum fee.\"" + }, + "value": "Error: Unable to set fee contract maximum fee." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_169ffce6c52c466e162efa9907d18f3ba172d8306517a48ca6d1e404adce90b4", + "typeString": "literal_string \"Error: Unable to set fee contract maximum fee.\"" + } + ], + "id": 1493, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2544:7:7", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1499, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2544:80:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1500, + "nodeType": "ExpressionStatement", + "src": "2544:80:7" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1504, + "name": "feeFlat", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1468, + "src": "2651:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1502, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "2636:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1503, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeFlat", + "nodeType": "MemberAccess", + "referencedDeclaration": 2034, + "src": "2636:14:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,uint256) returns (bool)" + } + }, + "id": 1505, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2636:23:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e747261637420666c6174206665652e", + "id": 1506, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2661:45:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_ee0d3dfb62386e6a3c97e5024bd5d251b38044fd1dc8082b8b6b030fd34e14cf", + "typeString": "literal_string \"Error: Unable to set fee contract flat fee.\"" + }, + "value": "Error: Unable to set fee contract flat fee." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_ee0d3dfb62386e6a3c97e5024bd5d251b38044fd1dc8082b8b6b030fd34e14cf", + "typeString": "literal_string \"Error: Unable to set fee contract flat fee.\"" + } + ], + "id": 1501, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2628:7:7", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1507, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2628:79:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1508, + "nodeType": "ExpressionStatement", + "src": "2628:79:7" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1512, + "name": "feeMsg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1470, + "src": "2733:6:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 1510, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "2719:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1511, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeMsg", + "nodeType": "MemberAccess", + "referencedDeclaration": 2068, + "src": "2719:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,bytes memory) returns (bool)" + } + }, + "id": 1513, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2719:21:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e74726163742064656661756c74206d6573736167652e", + "id": 1514, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2742:52:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_4dd72252a38b4e1a2efba252c9ae574b50710ebb7f2ad4764fe84352ca2d020f", + "typeString": "literal_string \"Error: Unable to set fee contract default message.\"" + }, + "value": "Error: Unable to set fee contract default message." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_4dd72252a38b4e1a2efba252c9ae574b50710ebb7f2ad4764fe84352ca2d020f", + "typeString": "literal_string \"Error: Unable to set fee contract default message.\"" + } + ], + "id": 1509, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2711:7:7", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1515, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2711:84:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1516, + "nodeType": "ExpressionStatement", + "src": "2711:84:7" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1517, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2806:4:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1476, + "id": 1518, + "nodeType": "Return", + "src": "2799:11:7" + } + ] + }, + "documentation": "@notice Set Fee Parameters for Fee Contract\n@dev The min, max, flat transaction fees should be relative to decimal precision\n@param feeBps Basis points transaction fee\n@param feeMin Minimum transaction fees\n@param feeMax Maximum transaction fee\n@param feeFlat Flat transaction fee\nreturns {\"success\" : \"Returns true if successfully called from another contract\"}", + "id": 1520, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 1473, + "modifierName": { + "argumentTypes": null, + "id": 1472, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "2338:9:7", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2338:9:7" + } + ], + "name": "setFeeParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1471, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1462, + "name": "feeBps", + "nodeType": "VariableDeclaration", + "scope": 1520, + "src": "2264:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1461, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2264:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1464, + "name": "feeMin", + "nodeType": "VariableDeclaration", + "scope": 1520, + "src": "2277:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1463, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2277:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1466, + "name": "feeMax", + "nodeType": "VariableDeclaration", + "scope": 1520, + "src": "2290:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1465, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2290:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1468, + "name": "feeFlat", + "nodeType": "VariableDeclaration", + "scope": 1520, + "src": "2303:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1467, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2303:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1470, + "name": "feeMsg", + "nodeType": "VariableDeclaration", + "scope": 1520, + "src": "2317:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1469, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2317:5:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2263:67:7" + }, + "payable": false, + "returnParameters": { + "id": 1476, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1475, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1520, + "src": "2357:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1474, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2357:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2356:14:7" + }, + "scope": 1636, + "src": "2242:572:7", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1570, + "nodeType": "Block", + "src": "3280:217:7", + "statements": [ + { + "expression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1538, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5287, + "src": "3321:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1537, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3313:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1539, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3313:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1535, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "3299:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1536, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeBPS", + "nodeType": "MemberAccess", + "referencedDeclaration": 2538, + "src": "3299:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1540, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3299:28:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1544, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5287, + "src": "3356:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1543, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3348:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1545, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3348:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1541, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "3334:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1542, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMin", + "nodeType": "MemberAccess", + "referencedDeclaration": 2564, + "src": "3334:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1546, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3334:28:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1550, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5287, + "src": "3391:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1549, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3383:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1551, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3383:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1547, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "3369:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1548, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMax", + "nodeType": "MemberAccess", + "referencedDeclaration": 2590, + "src": "3369:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1552, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3369:28:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1556, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5287, + "src": "3427:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1555, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3419:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1557, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3419:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1553, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "3404:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1554, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeFlat", + "nodeType": "MemberAccess", + "referencedDeclaration": 2616, + "src": "3404:14:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1558, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3404:29:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1562, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5287, + "src": "3462:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1561, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3454:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1563, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3454:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1559, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "3440:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1560, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMsg", + "nodeType": "MemberAccess", + "referencedDeclaration": 2642, + "src": "3440:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bytes memory)" + } + }, + "id": 1564, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3440:28:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1566, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5287, + "src": "3483:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1565, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3475:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1567, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3475:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 1568, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3292:201:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_address_$", + "typeString": "tuple(uint256,uint256,uint256,uint256,bytes memory,address)" + } + }, + "functionReturnParameters": 1534, + "id": 1569, + "nodeType": "Return", + "src": "3285:208:7" + } + ] + }, + "documentation": "@notice Gets fee parameters\n@return {\n\"bps\":\"Returns the basis points fee of the TokenIOFeeContract\",\n\"min\":\"Returns the min fee of the TokenIOFeeContract\",\n\"max\":\"Returns the max fee of the TokenIOFeeContract\",\n\"flat\":\"Returns the flat fee of the TokenIOFeeContract\",\n\"feeContract\": \"Address of this contract\"\n}", + "id": 1571, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getFeeParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1521, + "nodeType": "ParameterList", + "parameters": [], + "src": "3180:2:7" + }, + "payable": false, + "returnParameters": { + "id": 1534, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1523, + "name": "bps", + "nodeType": "VariableDeclaration", + "scope": 1571, + "src": "3204:8:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1522, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3204:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1525, + "name": "min", + "nodeType": "VariableDeclaration", + "scope": 1571, + "src": "3214:8:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1524, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3214:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1527, + "name": "max", + "nodeType": "VariableDeclaration", + "scope": 1571, + "src": "3224:8:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1526, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3224:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1529, + "name": "flat", + "nodeType": "VariableDeclaration", + "scope": 1571, + "src": "3234:9:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1528, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3234:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1531, + "name": "feeMsg", + "nodeType": "VariableDeclaration", + "scope": 1571, + "src": "3245:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1530, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3245:5:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1533, + "name": "feeContract", + "nodeType": "VariableDeclaration", + "scope": 1571, + "src": "3259:19:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1532, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3259:7:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3203:76:7" + }, + "scope": 1636, + "src": "3159:338:7", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1586, + "nodeType": "Block", + "src": "3805:59:7", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1580, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1573, + "src": "3836:8:7", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1582, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5287, + "src": "3854:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1581, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3846:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1583, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3846:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1578, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "3816:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1579, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenBalance", + "nodeType": "MemberAccess", + "referencedDeclaration": 2832, + "src": "3816:19:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address) view returns (uint256)" + } + }, + "id": 1584, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3816:44:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1577, + "id": 1585, + "nodeType": "Return", + "src": "3809:51:7" + } + ] + }, + "documentation": "@notice Returns balance of this contract associated with currency symbol.\n@param currency Currency symbol of the token (e.g. USDx, JYPx, GBPx)\n@return {\"balance\": \"Balance of TokenIO TSM currency account\"}", + "id": 1587, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getTokenBalance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1574, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1573, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 1587, + "src": "3754:15:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1572, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3754:6:7", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3753:17:7" + }, + "payable": false, + "returnParameters": { + "id": 1577, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1576, + "name": "balance", + "nodeType": "VariableDeclaration", + "scope": 1587, + "src": "3791:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1575, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3791:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3790:14:7" + }, + "scope": 1636, + "src": "3729:135:7", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1602, + "nodeType": "Block", + "src": "4101:55:7", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1597, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5287, + "src": "4138:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1596, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4130:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1598, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4130:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1599, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1589, + "src": "4145:6:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1594, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "4112:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1595, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "calculateFees", + "nodeType": "MemberAccess", + "referencedDeclaration": 3004, + "src": "4112:17:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) view returns (uint256)" + } + }, + "id": 1600, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4112:40:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1593, + "id": 1601, + "nodeType": "Return", + "src": "4105:47:7" + } + ] + }, + "documentation": "@notice Calculates fee of a given transfer amount\n@param amount transfer amount\n@return { \"fees\": \"Returns the fees associated with this contract\"}", + "id": 1603, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "calculateFees", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1590, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1589, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1603, + "src": "4056:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1588, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "4056:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4055:13:7" + }, + "payable": false, + "returnParameters": { + "id": 1593, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1592, + "name": "fees", + "nodeType": "VariableDeclaration", + "scope": 1603, + "src": "4090:9:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1591, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "4090:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4089:11:7" + }, + "scope": 1636, + "src": "4033:123:7", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1634, + "nodeType": "Block", + "src": "4712:148:7", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1621, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1605, + "src": "4746:8:7", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1623, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5287, + "src": "4764:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1622, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4756:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1624, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4756:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1625, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1607, + "src": "4771:2:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1626, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1609, + "src": "4775:6:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1627, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1611, + "src": "4783:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 1619, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "4728:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1620, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "forceTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 3351, + "src": "4728:17:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,address,uint256,bytes memory) returns (bool)" + } + }, + "id": 1628, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4728:60:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20756e61626c6520746f207472616e73666572206665657320746f206163636f756e742e", + "id": 1629, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4793:44:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_1a0e1b57a2efd16cddba9f3dc60eebac17ba4db509e733796cdcf13851421b2c", + "typeString": "literal_string \"Error: unable to transfer fees to account.\"" + }, + "value": "Error: unable to transfer fees to account." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_1a0e1b57a2efd16cddba9f3dc60eebac17ba4db509e733796cdcf13851421b2c", + "typeString": "literal_string \"Error: unable to transfer fees to account.\"" + } + ], + "id": 1618, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "4716:7:7", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1630, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4716:125:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1631, + "nodeType": "ExpressionStatement", + "src": "4716:125:7" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1632, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4852:4:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1617, + "id": 1633, + "nodeType": "Return", + "src": "4845:11:7" + } + ] + }, + "documentation": "@notice Transfer collected fees to another account; onlyOwner\n@param currency Currency symbol of the token (e.g. USDx, JYPx, GBPx)\n@param to \t\t\tEthereum address of account to send token amount to\n@param amount\t Amount of tokens to transfer\n@param data\t\t Arbitrary bytes data message to include in transfer\n@return {\"success\": \"Returns ture if successfully called from another contract\"}", + "id": 1635, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 1614, + "modifierName": { + "argumentTypes": null, + "id": 1613, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "4679:9:7", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "4679:9:7" + } + ], + "name": "transferCollectedFees", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1612, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1605, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 1635, + "src": "4618:15:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1604, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "4618:6:7", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1607, + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 1635, + "src": "4635:10:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1606, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4635:7:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1609, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1635, + "src": "4647:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1608, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "4647:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1611, + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 1635, + "src": "4660:10:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1610, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4660:5:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4617:54:7" + }, + "payable": false, + "returnParameters": { + "id": 1617, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1616, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1635, + "src": "4698:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1615, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4698:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4697:14:7" + }, + "scope": 1636, + "src": "4587:273:7", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 1637, + "src": "1070:3794:7" + } + ], + "src": "0:4865:7" + }, + "legacyAST": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOFeeContract.sol", + "exportedSymbols": { + "TokenIOFeeContract": [ + 1636 + ] + }, + "id": 1637, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1429, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:7" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 1430, + "nodeType": "ImportDirective", + "scope": 1637, + "sourceUnit": 185, + "src": "25:23:7", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 1431, + "nodeType": "ImportDirective", + "scope": 1637, + "sourceUnit": 5242, + "src": "49:30:7", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 1432, + "nodeType": "ImportDirective", + "scope": 1637, + "sourceUnit": 4623, + "src": "80:26:7", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 1433, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "1101:7:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 1434, + "nodeType": "InheritanceSpecifier", + "src": "1101:7:7" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 1636, + "linearizedBaseContracts": [ + 1636, + 184 + ], + "name": "TokenIOFeeContract", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 1437, + "libraryName": { + "contractScope": null, + "id": 1435, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4622, + "src": "1199:10:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4622", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "1193:37:7", + "typeName": { + "contractScope": null, + "id": 1436, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1214:15:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 1439, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 1636, + "src": "1232:19:7", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 1438, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1232:15:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 1459, + "nodeType": "Block", + "src": "1425:413:7", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 1450, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1444, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "1714:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1446, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1645, + "src": "1714:11:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1448, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1441, + "src": "1743:16:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1447, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5241, + "src": "1728:14:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5241_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 1449, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1728:32:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1714:46:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "id": 1451, + "nodeType": "ExpressionStatement", + "src": "1714:46:7" + }, + { + "expression": { + "argumentTypes": null, + "id": 1457, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1452, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1810:5:7", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 1455, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1453, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "1816:3:7", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1454, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1816:10:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1810:17:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1456, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1830:4:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1810:24:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 1458, + "nodeType": "ExpressionStatement", + "src": "1810:24:7" + } + ] + }, + "documentation": "@notice Constructor method for ERC20 contract\n@param _storageContract address of TokenIOStorage contract", + "id": 1460, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1442, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1441, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 1460, + "src": "1392:24:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1440, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1392:7:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1391:26:7" + }, + "payable": false, + "returnParameters": { + "id": 1443, + "nodeType": "ParameterList", + "parameters": [], + "src": "1425:0:7" + }, + "scope": 1636, + "src": "1380:458:7", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1519, + "nodeType": "Block", + "src": "2371:443:7", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1480, + "name": "feeBps", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1462, + "src": "2397:6:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1478, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "2383:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1479, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeBPS", + "nodeType": "MemberAccess", + "referencedDeclaration": 1932, + "src": "2383:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,uint256) returns (bool)" + } + }, + "id": 1481, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2383:21:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e747261637420626173697320706f696e74732e", + "id": 1482, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2406:49:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_fabd5d1fd4f46cccda6663dddcde851f014c68fb6b477db4d11f0ae282983893", + "typeString": "literal_string \"Error: Unable to set fee contract basis points.\"" + }, + "value": "Error: Unable to set fee contract basis points." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_fabd5d1fd4f46cccda6663dddcde851f014c68fb6b477db4d11f0ae282983893", + "typeString": "literal_string \"Error: Unable to set fee contract basis points.\"" + } + ], + "id": 1477, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2375:7:7", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1483, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2375:81:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1484, + "nodeType": "ExpressionStatement", + "src": "2375:81:7" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1488, + "name": "feeMin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1464, + "src": "2482:6:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1486, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "2468:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1487, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeMin", + "nodeType": "MemberAccess", + "referencedDeclaration": 1966, + "src": "2468:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,uint256) returns (bool)" + } + }, + "id": 1489, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2468:21:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e7472616374206d696e696d756d206665652e", + "id": 1490, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2491:48:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_9d061faaf87dcb8cd3753e1f1579fa198544ef425a6a0fa7431375fb437439d3", + "typeString": "literal_string \"Error: Unable to set fee contract minimum fee.\"" + }, + "value": "Error: Unable to set fee contract minimum fee." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_9d061faaf87dcb8cd3753e1f1579fa198544ef425a6a0fa7431375fb437439d3", + "typeString": "literal_string \"Error: Unable to set fee contract minimum fee.\"" + } + ], + "id": 1485, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2460:7:7", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1491, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2460:80:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1492, + "nodeType": "ExpressionStatement", + "src": "2460:80:7" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1496, + "name": "feeMax", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1466, + "src": "2566:6:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1494, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "2552:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1495, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeMax", + "nodeType": "MemberAccess", + "referencedDeclaration": 2000, + "src": "2552:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,uint256) returns (bool)" + } + }, + "id": 1497, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2552:21:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e7472616374206d6178696d756d206665652e", + "id": 1498, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2575:48:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_169ffce6c52c466e162efa9907d18f3ba172d8306517a48ca6d1e404adce90b4", + "typeString": "literal_string \"Error: Unable to set fee contract maximum fee.\"" + }, + "value": "Error: Unable to set fee contract maximum fee." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_169ffce6c52c466e162efa9907d18f3ba172d8306517a48ca6d1e404adce90b4", + "typeString": "literal_string \"Error: Unable to set fee contract maximum fee.\"" + } + ], + "id": 1493, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2544:7:7", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1499, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2544:80:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1500, + "nodeType": "ExpressionStatement", + "src": "2544:80:7" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1504, + "name": "feeFlat", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1468, + "src": "2651:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1502, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "2636:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1503, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeFlat", + "nodeType": "MemberAccess", + "referencedDeclaration": 2034, + "src": "2636:14:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,uint256) returns (bool)" + } + }, + "id": 1505, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2636:23:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e747261637420666c6174206665652e", + "id": 1506, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2661:45:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_ee0d3dfb62386e6a3c97e5024bd5d251b38044fd1dc8082b8b6b030fd34e14cf", + "typeString": "literal_string \"Error: Unable to set fee contract flat fee.\"" + }, + "value": "Error: Unable to set fee contract flat fee." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_ee0d3dfb62386e6a3c97e5024bd5d251b38044fd1dc8082b8b6b030fd34e14cf", + "typeString": "literal_string \"Error: Unable to set fee contract flat fee.\"" + } + ], + "id": 1501, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2628:7:7", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1507, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2628:79:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1508, + "nodeType": "ExpressionStatement", + "src": "2628:79:7" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1512, + "name": "feeMsg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1470, + "src": "2733:6:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 1510, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "2719:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1511, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeMsg", + "nodeType": "MemberAccess", + "referencedDeclaration": 2068, + "src": "2719:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,bytes memory) returns (bool)" + } + }, + "id": 1513, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2719:21:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e74726163742064656661756c74206d6573736167652e", + "id": 1514, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2742:52:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_4dd72252a38b4e1a2efba252c9ae574b50710ebb7f2ad4764fe84352ca2d020f", + "typeString": "literal_string \"Error: Unable to set fee contract default message.\"" + }, + "value": "Error: Unable to set fee contract default message." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_4dd72252a38b4e1a2efba252c9ae574b50710ebb7f2ad4764fe84352ca2d020f", + "typeString": "literal_string \"Error: Unable to set fee contract default message.\"" + } + ], + "id": 1509, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2711:7:7", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1515, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2711:84:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1516, + "nodeType": "ExpressionStatement", + "src": "2711:84:7" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1517, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2806:4:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1476, + "id": 1518, + "nodeType": "Return", + "src": "2799:11:7" + } + ] + }, + "documentation": "@notice Set Fee Parameters for Fee Contract\n@dev The min, max, flat transaction fees should be relative to decimal precision\n@param feeBps Basis points transaction fee\n@param feeMin Minimum transaction fees\n@param feeMax Maximum transaction fee\n@param feeFlat Flat transaction fee\nreturns {\"success\" : \"Returns true if successfully called from another contract\"}", + "id": 1520, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 1473, + "modifierName": { + "argumentTypes": null, + "id": 1472, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "2338:9:7", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2338:9:7" + } + ], + "name": "setFeeParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1471, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1462, + "name": "feeBps", + "nodeType": "VariableDeclaration", + "scope": 1520, + "src": "2264:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1461, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2264:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1464, + "name": "feeMin", + "nodeType": "VariableDeclaration", + "scope": 1520, + "src": "2277:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1463, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2277:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1466, + "name": "feeMax", + "nodeType": "VariableDeclaration", + "scope": 1520, + "src": "2290:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1465, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2290:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1468, + "name": "feeFlat", + "nodeType": "VariableDeclaration", + "scope": 1520, + "src": "2303:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1467, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2303:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1470, + "name": "feeMsg", + "nodeType": "VariableDeclaration", + "scope": 1520, + "src": "2317:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1469, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2317:5:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2263:67:7" + }, + "payable": false, + "returnParameters": { + "id": 1476, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1475, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1520, + "src": "2357:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1474, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2357:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2356:14:7" + }, + "scope": 1636, + "src": "2242:572:7", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1570, + "nodeType": "Block", + "src": "3280:217:7", + "statements": [ + { + "expression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1538, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5287, + "src": "3321:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1537, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3313:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1539, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3313:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1535, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "3299:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1536, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeBPS", + "nodeType": "MemberAccess", + "referencedDeclaration": 2538, + "src": "3299:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1540, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3299:28:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1544, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5287, + "src": "3356:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1543, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3348:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1545, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3348:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1541, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "3334:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1542, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMin", + "nodeType": "MemberAccess", + "referencedDeclaration": 2564, + "src": "3334:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1546, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3334:28:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1550, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5287, + "src": "3391:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1549, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3383:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1551, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3383:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1547, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "3369:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1548, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMax", + "nodeType": "MemberAccess", + "referencedDeclaration": 2590, + "src": "3369:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1552, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3369:28:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1556, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5287, + "src": "3427:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1555, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3419:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1557, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3419:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1553, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "3404:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1554, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeFlat", + "nodeType": "MemberAccess", + "referencedDeclaration": 2616, + "src": "3404:14:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1558, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3404:29:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1562, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5287, + "src": "3462:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1561, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3454:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1563, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3454:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1559, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "3440:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1560, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMsg", + "nodeType": "MemberAccess", + "referencedDeclaration": 2642, + "src": "3440:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bytes memory)" + } + }, + "id": 1564, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3440:28:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1566, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5287, + "src": "3483:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1565, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3475:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1567, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3475:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 1568, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3292:201:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_address_$", + "typeString": "tuple(uint256,uint256,uint256,uint256,bytes memory,address)" + } + }, + "functionReturnParameters": 1534, + "id": 1569, + "nodeType": "Return", + "src": "3285:208:7" + } + ] + }, + "documentation": "@notice Gets fee parameters\n@return {\n\"bps\":\"Returns the basis points fee of the TokenIOFeeContract\",\n\"min\":\"Returns the min fee of the TokenIOFeeContract\",\n\"max\":\"Returns the max fee of the TokenIOFeeContract\",\n\"flat\":\"Returns the flat fee of the TokenIOFeeContract\",\n\"feeContract\": \"Address of this contract\"\n}", + "id": 1571, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getFeeParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1521, + "nodeType": "ParameterList", + "parameters": [], + "src": "3180:2:7" + }, + "payable": false, + "returnParameters": { + "id": 1534, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1523, + "name": "bps", + "nodeType": "VariableDeclaration", + "scope": 1571, + "src": "3204:8:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1522, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3204:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1525, + "name": "min", + "nodeType": "VariableDeclaration", + "scope": 1571, + "src": "3214:8:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1524, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3214:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1527, + "name": "max", + "nodeType": "VariableDeclaration", + "scope": 1571, + "src": "3224:8:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1526, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3224:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1529, + "name": "flat", + "nodeType": "VariableDeclaration", + "scope": 1571, + "src": "3234:9:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1528, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3234:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1531, + "name": "feeMsg", + "nodeType": "VariableDeclaration", + "scope": 1571, + "src": "3245:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1530, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3245:5:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1533, + "name": "feeContract", + "nodeType": "VariableDeclaration", + "scope": 1571, + "src": "3259:19:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1532, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3259:7:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3203:76:7" + }, + "scope": 1636, + "src": "3159:338:7", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1586, + "nodeType": "Block", + "src": "3805:59:7", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1580, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1573, + "src": "3836:8:7", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1582, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5287, + "src": "3854:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1581, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3846:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1583, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3846:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1578, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "3816:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1579, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenBalance", + "nodeType": "MemberAccess", + "referencedDeclaration": 2832, + "src": "3816:19:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address) view returns (uint256)" + } + }, + "id": 1584, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3816:44:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1577, + "id": 1585, + "nodeType": "Return", + "src": "3809:51:7" + } + ] + }, + "documentation": "@notice Returns balance of this contract associated with currency symbol.\n@param currency Currency symbol of the token (e.g. USDx, JYPx, GBPx)\n@return {\"balance\": \"Balance of TokenIO TSM currency account\"}", + "id": 1587, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getTokenBalance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1574, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1573, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 1587, + "src": "3754:15:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1572, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3754:6:7", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3753:17:7" + }, + "payable": false, + "returnParameters": { + "id": 1577, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1576, + "name": "balance", + "nodeType": "VariableDeclaration", + "scope": 1587, + "src": "3791:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1575, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3791:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3790:14:7" + }, + "scope": 1636, + "src": "3729:135:7", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1602, + "nodeType": "Block", + "src": "4101:55:7", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1597, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5287, + "src": "4138:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1596, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4130:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1598, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4130:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1599, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1589, + "src": "4145:6:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1594, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "4112:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1595, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "calculateFees", + "nodeType": "MemberAccess", + "referencedDeclaration": 3004, + "src": "4112:17:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) view returns (uint256)" + } + }, + "id": 1600, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4112:40:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1593, + "id": 1601, + "nodeType": "Return", + "src": "4105:47:7" + } + ] + }, + "documentation": "@notice Calculates fee of a given transfer amount\n@param amount transfer amount\n@return { \"fees\": \"Returns the fees associated with this contract\"}", + "id": 1603, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "calculateFees", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1590, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1589, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1603, + "src": "4056:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1588, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "4056:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4055:13:7" + }, + "payable": false, + "returnParameters": { + "id": 1593, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1592, + "name": "fees", + "nodeType": "VariableDeclaration", + "scope": 1603, + "src": "4090:9:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1591, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "4090:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4089:11:7" + }, + "scope": 1636, + "src": "4033:123:7", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1634, + "nodeType": "Block", + "src": "4712:148:7", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1621, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1605, + "src": "4746:8:7", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1623, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5287, + "src": "4764:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1636", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1622, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4756:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1624, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4756:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1625, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1607, + "src": "4771:2:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1626, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1609, + "src": "4775:6:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1627, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1611, + "src": "4783:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 1619, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1439, + "src": "4728:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1620, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "forceTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 3351, + "src": "4728:17:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,address,uint256,bytes memory) returns (bool)" + } + }, + "id": 1628, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4728:60:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20756e61626c6520746f207472616e73666572206665657320746f206163636f756e742e", + "id": 1629, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4793:44:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_1a0e1b57a2efd16cddba9f3dc60eebac17ba4db509e733796cdcf13851421b2c", + "typeString": "literal_string \"Error: unable to transfer fees to account.\"" + }, + "value": "Error: unable to transfer fees to account." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_1a0e1b57a2efd16cddba9f3dc60eebac17ba4db509e733796cdcf13851421b2c", + "typeString": "literal_string \"Error: unable to transfer fees to account.\"" + } + ], + "id": 1618, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "4716:7:7", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1630, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4716:125:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1631, + "nodeType": "ExpressionStatement", + "src": "4716:125:7" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1632, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4852:4:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1617, + "id": 1633, + "nodeType": "Return", + "src": "4845:11:7" + } + ] + }, + "documentation": "@notice Transfer collected fees to another account; onlyOwner\n@param currency Currency symbol of the token (e.g. USDx, JYPx, GBPx)\n@param to \t\t\tEthereum address of account to send token amount to\n@param amount\t Amount of tokens to transfer\n@param data\t\t Arbitrary bytes data message to include in transfer\n@return {\"success\": \"Returns ture if successfully called from another contract\"}", + "id": 1635, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 1614, + "modifierName": { + "argumentTypes": null, + "id": 1613, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "4679:9:7", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "4679:9:7" + } + ], + "name": "transferCollectedFees", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1612, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1605, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 1635, + "src": "4618:15:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1604, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "4618:6:7", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1607, + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 1635, + "src": "4635:10:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1606, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4635:7:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1609, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1635, + "src": "4647:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1608, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "4647:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1611, + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 1635, + "src": "4660:10:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1610, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4660:5:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4617:54:7" + }, + "payable": false, + "returnParameters": { + "id": 1617, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1616, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1635, + "src": "4698:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1615, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4698:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4697:14:7" + }, + "scope": 1636, + "src": "4587:273:7", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 1637, + "src": "1070:3794:7" + } + ], + "src": "0:4865:7" + }, + "compiler": { + "name": "solc", + "version": "0.4.24+commit.e67f0147.Emscripten.clang" + }, + "networks": { + "1": { + "events": {}, + "links": {}, + "address": "0x0149e0aaea12ed0fa6ca63175051d17fd2e5afae", + "transactionHash": "0xc6bd6981ab4df680824723a1e0f20a67aa763c540edf6f32310a0866321a8fab" + } + }, + "schemaVersion": "2.0.1", + "updatedAt": "2018-09-18T18:57:45.594Z" +} \ No newline at end of file diff --git a/deployed/mainnet-deprecated/TokenIOMerchant.json b/deployed/mainnet-deprecated/TokenIOMerchant.json new file mode 100644 index 0000000..87b8f88 --- /dev/null +++ b/deployed/mainnet-deprecated/TokenIOMerchant.json @@ -0,0 +1,7198 @@ +{ + "contractName": "TokenIOMerchant", + "abi": [ + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "allowOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "removeOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "", + "type": "address" + } + ], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "name": "_storageContract", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "AllowOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "RevokeOwnership", + "type": "event" + }, + { + "constant": false, + "inputs": [ + { + "name": "feeContract", + "type": "address" + } + ], + "name": "setParams", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getFeeParams", + "outputs": [ + { + "name": "bps", + "type": "uint256" + }, + { + "name": "min", + "type": "uint256" + }, + { + "name": "max", + "type": "uint256" + }, + { + "name": "flat", + "type": "uint256" + }, + { + "name": "feeMsg", + "type": "bytes" + }, + { + "name": "feeAccount", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "amount", + "type": "uint256" + } + ], + "name": "calculateFees", + "outputs": [ + { + "name": "fees", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "currency", + "type": "string" + }, + { + "name": "merchant", + "type": "address" + }, + { + "name": "amount", + "type": "uint256" + }, + { + "name": "merchantPaysFees", + "type": "bool" + }, + { + "name": "data", + "type": "bytes" + } + ], + "name": "pay", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051602080612e2b833981016040908152905133600090815260208190529182208054600160ff19918216811783558054600160a060020a031916600160a060020a039094169390931783558154169091179055612db590819061007690396000f3006080604052600436106100745763ffffffff60e060020a6000350416634bbc142c81146100795780634e49acac146100ae57806352238fdd146100cf578063666a3427146100f9578063666e1b391461011a5780636db31c251461013b578063be6fc181146101ef578063f2fde38b146102b1575b600080fd5b34801561008557600080fd5b5061009a600160a060020a03600435166102d2565b604080519115158252519081900360200190f35b3480156100ba57600080fd5b5061009a600160a060020a036004351661038e565b3480156100db57600080fd5b506100e76004356104b4565b60408051918252519081900360200190f35b34801561010557600080fd5b5061009a600160a060020a03600435166104df565b34801561012657600080fd5b5061009a600160a060020a0360043516610598565b34801561014757600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261009a94369492936024939284019190819084018382808284375050604080516020601f60608a01358b0180359182018390048302840183018552818452989b600160a060020a038b35169b838c01359b9586013515159a9199509750608090940195509193509182019181908401838280828437509497506105ad9650505050505050565b3480156101fb57600080fd5b50610204610855565b604051808781526020018681526020018581526020018481526020018060200183600160a060020a0316600160a060020a03168152602001828103825284818151815260200191508051906020019080838360005b83811015610271578181015183820152602001610259565b50505050905090810190601f16801561029e5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b3480156102bd57600080fd5b5061009a600160a060020a036004351661092b565b3360009081526020819052604081205460ff16151561033d576040805160e560020a62461bcd0281526020600482015260396024820152600080516020612d6a8339815191526044820152600080516020612d2a833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b3360009081526020819052604081205460ff1615156103f9576040805160e560020a62461bcd0281526020600482015260396024820152600080516020612d6a8339815191526044820152600080516020612d2a833981519152606482015290519081900360840190fd5b61040a60018363ffffffff610a6516565b15156104ac576040805160e560020a62461bcd02815260206004820152605260248201527f4572726f723a20556e61626c6520746f207365742066656520636f6e7472616360448201527f742e20456e7375726520636f6e747261637420697320616c6c6f77656420627960648201527f2073746f7261676520636f6e74726163742e0000000000000000000000000000608482015290519081900360a40190fd5b506001919050565b60006104d96104ca60013063ffffffff610c6816565b6001908463ffffffff610de316565b92915050565b3360009081526020819052604081205460ff16151561054a576040805160e560020a62461bcd0281526020600482015260396024820152600080516020612d6a8339815191526044820152600080516020612d2a833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b60008060006105bb866104b4565b91506105e2336105d360018b8a63ffffffff6112d416565b6001919063ffffffff61136c16565b151561065e576040805160e560020a62461bcd02815260206004820152602d60248201527f4572726f723a20556e61626c6520746f20736574206163636f756e742073706560448201527f6e64696e6720616d6f756e742e00000000000000000000000000000000000000606482015290519081900360840190fd5b610673600189338a8a8963ffffffff6116b016565b15156106ef576040805160e560020a62461bcd02815260206004820152602a60248201527f4572726f723a20556e61626c6520746f207472616e736665722066756e64732060448201527f746f206163636f756e7400000000000000000000000000000000000000000000606482015290519081900360840190fd5b61070060013063ffffffff610c6816565b905084156107b3576107328888838561072060018363ffffffff611e3416565b6001949392919063ffffffff6116b016565b15156107ae576040805160e560020a62461bcd02815260206004820152602f60248201527f4572726f723a20556e61626c6520746f207472616e736665722066656573207460448201527f6f2066656520636f6e74726163742e0000000000000000000000000000000000606482015290519081900360840190fd5b610847565b6107cb8833838561072060018363ffffffff611e3416565b1515610847576040805160e560020a62461bcd02815260206004820152602f60248201527f4572726f723a20556e61626c6520746f207472616e736665722066656573207460448201527f6f2066656520636f6e74726163742e0000000000000000000000000000000000606482015290519081900360840190fd5b506001979650505050505050565b600080808060608161087f61087160013063ffffffff610c6816565b60019063ffffffff611fe716565b6108a161089360013063ffffffff610c6816565b60019063ffffffff61213a16565b6108c36108b560013063ffffffff610c6816565b60019063ffffffff6121cb16565b6108e56108d760013063ffffffff610c6816565b60019063ffffffff61225c16565b6109076108f960013063ffffffff610c6816565b60019063ffffffff611e3416565b61091860013063ffffffff610c6816565b949b939a50919850965094509092509050565b3360009081526020819052604081205460ff161515610996576040805160e560020a62461bcd0281526020600482015260396024820152600080516020612d6a8339815191526044820152600080516020612d2a833981519152606482015290519081900360840190fd5b600160a060020a03821615156109f6576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b604080517f6665652e6163636f756e74000000000000000000000000000000000000000000602080830191909152606060020a3002602b8301528251601f818403018152603f909201928390528151600093849392909182918401908083835b60208310610ae45780518252601f199092019160209182019101610ac5565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547fca446dd900000000000000000000000000000000000000000000000000000000845260048401829052600160a060020a038b81166024860152955191985094909416955063ca446dd9945060448083019491935090918290030181600087803b158015610b7a57600080fd5b505af1158015610b8e573d6000803e3d6000fd5b505050506040513d6020811015610ba457600080fd5b50511515610c5c576040805160e560020a62461bcd0281526020600482015260686024820152600080516020612d4a83398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b600191505b5092915050565b60008060008360405160200180807f6665652e6163636f756e74000000000000000000000000000000000000000000815250600b0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310610cfc5780518252601f199092019160209182019101610cdd565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015610d8957600080fd5b505af1158015610d9d573d6000803e3d6000fd5b505050506040513d6020811015610db357600080fd5b50519050600160a060020a0381161515610dd757610dd0856122ed565b9250610ddb565b8092505b505092915050565b8254604080517f6665652e6d617800000000000000000000000000000000000000000000000000602080830191909152600160a060020a03868116606060020a0260278401528351808403601b018152603b9093019384905282516000958695869586958695869594169363bd02d0f593918291908401908083835b60208310610e7e5780518252601f199092019160209182019101610e5f565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b158015610edf57600080fd5b505af1158015610ef3573d6000803e3d6000fd5b505050506040513d6020811015610f0957600080fd5b50518954604080517f6665652e6d696e00000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260278401528351808403601b018152603b909301938490528251959a509093169363bd02d0f5939192918291908401908083835b60208310610f9f5780518252601f199092019160209182019101610f80565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b15801561100057600080fd5b505af1158015611014573d6000803e3d6000fd5b505050506040513d602081101561102a57600080fd5b50518954604080517f6665652e62707300000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260278401528351808403601b018152603b9093019384905282519599509093169363bd02d0f5939192918291908401908083835b602083106110c05780518252601f1990920191602091820191016110a1565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b15801561112157600080fd5b505af1158015611135573d6000803e3d6000fd5b505050506040513d602081101561114b57600080fd5b50518954604080517f6665652e666c6174000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260288401528351808403601c018152603c9093019384905282519598509093169363bd02d0f5939192918291908401908083835b602083106111e15780518252601f1990920191602091820191016111c2565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b15801561124257600080fd5b505af1158015611256573d6000803e3d6000fd5b505050506040513d602081101561126c57600080fd5b505191506112a28261129661271061128a8b8863ffffffff61241f16565b9063ffffffff6124c516565b9063ffffffff6124dc16565b9050848111156112b4578495506112c8565b838110156112c4578395506112c8565b8095505b50505050509392505050565b600080600080611319876040805190810160405280600481526020017f555344780000000000000000000000000000000000000000000000000000000081525061255f565b9250611325878761255f565b915061136182600a0a61128a85600a0a61135561271061128a6113488e8e61261f565b8c9063ffffffff61241f16565b9063ffffffff61241f16565b979650505050505050565b600080600061137b868661267c565b15156113f7576040805160e560020a62461bcd02815260206004820152603060248201527f4572726f723a20556e61626c6520746f20757064617465206163636f756e742060448201527f7370656e64696e6720706572696f642e00000000000000000000000000000000606482015290519081900360840190fd5b61140584611296888861275f565b9150816114128787612801565b101561148e576040805160e560020a62461bcd02815260206004820152603360248201527f4572726f723a204163636f756e742063616e6e6f74206578636565642069747360448201527f206461696c79207370656e64206c696d69742e00000000000000000000000000606482015290519081900360840190fd5b846114998787612892565b60405160200180807f6163636f756e742e7370656e64696e672e616d6f756e7400000000000000000081525060170183600160a060020a0316600160a060020a0316606060020a028152601401828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061152e5780518252601f19909201916020918201910161150f565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208c547fe2a4853a00000000000000000000000000000000000000000000000000000000845260048401829052602484018a90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b1580156115c257600080fd5b505af11580156115d6573d6000803e3d6000fd5b505050506040513d60208110156115ec57600080fd5b505115156116a4576040805160e560020a62461bcd0281526020600482015260686024820152600080516020612d4a83398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b50600195945050505050565b60008080600160a060020a038616151561173a576040805160e560020a62461bcd02815260206004820152602560248201527f4572726f723a2060746f602061646472657373206d757374206e6f742062652060448201527f6e756c6c2e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b876117458a89612923565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b6020831061179f5780518252601f199092019160209182019101611780565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106118215780518252601f199092019160209182019101611802565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902091508761185b8a88612923565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b602083106118b55780518252601f199092019160209182019101611896565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106119375780518252601f199092019160209182019101611918565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208f547fbd02d0f5000000000000000000000000000000000000000000000000000000008452600484018a90529451909750600160a060020a03909416955063e2a4853a94508793611a0893508b92879263bd02d0f5926024808401938290030181600087803b1580156119d057600080fd5b505af11580156119e4573d6000803e3d6000fd5b505050506040513d60208110156119fa57600080fd5b50519063ffffffff612a9116565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015611a5057600080fd5b505af1158015611a64573d6000803e3d6000fd5b505050506040513d6020811015611a7a57600080fd5b50511515611b32576040805160e560020a62461bcd0281526020600482015260696024820152600080516020612d4a83398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b8854604080517fbd02d0f5000000000000000000000000000000000000000000000000000000008152600481018490529051600160a060020a039092169163e2a4853a918491611bdf918a91869163bd02d0f59160248083019260209291908290030181600087803b158015611ba757600080fd5b505af1158015611bbb573d6000803e3d6000fd5b505050506040513d6020811015611bd157600080fd5b50519063ffffffff6124dc16565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015611c2757600080fd5b505af1158015611c3b573d6000803e3d6000fd5b505050506040513d6020811015611c5157600080fd5b50511515611d09576040805160e560020a62461bcd0281526020600482015260696024820152600080516020612d4a83398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b85600160a060020a031687600160a060020a03167f6f3dcde00ed34d4f404b335a65d18fb4adf74f5b817aa46f5d7c4f05c6d1e96e8a8888604051808060200184815260200180602001838103835286818151815260200191508051906020019080838360005b83811015611d88578181015183820152602001611d70565b50505050905090810190601f168015611db55780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611de8578181015183820152602001611dd0565b50505050905090810190601f168015611e155780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a350600198975050505050505050565b606060008260405160200180807f6665652e6d73670000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611ec75780518252601f199092019160209182019101611ea8565b5181516020939093036101000a60001901801990911692169190911790526040805191909301819003812089547fc031a180000000000000000000000000000000000000000000000000000000008352600483018290529351909650600160a060020a03909316945063c031a1809350602480820193600093509182900301818387803b158015611f5757600080fd5b505af1158015611f6b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611f9457600080fd5b810190808051640100000000811115611fac57600080fd5b82016020810184811115611fbf57600080fd5b8151640100000000811182820187101715611fd957600080fd5b509098975050505050505050565b6000808260405160200180807f6665652e6270730000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106120795780518252601f19909201916020918201910161205a565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547fbd02d0f5000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b15801561210657600080fd5b505af115801561211a573d6000803e3d6000fd5b505050506040513d602081101561213057600080fd5b5051949350505050565b6000808260405160200180807f6665652e6d696e0000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b6000808260405160200180807f6665652e6d61780000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b6000808260405160200180807f6665652e666c617400000000000000000000000000000000000000000000000081525060080182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b60008060405160200180807f6665652e636f6e74726163742e6d61737465720000000000000000000000000081525060130190506040516020818303038152906040526040518082805190602001908083835b6020831061235f5780518252601f199092019160209182019101612340565b51815160209384036101000a60001901801990921691161790526040805192909401829003822089547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b1580156123ec57600080fd5b505af1158015612400573d6000803e3d6000fd5b505050506040513d602081101561241657600080fd5b50519392505050565b6000808315156124325760009150610c61565b5082820282848281151561244257fe5b04146124be576040805160e560020a62461bcd02815260206004820152602760248201527f4572726f723a20556e73616665206d756c7469706c69636174696f6e206f706560448201527f726174696f6e2100000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b9392505050565b60008082848115156124d357fe5b04949350505050565b6000828201838110156124be576040805160e560020a62461bcd02815260206004820152602160248201527f4572726f723a20556e73616665206164646974696f6e206f7065726174696f6e60448201527f2100000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000808260405160200180807f746f6b656e2e646563696d616c73000000000000000000000000000000000000815250600e0182805190602001908083835b602083106125bd5780518252601f19909201916020918201910161259e565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b6000808260405160200180807f66782e7573642e72617465000000000000000000000000000000000000000000815250600b018280519060200190808383602083106125bd5780518252601f19909201916020918201910161259e565b600080600061268b8585612892565b91504282111561269e5760019250610ddb565b50620151806126da85856126d56126c88561135560016112968361128a428d63ffffffff612a9116565b869063ffffffff6124dc16565b612b16565b1515612756576040805160e560020a62461bcd02815260206004820152603060248201527f4572726f723a20556e61626c6520746f20757064617465206163636f756e742060448201527f7370656e64696e6720706572696f642e00000000000000000000000000000000606482015290519081900360840190fd5b60019250610ddb565b6000808261276d8585612892565b60405160200180807f6163636f756e742e7370656e64696e672e616d6f756e7400000000000000000081525060170183600160a060020a0316600160a060020a0316606060020a02815260140182815260200192505050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b6000808260405160200180807f6163636f756e742e7370656e64696e672e6c696d69740000000000000000000081525060160182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b6000808260405160200180807f6c696d69742e7370656e64696e672e706572696f64000000000000000000000081525060150182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b60008060008360405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106129b75780518252601f199092019160209182019101612998565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015612a4457600080fd5b505af1158015612a58573d6000803e3d6000fd5b505050506040513d6020811015612a6e57600080fd5b50519050600160a060020a03811615612a8957809250610ddb565b839250610ddb565b600082821115612b10576040805160e560020a62461bcd028152602060048201526024808201527f4572726f723a20556e73616665207375627472616374696f6e206f706572617460448201527f696f6e2100000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50900390565b6000808360405160200180807f6c696d69742e7370656e64696e672e706572696f64000000000000000000000081525060150182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310612ba85780518252601f199092019160209182019101612b89565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547fe2a4853a00000000000000000000000000000000000000000000000000000000845260048401829052602484018b90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b158015612c3c57600080fd5b505af1158015612c50573d6000803e3d6000fd5b505050506040513d6020811015612c6657600080fd5b50511515612d1e576040805160e560020a62461bcd0281526020600482015260686024820152600080516020612d4a83398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b506001949350505050560020616c6c6f7765642062792074686520636f6e74726163742e000000000000004572726f723a20556e61626c6520746f207365742073746f726167652076616c4572726f723a205472616e73616374696f6e2073656e646572206973206e6f74a165627a7a723058206d1f59bafb99fbae076da55eed0519583ed796a326864a3d34935ee156e570e60029", + "deployedBytecode": "0x6080604052600436106100745763ffffffff60e060020a6000350416634bbc142c81146100795780634e49acac146100ae57806352238fdd146100cf578063666a3427146100f9578063666e1b391461011a5780636db31c251461013b578063be6fc181146101ef578063f2fde38b146102b1575b600080fd5b34801561008557600080fd5b5061009a600160a060020a03600435166102d2565b604080519115158252519081900360200190f35b3480156100ba57600080fd5b5061009a600160a060020a036004351661038e565b3480156100db57600080fd5b506100e76004356104b4565b60408051918252519081900360200190f35b34801561010557600080fd5b5061009a600160a060020a03600435166104df565b34801561012657600080fd5b5061009a600160a060020a0360043516610598565b34801561014757600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261009a94369492936024939284019190819084018382808284375050604080516020601f60608a01358b0180359182018390048302840183018552818452989b600160a060020a038b35169b838c01359b9586013515159a9199509750608090940195509193509182019181908401838280828437509497506105ad9650505050505050565b3480156101fb57600080fd5b50610204610855565b604051808781526020018681526020018581526020018481526020018060200183600160a060020a0316600160a060020a03168152602001828103825284818151815260200191508051906020019080838360005b83811015610271578181015183820152602001610259565b50505050905090810190601f16801561029e5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b3480156102bd57600080fd5b5061009a600160a060020a036004351661092b565b3360009081526020819052604081205460ff16151561033d576040805160e560020a62461bcd0281526020600482015260396024820152600080516020612d6a8339815191526044820152600080516020612d2a833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b3360009081526020819052604081205460ff1615156103f9576040805160e560020a62461bcd0281526020600482015260396024820152600080516020612d6a8339815191526044820152600080516020612d2a833981519152606482015290519081900360840190fd5b61040a60018363ffffffff610a6516565b15156104ac576040805160e560020a62461bcd02815260206004820152605260248201527f4572726f723a20556e61626c6520746f207365742066656520636f6e7472616360448201527f742e20456e7375726520636f6e747261637420697320616c6c6f77656420627960648201527f2073746f7261676520636f6e74726163742e0000000000000000000000000000608482015290519081900360a40190fd5b506001919050565b60006104d96104ca60013063ffffffff610c6816565b6001908463ffffffff610de316565b92915050565b3360009081526020819052604081205460ff16151561054a576040805160e560020a62461bcd0281526020600482015260396024820152600080516020612d6a8339815191526044820152600080516020612d2a833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b60008060006105bb866104b4565b91506105e2336105d360018b8a63ffffffff6112d416565b6001919063ffffffff61136c16565b151561065e576040805160e560020a62461bcd02815260206004820152602d60248201527f4572726f723a20556e61626c6520746f20736574206163636f756e742073706560448201527f6e64696e6720616d6f756e742e00000000000000000000000000000000000000606482015290519081900360840190fd5b610673600189338a8a8963ffffffff6116b016565b15156106ef576040805160e560020a62461bcd02815260206004820152602a60248201527f4572726f723a20556e61626c6520746f207472616e736665722066756e64732060448201527f746f206163636f756e7400000000000000000000000000000000000000000000606482015290519081900360840190fd5b61070060013063ffffffff610c6816565b905084156107b3576107328888838561072060018363ffffffff611e3416565b6001949392919063ffffffff6116b016565b15156107ae576040805160e560020a62461bcd02815260206004820152602f60248201527f4572726f723a20556e61626c6520746f207472616e736665722066656573207460448201527f6f2066656520636f6e74726163742e0000000000000000000000000000000000606482015290519081900360840190fd5b610847565b6107cb8833838561072060018363ffffffff611e3416565b1515610847576040805160e560020a62461bcd02815260206004820152602f60248201527f4572726f723a20556e61626c6520746f207472616e736665722066656573207460448201527f6f2066656520636f6e74726163742e0000000000000000000000000000000000606482015290519081900360840190fd5b506001979650505050505050565b600080808060608161087f61087160013063ffffffff610c6816565b60019063ffffffff611fe716565b6108a161089360013063ffffffff610c6816565b60019063ffffffff61213a16565b6108c36108b560013063ffffffff610c6816565b60019063ffffffff6121cb16565b6108e56108d760013063ffffffff610c6816565b60019063ffffffff61225c16565b6109076108f960013063ffffffff610c6816565b60019063ffffffff611e3416565b61091860013063ffffffff610c6816565b949b939a50919850965094509092509050565b3360009081526020819052604081205460ff161515610996576040805160e560020a62461bcd0281526020600482015260396024820152600080516020612d6a8339815191526044820152600080516020612d2a833981519152606482015290519081900360840190fd5b600160a060020a03821615156109f6576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b604080517f6665652e6163636f756e74000000000000000000000000000000000000000000602080830191909152606060020a3002602b8301528251601f818403018152603f909201928390528151600093849392909182918401908083835b60208310610ae45780518252601f199092019160209182019101610ac5565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547fca446dd900000000000000000000000000000000000000000000000000000000845260048401829052600160a060020a038b81166024860152955191985094909416955063ca446dd9945060448083019491935090918290030181600087803b158015610b7a57600080fd5b505af1158015610b8e573d6000803e3d6000fd5b505050506040513d6020811015610ba457600080fd5b50511515610c5c576040805160e560020a62461bcd0281526020600482015260686024820152600080516020612d4a83398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b600191505b5092915050565b60008060008360405160200180807f6665652e6163636f756e74000000000000000000000000000000000000000000815250600b0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310610cfc5780518252601f199092019160209182019101610cdd565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015610d8957600080fd5b505af1158015610d9d573d6000803e3d6000fd5b505050506040513d6020811015610db357600080fd5b50519050600160a060020a0381161515610dd757610dd0856122ed565b9250610ddb565b8092505b505092915050565b8254604080517f6665652e6d617800000000000000000000000000000000000000000000000000602080830191909152600160a060020a03868116606060020a0260278401528351808403601b018152603b9093019384905282516000958695869586958695869594169363bd02d0f593918291908401908083835b60208310610e7e5780518252601f199092019160209182019101610e5f565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b158015610edf57600080fd5b505af1158015610ef3573d6000803e3d6000fd5b505050506040513d6020811015610f0957600080fd5b50518954604080517f6665652e6d696e00000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260278401528351808403601b018152603b909301938490528251959a509093169363bd02d0f5939192918291908401908083835b60208310610f9f5780518252601f199092019160209182019101610f80565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b15801561100057600080fd5b505af1158015611014573d6000803e3d6000fd5b505050506040513d602081101561102a57600080fd5b50518954604080517f6665652e62707300000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260278401528351808403601b018152603b9093019384905282519599509093169363bd02d0f5939192918291908401908083835b602083106110c05780518252601f1990920191602091820191016110a1565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b15801561112157600080fd5b505af1158015611135573d6000803e3d6000fd5b505050506040513d602081101561114b57600080fd5b50518954604080517f6665652e666c6174000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260288401528351808403601c018152603c9093019384905282519598509093169363bd02d0f5939192918291908401908083835b602083106111e15780518252601f1990920191602091820191016111c2565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b15801561124257600080fd5b505af1158015611256573d6000803e3d6000fd5b505050506040513d602081101561126c57600080fd5b505191506112a28261129661271061128a8b8863ffffffff61241f16565b9063ffffffff6124c516565b9063ffffffff6124dc16565b9050848111156112b4578495506112c8565b838110156112c4578395506112c8565b8095505b50505050509392505050565b600080600080611319876040805190810160405280600481526020017f555344780000000000000000000000000000000000000000000000000000000081525061255f565b9250611325878761255f565b915061136182600a0a61128a85600a0a61135561271061128a6113488e8e61261f565b8c9063ffffffff61241f16565b9063ffffffff61241f16565b979650505050505050565b600080600061137b868661267c565b15156113f7576040805160e560020a62461bcd02815260206004820152603060248201527f4572726f723a20556e61626c6520746f20757064617465206163636f756e742060448201527f7370656e64696e6720706572696f642e00000000000000000000000000000000606482015290519081900360840190fd5b61140584611296888861275f565b9150816114128787612801565b101561148e576040805160e560020a62461bcd02815260206004820152603360248201527f4572726f723a204163636f756e742063616e6e6f74206578636565642069747360448201527f206461696c79207370656e64206c696d69742e00000000000000000000000000606482015290519081900360840190fd5b846114998787612892565b60405160200180807f6163636f756e742e7370656e64696e672e616d6f756e7400000000000000000081525060170183600160a060020a0316600160a060020a0316606060020a028152601401828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061152e5780518252601f19909201916020918201910161150f565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208c547fe2a4853a00000000000000000000000000000000000000000000000000000000845260048401829052602484018a90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b1580156115c257600080fd5b505af11580156115d6573d6000803e3d6000fd5b505050506040513d60208110156115ec57600080fd5b505115156116a4576040805160e560020a62461bcd0281526020600482015260686024820152600080516020612d4a83398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b50600195945050505050565b60008080600160a060020a038616151561173a576040805160e560020a62461bcd02815260206004820152602560248201527f4572726f723a2060746f602061646472657373206d757374206e6f742062652060448201527f6e756c6c2e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b876117458a89612923565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b6020831061179f5780518252601f199092019160209182019101611780565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106118215780518252601f199092019160209182019101611802565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902091508761185b8a88612923565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b602083106118b55780518252601f199092019160209182019101611896565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106119375780518252601f199092019160209182019101611918565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208f547fbd02d0f5000000000000000000000000000000000000000000000000000000008452600484018a90529451909750600160a060020a03909416955063e2a4853a94508793611a0893508b92879263bd02d0f5926024808401938290030181600087803b1580156119d057600080fd5b505af11580156119e4573d6000803e3d6000fd5b505050506040513d60208110156119fa57600080fd5b50519063ffffffff612a9116565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015611a5057600080fd5b505af1158015611a64573d6000803e3d6000fd5b505050506040513d6020811015611a7a57600080fd5b50511515611b32576040805160e560020a62461bcd0281526020600482015260696024820152600080516020612d4a83398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b8854604080517fbd02d0f5000000000000000000000000000000000000000000000000000000008152600481018490529051600160a060020a039092169163e2a4853a918491611bdf918a91869163bd02d0f59160248083019260209291908290030181600087803b158015611ba757600080fd5b505af1158015611bbb573d6000803e3d6000fd5b505050506040513d6020811015611bd157600080fd5b50519063ffffffff6124dc16565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015611c2757600080fd5b505af1158015611c3b573d6000803e3d6000fd5b505050506040513d6020811015611c5157600080fd5b50511515611d09576040805160e560020a62461bcd0281526020600482015260696024820152600080516020612d4a83398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b85600160a060020a031687600160a060020a03167f6f3dcde00ed34d4f404b335a65d18fb4adf74f5b817aa46f5d7c4f05c6d1e96e8a8888604051808060200184815260200180602001838103835286818151815260200191508051906020019080838360005b83811015611d88578181015183820152602001611d70565b50505050905090810190601f168015611db55780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611de8578181015183820152602001611dd0565b50505050905090810190601f168015611e155780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a350600198975050505050505050565b606060008260405160200180807f6665652e6d73670000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611ec75780518252601f199092019160209182019101611ea8565b5181516020939093036101000a60001901801990911692169190911790526040805191909301819003812089547fc031a180000000000000000000000000000000000000000000000000000000008352600483018290529351909650600160a060020a03909316945063c031a1809350602480820193600093509182900301818387803b158015611f5757600080fd5b505af1158015611f6b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611f9457600080fd5b810190808051640100000000811115611fac57600080fd5b82016020810184811115611fbf57600080fd5b8151640100000000811182820187101715611fd957600080fd5b509098975050505050505050565b6000808260405160200180807f6665652e6270730000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106120795780518252601f19909201916020918201910161205a565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547fbd02d0f5000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b15801561210657600080fd5b505af115801561211a573d6000803e3d6000fd5b505050506040513d602081101561213057600080fd5b5051949350505050565b6000808260405160200180807f6665652e6d696e0000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b6000808260405160200180807f6665652e6d61780000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b6000808260405160200180807f6665652e666c617400000000000000000000000000000000000000000000000081525060080182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b60008060405160200180807f6665652e636f6e74726163742e6d61737465720000000000000000000000000081525060130190506040516020818303038152906040526040518082805190602001908083835b6020831061235f5780518252601f199092019160209182019101612340565b51815160209384036101000a60001901801990921691161790526040805192909401829003822089547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b1580156123ec57600080fd5b505af1158015612400573d6000803e3d6000fd5b505050506040513d602081101561241657600080fd5b50519392505050565b6000808315156124325760009150610c61565b5082820282848281151561244257fe5b04146124be576040805160e560020a62461bcd02815260206004820152602760248201527f4572726f723a20556e73616665206d756c7469706c69636174696f6e206f706560448201527f726174696f6e2100000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b9392505050565b60008082848115156124d357fe5b04949350505050565b6000828201838110156124be576040805160e560020a62461bcd02815260206004820152602160248201527f4572726f723a20556e73616665206164646974696f6e206f7065726174696f6e60448201527f2100000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000808260405160200180807f746f6b656e2e646563696d616c73000000000000000000000000000000000000815250600e0182805190602001908083835b602083106125bd5780518252601f19909201916020918201910161259e565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b6000808260405160200180807f66782e7573642e72617465000000000000000000000000000000000000000000815250600b018280519060200190808383602083106125bd5780518252601f19909201916020918201910161259e565b600080600061268b8585612892565b91504282111561269e5760019250610ddb565b50620151806126da85856126d56126c88561135560016112968361128a428d63ffffffff612a9116565b869063ffffffff6124dc16565b612b16565b1515612756576040805160e560020a62461bcd02815260206004820152603060248201527f4572726f723a20556e61626c6520746f20757064617465206163636f756e742060448201527f7370656e64696e6720706572696f642e00000000000000000000000000000000606482015290519081900360840190fd5b60019250610ddb565b6000808261276d8585612892565b60405160200180807f6163636f756e742e7370656e64696e672e616d6f756e7400000000000000000081525060170183600160a060020a0316600160a060020a0316606060020a02815260140182815260200192505050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b6000808260405160200180807f6163636f756e742e7370656e64696e672e6c696d69740000000000000000000081525060160182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b6000808260405160200180807f6c696d69742e7370656e64696e672e706572696f64000000000000000000000081525060150182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b60008060008360405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106129b75780518252601f199092019160209182019101612998565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015612a4457600080fd5b505af1158015612a58573d6000803e3d6000fd5b505050506040513d6020811015612a6e57600080fd5b50519050600160a060020a03811615612a8957809250610ddb565b839250610ddb565b600082821115612b10576040805160e560020a62461bcd028152602060048201526024808201527f4572726f723a20556e73616665207375627472616374696f6e206f706572617460448201527f696f6e2100000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50900390565b6000808360405160200180807f6c696d69742e7370656e64696e672e706572696f64000000000000000000000081525060150182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310612ba85780518252601f199092019160209182019101612b89565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547fe2a4853a00000000000000000000000000000000000000000000000000000000845260048401829052602484018b90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b158015612c3c57600080fd5b505af1158015612c50573d6000803e3d6000fd5b505050506040513d6020811015612c6657600080fd5b50511515612d1e576040805160e560020a62461bcd0281526020600482015260686024820152600080516020612d4a83398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b506001949350505050560020616c6c6f7765642062792074686520636f6e74726163742e000000000000004572726f723a20556e61626c6520746f207365742073746f726167652076616c4572726f723a205472616e73616374696f6e2073656e646572206973206e6f74a165627a7a723058206d1f59bafb99fbae076da55eed0519583ed796a326864a3d34935ee156e570e60029", + "sourceMap": "879:4088:9:-;;;1220:515;8:9:-1;5:2;;;30:1;27;20:12;5:2;1220:515:9;;;;;;;;;;;;;;;;1117:10:1;1111:5;:17;;;1220:515:9;1111:17:1;;;;;;:24;;1131:4;-1:-1:-1;;1111:24:1;;;;;;;1598:46:9;;-1:-1:-1;;;;;;1598:46:9;-1:-1:-1;;;;;1598:46:9;;;;;;;;;1704:24;;;;;;;;879:4088;;;;;;;;", + "deployedSourceMap": "879:4088:9:-;;;;;;;;;-1:-1:-1;;;879:4088:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2127:185:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2127:185:1;-1:-1:-1;;;;;2127:185:1;;;;;;;;;;;;;;;;;;;;;;;1942:260:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1942:260:9;-1:-1:-1;;;;;1942:260:9;;;;;3182:150;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3182:150:9;;;;;;;;;;;;;;;;;;;;;2571:188:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2571:188:1;-1:-1:-1;;;;;2571:188:1;;;;;725:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;725:37:1;-1:-1:-1;;;;;725:37:1;;;;;3866:1098:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3866:1098:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3866:1098:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3866:1098:9;;;;;;;;;;;;;;;;;;-1:-1:-1;3866:1098:9;-1:-1:-1;3866:1098:9;;;;;-1:-1:-1;3866:1098:9;;-1:-1:-1;3866:1098:9;;;;;;;;;;;;;;-1:-1:-1;3866:1098:9;;-1:-1:-1;3866:1098:9;;-1:-1:-1;;;;;;;3866:1098:9;2467:484;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2467:484:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2467:484:9;-1:-1:-1;;;;;2467:484:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2467:484:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1589:291:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1589:291:1;-1:-1:-1;;;;;1589:291:1;;;;;2127:185;1261:10;2201:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;2221:21:1;;:5;:21;;;;;;;;;;;:28;;-1:-1:-1;;2221:28:1;2245:4;2221:28;;;2260:30;;;2221:5;2260:30;-1:-1:-1;2303:4:1;2127:185;;;:::o;1942:260:9:-;1261:10:1;2020:12:9;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;2050:31:9;:3;2069:11;2050:31;:18;:31;:::i;:::-;2042:134;;;;;;;-1:-1:-1;;;;;2042:134:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2191:4:9;1942:260;;;:::o;3182:150::-;3239:9;3265:60;3283:33;:3;3310:4;3283:33;:18;:33;:::i;:::-;3265:3;;3318:6;3265:60;:17;:60;:::i;:::-;3258:67;3182:150;-1:-1:-1;;3182:150:9:o;2571:188:1:-;1261:10;2646:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;2666:21:1;;2690:5;2666:21;;;;;;;;;;;:29;;-1:-1:-1;;2666:29:1;;;2706:31;;;2690:5;2706:31;-1:-1:-1;2750:4:1;2571:188;;;:::o;725:37::-;;;;;;;;;;;;;;;;:::o;3866:1098:9:-;3978:12;4000:9;4391:19;4012:21;4026:6;4012:13;:21::i;:::-;4000:33;-1:-1:-1;4112:78:9;4141:10;4153:36;:3;4172:8;4182:6;4153:36;:18;:36;:::i;:::-;4112:3;;:78;;:28;:78;:::i;:::-;4104:144;;;;;;;-1:-1:-1;;;;;4104:144:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4264:63;:3;4282:8;4292:10;4304:8;4314:6;4322:4;4264:63;:17;:63;:::i;:::-;4256:126;;;;;;;-1:-1:-1;;;;;4256:126:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4413:33;:3;4440:4;4413:33;:18;:33;:::i;:::-;4391:55;;4554:16;4550:388;;;4590:84;4608:8;4618;4628:11;4641:4;4647:26;:3;4628:11;4647:26;:13;:26;:::i;:::-;4590:3;;:84;;;;;:17;:84;:::i;:::-;4582:154;;;;;;;-1:-1:-1;;;;;4582:154:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4550:388;;;4770:86;4788:8;4798:10;4810:11;4823:4;4829:26;:3;4810:11;4829:26;:13;:26;:::i;4770:86::-;4762:156;;;;;;;-1:-1:-1;;;;;4762:156:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4953:4:9;;3866:1098;-1:-1:-1;;;;;;;3866:1098:9:o;2467:484::-;2512:8;;;;2553:12;2512:8;2612:48;2626:33;:3;2653:4;2626:33;:18;:33;:::i;:::-;2612:3;;:48;:13;:48;:::i;:::-;2670;2684:33;:3;2711:4;2684:33;:18;:33;:::i;:::-;2670:3;;:48;:13;:48;:::i;:::-;2728;2742:33;:3;2769:4;2742:33;:18;:33;:::i;:::-;2728:3;;:48;:13;:48;:::i;:::-;2786:49;2801:33;:3;2828:4;2801:33;:18;:33;:::i;:::-;2786:3;;:49;:14;:49;:::i;:::-;2845:48;2859:33;:3;2886:4;2859:33;:18;:33;:::i;:::-;2845:3;;:48;:13;:48;:::i;:::-;2903:33;:3;2930:4;2903:33;:18;:33;:::i;:::-;2595:349;;;;-1:-1:-1;2595:349:9;;-1:-1:-1;2595:349:9;-1:-1:-1;2595:349:9;-1:-1:-1;2595:349:9;;-1:-1:-1;2467:484:9;-1:-1:-1;2467:484:9:o;1589:291:1:-;1261:10;1660:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;1688:22:1;;;;1680:66;;;;;-1:-1:-1;;;;;1680:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1757:42;;-1:-1:-1;;;;;1757:42:1;;;1778:10;;1757:42;;;;;-1:-1:-1;;;;;;1805:15:1;:5;:15;;;;;;;;;;;:22;;1823:4;-1:-1:-1;;1805:22:1;;;;;;;;1839:10;1833:17;;;;;;:25;;;;;;;1823:4;1589:291::o;11027:375:8:-;11152:46;;;;;;;;;;;;-1:-1:-1;;;11192:4:8;11152:46;;;;;;;22:32:-1;26:21;;;22:32;6:49;;11152:46:8;;;;;;;;11142:57;;11109:12;;;;11152:46;;;;;11142:57;;;;11152:46;11142:57;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;11142:57:8;;;;;;;;;;;;11220:12;;:40;;;;;;;;;-1:-1:-1;;;;;11220:40:8;;;;;;;;;11142:57;;-1:-1:-1;11220:12:8;;;;;-1:-1:-1;11220:23:8;;-1:-1:-1;11220:40:8;;;;;263:2:-1;;-1:-1;11220:40:8;;;;;;;-1:-1:-1;11220:12:8;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;11220:40:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11220:40:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11220:40:8;11205:175;;;;;;;-1:-1:-1;;;;;11205:175:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;11205:175:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11393:4;11386:11;;11027:375;;;;;;:::o;26726:364::-;26817:19;26844:10;26923:18;26899:15;26867:48;;;;;;;;;;;;;-1:-1:-1;;;;;26867:48:8;-1:-1:-1;;;;;26867:48:8;-1:-1:-1;;;26867:48:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;26867:48:8;;;26857:59;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;26857:59:8;;;;;;;;;;;;26944:12;;:27;;;;;;;;;;;26857:59;;-1:-1:-1;;;;;;26944:12:8;;;;-1:-1:-1;26944:23:8;;-1:-1:-1;26944:27:8;;;;;263:2:-1;;-1:-1;26944:27:8;;;;;;;-1:-1:-1;26944:12:8;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;26944:27:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26944:27:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26944:27:8;;-1:-1:-1;;;;;;26981:17:8;;;26977:109;;;27015:26;27036:4;27015:20;:26::i;:::-;27008:33;;;;26977:109;27069:10;27062:17;;26977:109;26726:364;;;;;;:::o;31068:722::-;31213:12;;31244:44;;;;;;;;;;;;-1:-1:-1;;;;;31244:44:8;;;-1:-1:-1;;;31244:44:8;;;;;;;26:21:-1;;;22:32;;6:49;;31244:44:8;;;;;;;;31234:55;;-1:-1:-1;;;;;;;;;;;;31213:12:8;;;:20;;31244:44;;;31234:55;;;;;31244:44;31234:55;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;31234:55:8;;;;;;;;;;;;31213:77;;;-1:-1:-1;;;31213:77:8;;;;;;;;;;;;;;-1:-1:-1;263:2;;-1:-1;31213:77:8;;;;;;;-1:-1:-1;31213:77:8;-1:-1:-1;31213:77:8;;;;5:2:-1;;;;30:1;27;20:12;5:2;31213:77:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31213:77:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31213:77:8;31310:12;;31341:44;;;;31213:77;31341:44;;;;;;;-1:-1:-1;;;;;31341:44:8;;;-1:-1:-1;;;31341:44:8;;;;;;;26:21:-1;;;22:32;;6:49;;31341:44:8;;;;;;;;31331:55;;31213:77;;-1:-1:-1;31310:12:8;;;;:20;;31341:44;;;;;31331:55;;;;;31341:44;31331:55;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;31331:55:8;;;;;;;;;;;;31310:77;;;-1:-1:-1;;;31310:77:8;;;;;;;;;;;;;;-1:-1:-1;263:2;;-1:-1;31310:77:8;;;;;;;-1:-1:-1;31310:77:8;-1:-1:-1;31310:77:8;;;;5:2:-1;;;;30:1;27;20:12;5:2;31310:77:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31310:77:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31310:77:8;31407:12;;31438:44;;;;31310:77;31438:44;;;;;;;-1:-1:-1;;;;;31438:44:8;;;-1:-1:-1;;;31438:44:8;;;;;;;26:21:-1;;;22:32;;6:49;;31438:44:8;;;;;;;;31428:55;;31310:77;;-1:-1:-1;31407:12:8;;;;:20;;31438:44;;;;;31428:55;;;;;31438:44;31428:55;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;31428:55:8;;;;;;;;;;;;31407:77;;;-1:-1:-1;;;31407:77:8;;;;;;;;;;;;;;-1:-1:-1;263:2;;-1:-1;31407:77:8;;;;;;;-1:-1:-1;31407:77:8;-1:-1:-1;31407:77:8;;;;5:2:-1;;;;30:1;27;20:12;5:2;31407:77:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31407:77:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31407:77:8;31505:12;;31536:45;;;;31407:77;31536:45;;;;;;;-1:-1:-1;;;;;31536:45:8;;;-1:-1:-1;;;31536:45:8;;;;;;;26:21:-1;;;22:32;;6:49;;31536:45:8;;;;;;;;31526:56;;31407:77;;-1:-1:-1;31505:12:8;;;;:20;;31536:45;;;;;31526:56;;;;;31536:45;31526:56;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;31526:56:8;;;;;;;;;;;;31505:78;;;-1:-1:-1;;;31505:78:8;;;;;;;;;;;;;;-1:-1:-1;263:2;;-1:-1;31505:78:8;;;;;;;-1:-1:-1;31505:78:8;-1:-1:-1;31505:78:8;;;;5:2:-1;;;;30:1;27;20:12;5:2;31505:78:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31505:78:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31505:78:8;;-1:-1:-1;31601:46:8;31505:78;31602:31;31627:5;31603:18;:6;31614;31603:18;:10;:18;:::i;:::-;31602:24;:31;:24;:31;:::i;:::-;31601:37;:46;:37;:46;:::i;:::-;31589:58;;31665:6;31658:4;:13;31654:132;;;31688:6;31681:13;;;;31654:132;31718:6;31711:4;:13;31707:79;;;31741:6;31734:13;;;;31707:79;31775:4;31768:11;;31707:79;31068:722;;;;;;;;;;:::o;64447:441::-;64545:11;64564:16;64619:15;64743:14;64583:30;64600:4;64583:30;;;;;;;;;;;;;;;;;;:16;:30::i;:::-;64564:49;;64637:32;64654:4;64660:8;64637:16;:32::i;:::-;64619:50;;64760:101;64850:10;64846:2;:14;64761:79;64828:11;64824:2;:15;64762:56;64812:5;64762:45;64775:31;64791:4;64797:8;64775:15;:31::i;:::-;64762:8;;:45;:12;:45;:::i;:56::-;64761:62;:79;:62;:79;:::i;64760:101::-;64743:118;64447:441;-1:-1:-1;;;;;;;64447:441:8:o;59597:1002::-;59698:12;59926:18;60291:10;59818:42;59846:4;59852:7;59818:27;:42::i;:::-;59810:109;;;;;;;-1:-1:-1;;;;;59810:109:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59947:51;59991:6;59947:39;59972:4;59978:7;59947:24;:39::i;:51::-;59926:72;;60146:13;60104:38;60128:4;60134:7;60104:23;:38::i;:::-;:55;;60089:132;;;;;-1:-1:-1;;;;;60089:132:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60358:7;60367:39;60392:4;60398:7;60367:24;:39::i;:::-;60314:93;;;;;;;;;;;;;-1:-1:-1;;;;;60314:93:8;-1:-1:-1;;;;;60314:93:8;-1:-1:-1;;;60314:93:8;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;60314:93:8;;;60304:104;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;60304:104:8;;;;;;;;;;;;60422:12;;:39;;;;;;;;;;;;;;;;;60304:104;;-1:-1:-1;;;;;;60422:12:8;;;;-1:-1:-1;60422:20:8;;-1:-1:-1;60422:39:8;;;;;263:2:-1;;-1:-1;60422:39:8;;;;;;;-1:-1:-1;60422:12:8;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;60422:39:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;60422:39:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;60422:39:8;60414:162;;;;;;;-1:-1:-1;;;;;60414:162:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;60414:162:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;60590:4:8;;59597:1002;-1:-1:-1;;;;;59597:1002:8:o;38209:943::-;38337:12;;;-1:-1:-1;;;;;38372:18:8;;;;38357:86;;;;;-1:-1:-1;;;;;38357:86:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38509:8;38519:31;38539:4;38545;38519:19;:31::i;:::-;38475:76;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38475:76:8;;;;;;;-1:-1:-1;;;;;38475:76:8;-1:-1:-1;;;;;38475:76:8;-1:-1:-1;;;38475:76:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;38475:76:8;;;38465:87;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38465:87:8;;;;;;;;;;;;;;;;38450:102;;38617:8;38627:29;38647:4;38653:2;38627:19;:29::i;:::-;38583:74;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38583:74:8;;;;;;;-1:-1:-1;;;;;38583:74:8;-1:-1:-1;;;;;38583:74:8;-1:-1:-1;;;38583:74:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;38583:74:8;;;38573:85;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;38573:85:8;;;;;;;;;;;;38680:12;;38707:26;;;;;;;;;;;38573:85;;-1:-1:-1;;;;;;38680:12:8;;;;-1:-1:-1;38680:20:8;;-1:-1:-1;38707:26:8;;:38;;-1:-1:-1;38738:6:8;;38680:12;;38707:20;;:26;;;;;;;;;;-1:-1:-1;38680:12:8;38707:26;;;5:2:-1;;;;30:1;27;20:12;5:2;38707:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38707:26:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38707:26:8;;:38;:30;:38;:::i;:::-;38680:66;;;;;-1:-1:-1;;;38680:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38680:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38680:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38680:66:8;38665:202;;;;;;;-1:-1:-1;;;;;38665:202:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;38665:202:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38888:12;;38915:26;;;;;;;;;;;;;;-1:-1:-1;;;;;38888:12:8;;;;:20;;38909:4;;38915:38;;38946:6;;38888:12;;38915:20;;:26;;;;;;;;;;;;;;38888:12;;38915:26;;;5:2:-1;;;;30:1;27;20:12;5:2;38915:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38915:26:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38915:26:8;;:38;:30;:38;:::i;:::-;38888:66;;;;;-1:-1:-1;;;38888:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38888:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38888:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38888:66:8;38873:202;;;;;;;-1:-1:-1;;;;;38873:202:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;38873:202:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39112:2;-1:-1:-1;;;;;39087:42:8;39106:4;-1:-1:-1;;;;;39087:42:8;;39096:8;39116:6;39124:4;39087:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;39087:42:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39087:42:8;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;39087:42:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39143:4:8;;38209:943;-1:-1:-1;;;;;;;;38209:943:8:o;24582:217::-;24668:12;24688:10;24739:15;24711:44;;;;;;;;;;;;;-1:-1:-1;;;;;24711:44:8;-1:-1:-1;;;;;24711:44:8;-1:-1:-1;;;24711:44:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;24711:44:8;;;24701:55;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;24701:55:8;;;;;;;;;;;;24769:12;;:25;;;;;;;;;;;24701:55;;-1:-1:-1;;;;;;24769:12:8;;;;-1:-1:-1;24769:21:8;;-1:-1:-1;24769:25:8;;;;;-1:-1:-1;;;24769:25:8;;;;;;-1:-1:-1;24769:12:8;:25;;;5:2:-1;;;;30:1;27;20:12;5:2;24769:25:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24769:25:8;;;;;;39:16:-1;36:1;17:17;2:54;101:4;24769:25:8;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;24769:25:8;;;;;;20:11:-1;15:3;12:20;9:2;;;45:1;42;35:12;9:2;64:21;;126:4;117:14;;142:31;;;139:2;;;186:1;183;176:12;139:2;218:10;;268:11;251:29;;293:43;;;290:58;-1:-1;239:118;236:2;;;370:1;367;360:12;236:2;-1:-1;24769:25:8;;24582:217;-1:-1:-1;;;;;;;;24582:217:8:o;22196:215::-;22282:11;22301:10;22352:15;22324:44;;;;;;;;;;;;;-1:-1:-1;;;;;22324:44:8;-1:-1:-1;;;;;22324:44:8;-1:-1:-1;;;22324:44:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;22324:44:8;;;22314:55;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;22314:55:8;;;;;;;;;;;;22382:12;;:24;;;;;;;;;;;22314:55;;-1:-1:-1;;;;;;22382:12:8;;;;-1:-1:-1;22382:20:8;;-1:-1:-1;22382:24:8;;;;;263:2:-1;;-1:-1;22382:24:8;;;;;;;-1:-1:-1;22382:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;22382:24:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22382:24:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22382:24:8;;22196:215;-1:-1:-1;;;;22196:215:8:o;22791:::-;22877:11;22896:10;22947:15;22919:44;;;;;;;;;;;;;-1:-1:-1;;;;;22919:44:8;-1:-1:-1;;;;;22919:44:8;-1:-1:-1;;;22919:44:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;22919:44:8;;;22909:55;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;23386:215:8;23472:11;23491:10;23542:15;23514:44;;;;;;;;;;;;;-1:-1:-1;;;;;23514:44:8;-1:-1:-1;;;;;23514:44:8;-1:-1:-1;;;23514:44:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;23514:44:8;;;23504:55;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;23976:218:8;24063:12;24083:10;24135:15;24106:45;;;;;;;;;;;;;-1:-1:-1;;;;;24106:45:8;-1:-1:-1;;;;;24106:45:8;-1:-1:-1;;;24106:45:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;24106:45:8;;;24096:56;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;25926:213:8;25998:25;26031:10;26054:39;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;26054:39:8;;;26044:50;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;26044:50:8;;;;;;;;;;;;26107:12;;:27;;;;;;;;;;;26044:50;;-1:-1:-1;;;;;;26107:12:8;;;;-1:-1:-1;26107:23:8;;-1:-1:-1;26107:27:8;;;;;263:2:-1;;-1:-1;26107:27:8;;;;;;;-1:-1:-1;26107:12:8;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;26107:27:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26107:27:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26107:27:8;;25926:213;-1:-1:-1;;;25926:213:8:o;301:224:2:-;359:14;;385:6;;381:35;;;408:1;401:8;;;;381:35;-1:-1:-1;433:5:2;;;437:1;433;:5;452;;;;;;;;:10;444:62;;;;;-1:-1:-1;;;;;444:62:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;519:1;301:224;-1:-1:-1;;;301:224:2:o;697:284::-;755:14;857:9;873:1;869;:5;;;;;;;;;697:284;-1:-1:-1;;;;697:284:2:o;1540:174::-;1598:14;1632:5;;;1651:6;;;;1643:52;;;;;-1:-1:-1;;;;;1643:52:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21585:221:8;21670:18;21696:10;21754:8;21719:44;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;21719:44:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;21719:44:8;;;21709:55;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;63878:211:8;63962:12;63982:10;64037:8;64005:41;;;;;;;;;;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;61054:503:8;61145:12;61165;61284:13;61180:39;61205:4;61211:7;61180:24;:39::i;:::-;61165:54;;61239:3;61229:7;:13;61225:328;;;61259:4;61252:11;;;;61225:328;-1:-1:-1;61300:5:8;61356:109;61381:4;61387:7;61396:68;61408:55;61300:5;61409:39;61446:1;61409:32;61300:5;61410:16;:3;61418:7;61410:16;:7;:16;:::i;61408:55::-;61396:7;;:68;:11;:68;:::i;:::-;61356:24;:109::i;:::-;61339:187;;;;;;;-1:-1:-1;;;;;61339:187:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61542:4;61535:11;;;;61915:271;62008:11;62027:10;62094:7;62103:39;62128:4;62134:7;62103:24;:39::i;:::-;62050:93;;;;;;;;;;;;;-1:-1:-1;;;;;62050:93:8;-1:-1:-1;;;;;62050:93:8;-1:-1:-1;;;62050:93:8;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;62050:93:8;;;62040:104;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;58785:227:8;58877:10;58895;58961:7;58918:51;;;;;;;;;;;;;-1:-1:-1;;;;;58918:51:8;-1:-1:-1;;;;;58918:51:8;-1:-1:-1;;;58918:51:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;58918:51:8;;;58908:62;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;57486:228:8;57579:11;57598:10;57663:7;57621:50;;;;;;;;;;;;;-1:-1:-1;;;;;57621:50:8;-1:-1:-1;;;;;57621:50:8;-1:-1:-1;;;57621:50:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;57621:50:8;;;57611:61;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;16402:357:8;16490:25;16523:10;16596:23;16581:7;16546:43;;;;;;;;;;;;;-1:-1:-1;;;;;16546:43:8;-1:-1:-1;;;;;16546:43:8;-1:-1:-1;;;16546:43:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16546:43:8;;;16536:54;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;16536:54:8;;;;;;;;;;;;16622:12;;:27;;;;;;;;;;;16536:54;;-1:-1:-1;;;;;;16622:12:8;;;;-1:-1:-1;16622:23:8;;-1:-1:-1;16622:27:8;;;;;263:2:-1;;-1:-1;16622:27:8;;;;;;;-1:-1:-1;16622:12:8;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;16622:27:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16622:27:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16622:27:8;;-1:-1:-1;;;;;;16659:22:8;;;16655:100;;16698:15;16691:22;;;;16655:100;16741:7;16734:14;;;;1143:234:2;1201:14;1307:6;;;;1299:55;;;;;-1:-1:-1;;;;;1299:55:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1367:5:2;;;1143:234::o;56628:379:8:-;56729:12;56749:10;56814:7;56772:50;;;;;;;;;;;;;-1:-1:-1;;;;;56772:50:8;-1:-1:-1;;;;;56772:50:8;-1:-1:-1;;;56772:50:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;56772:50:8;;;56762:61;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;56762:61:8;;;;;;;;;;;;56837:12;;:32;;;;;;;;;;;;;;;;;56762:61;;-1:-1:-1;;;;;;56837:12:8;;;;-1:-1:-1;56837:20:8;;-1:-1:-1;56837:32:8;;;;;263:2:-1;;-1:-1;56837:32:8;;;;;;;-1:-1:-1;56837:12:8;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;56837:32:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;56837:32:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;56837:32:8;56829:155;;;;;;;-1:-1:-1;;;;;56829:155:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;56829:155:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;56998:4:8;;56628:379;-1:-1:-1;;;;56628:379:8:o", + "source": "pragma solidity 0.4.24;\n\n/*\nCOPYRIGHT 2018 Token, Inc.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\n\n/**\n@title TokenIOMerchant - Merchant Interface Smart Contract for Token, Inc.\n\n@author Ryan Tate , Sean Pollock \n\n@notice Contract uses generalized storage contract, `TokenIOStorage`, for\nupgradeability of interface contract.\n*/\n\nimport \"./Ownable.sol\";\nimport \"./TokenIOStorage.sol\";\nimport \"./TokenIOLib.sol\";\n\ncontract TokenIOMerchant is Ownable {\n\n /// @dev Set reference to TokenIOLib interface which proxies to TokenIOStorage\n using TokenIOLib for TokenIOLib.Data;\n TokenIOLib.Data lib;\n\n /**\n * @notice Constructor method for Merchant contract\n * @param _storageContract Ethereum Address of TokenIOStorage contract\n */\n constructor(address _storageContract) public {\n /*\n * @notice Set the storage contract for the interface\n * @dev This contract will be unable to use the storage constract until\n * @dev contract address is authorized with the storage contract\n * @dev Once authorized, you can setRegisteredFirm and setRegisteredAuthority\n */\n lib.Storage = TokenIOStorage(_storageContract);\n\n /// @dev set owner to contract initiator\n owner[msg.sender] = true;\n }\n\n /**\n @notice Sets Merchant globals and fee paramters\n @param feeContract Address of fee contract\n @return { \"success\" : \"Returns true if successfully called from another contract\"}\n */\n function setParams(\n address feeContract\n ) onlyOwner public returns (bool success) {\n require(lib.setFeeContract(feeContract),\n \"Error: Unable to set fee contract. Ensure contract is allowed by storage contract.\");\n return true;\n }\n\n /**\n * @notice Gets fee parameters\n * @return {\n \"bps\":\"Fee amount as a mesuare of basis points\",\n \"min\":\"Minimum fee amount\",\n \"max\":\"Maximum fee amount\",\n \"flat\":\"Flat fee amount\",\n \"contract\":\"Address of fee contract\"\n }\n */\n function getFeeParams() public view returns (uint bps, uint min, uint max, uint flat, bytes feeMsg, address feeAccount) {\n return (\n lib.getFeeBPS(lib.getFeeContract(address(this))),\n lib.getFeeMin(lib.getFeeContract(address(this))),\n lib.getFeeMax(lib.getFeeContract(address(this))),\n lib.getFeeFlat(lib.getFeeContract(address(this))),\n lib.getFeeMsg(lib.getFeeContract(address(this))),\n lib.getFeeContract(address(this))\n );\n }\n\n /**\n * @notice Calculates fee of a given transfer amount\n * @param amount Amount to calculcate fee value\n * @return {\"fees\": \"Returns the calculated transaction fees based on the fee contract parameters\"}\n */\n function calculateFees(uint amount) public view returns (uint fees) {\n return lib.calculateFees(lib.getFeeContract(address(this)), amount);\n }\n\n /**\n * @notice Pay method for merchant interface\n * @param currency Currency symbol of the token (e.g. USDx, JYPx, GBPx)\n * @param merchant Ethereum address of merchant\n * @param amount Amount of currency to send to merchant\n * @param merchantPaysFees Provide option for merchant to pay the transaction fees\n * @param data Optional data to be included when paying the merchant (e.g. item receipt)\n * @return { \"success\" : \"Returns true if successfully called from another contract\"}\n */\n function pay(string currency, address merchant, uint amount, bool merchantPaysFees, bytes data) public returns (bool success) {\n uint fees = calculateFees(amount);\n /// @dev note the spending amount limit is gross of fees\n require(lib.setAccountSpendingAmount(msg.sender, lib.getFxUSDAmount(currency, amount)),\n \"Error: Unable to set account spending amount.\");\n require(lib.forceTransfer(currency, msg.sender, merchant, amount, data),\n \"Error: Unable to transfer funds to account\");\n\n address feeContract = lib.getFeeContract(address(this));\n /// @dev If merchantPaysFees == true, the merchant will pay the fees to the fee contract;\n if (merchantPaysFees) {\n require(lib.forceTransfer(currency, merchant, feeContract, fees, lib.getFeeMsg(feeContract)),\n \"Error: Unable to transfer fees to fee contract.\");\n\n } else {\n require(lib.forceTransfer(currency, msg.sender, feeContract, fees, lib.getFeeMsg(feeContract)),\n \"Error: Unable to transfer fees to fee contract.\");\n \n }\n\n return true;\n }\n\n}\n", + "sourcePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOMerchant.sol", + "ast": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOMerchant.sol", + "exportedSymbols": { + "TokenIOMerchant": [ + 4859 + ] + }, + "id": 4860, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4624, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:9" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 4625, + "nodeType": "ImportDirective", + "scope": 4860, + "sourceUnit": 185, + "src": "796:23:9", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 4626, + "nodeType": "ImportDirective", + "scope": 4860, + "sourceUnit": 5242, + "src": "820:30:9", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 4627, + "nodeType": "ImportDirective", + "scope": 4860, + "sourceUnit": 4623, + "src": "851:26:9", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 4628, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "907:7:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 4629, + "nodeType": "InheritanceSpecifier", + "src": "907:7:9" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 4859, + "linearizedBaseContracts": [ + 4859, + 184 + ], + "name": "TokenIOMerchant", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 4632, + "libraryName": { + "contractScope": null, + "id": 4630, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4622, + "src": "1011:10:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4622", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "1005:37:9", + "typeName": { + "contractScope": null, + "id": 4631, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1026:15:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 4634, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 4859, + "src": "1047:19:9", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 4633, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1047:15:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 4654, + "nodeType": "Block", + "src": "1265:470:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 4645, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4639, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "1598:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4641, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1645, + "src": "1598:11:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4643, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4636, + "src": "1627:16:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4642, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5241, + "src": "1612:14:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5241_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 4644, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1612:32:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1598:46:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "id": 4646, + "nodeType": "ExpressionStatement", + "src": "1598:46:9" + }, + { + "expression": { + "argumentTypes": null, + "id": 4652, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 4647, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1704:5:9", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 4650, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4648, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "1710:3:9", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4649, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1710:10:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1704:17:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4651, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1724:4:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1704:24:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4653, + "nodeType": "ExpressionStatement", + "src": "1704:24:9" + } + ] + }, + "documentation": "@notice Constructor method for Merchant contract\n@param _storageContract Ethereum Address of TokenIOStorage contract", + "id": 4655, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4637, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4636, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 4655, + "src": "1232:24:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4635, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1232:7:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1231:26:9" + }, + "payable": false, + "returnParameters": { + "id": 4638, + "nodeType": "ParameterList", + "parameters": [], + "src": "1265:0:9" + }, + "scope": 4859, + "src": "1220:515:9", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4674, + "nodeType": "Block", + "src": "2034:168:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4667, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4657, + "src": "2069:11:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4665, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "2050:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4666, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2102, + "src": "2050:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) returns (bool)" + } + }, + "id": 4668, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2050:31:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e74726163742e20456e7375726520636f6e747261637420697320616c6c6f7765642062792073746f7261676520636f6e74726163742e", + "id": 4669, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2091:84:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_9e05a6836836cb77baea52eb421ebbf742058dce5c126f5d3343064b07960fe4", + "typeString": "literal_string \"Error: Unable to set fee contract. Ensure contract is allowed by storage contract.\"" + }, + "value": "Error: Unable to set fee contract. Ensure contract is allowed by storage contract." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_9e05a6836836cb77baea52eb421ebbf742058dce5c126f5d3343064b07960fe4", + "typeString": "literal_string \"Error: Unable to set fee contract. Ensure contract is allowed by storage contract.\"" + } + ], + "id": 4664, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2042:7:9", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4670, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2042:134:9", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4671, + "nodeType": "ExpressionStatement", + "src": "2042:134:9" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4672, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2191:4:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 4663, + "id": 4673, + "nodeType": "Return", + "src": "2184:11:9" + } + ] + }, + "documentation": "@notice Sets Merchant globals and fee paramters\n@param feeContract Address of fee contract\n@return { \"success\" : \"Returns true if successfully called from another contract\"}", + "id": 4675, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 4660, + "modifierName": { + "argumentTypes": null, + "id": 4659, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "1994:9:9", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "1994:9:9" + } + ], + "name": "setParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4658, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4657, + "name": "feeContract", + "nodeType": "VariableDeclaration", + "scope": 4675, + "src": "1968:19:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4656, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1968:7:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1960:33:9" + }, + "payable": false, + "returnParameters": { + "id": 4663, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4662, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 4675, + "src": "2020:12:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4661, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2020:4:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2019:14:9" + }, + "scope": 4859, + "src": "1942:260:9", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4743, + "nodeType": "Block", + "src": "2587:364:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4695, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5289, + "src": "2653:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4694, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2645:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4696, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2645:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4692, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "2626:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4693, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2736, + "src": "2626:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4697, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2626:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4690, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "2612:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4691, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeBPS", + "nodeType": "MemberAccess", + "referencedDeclaration": 2538, + "src": "2612:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 4698, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2612:48:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4704, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5289, + "src": "2711:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4703, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2703:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4705, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2703:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4701, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "2684:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4702, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2736, + "src": "2684:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4706, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2684:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4699, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "2670:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4700, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMin", + "nodeType": "MemberAccess", + "referencedDeclaration": 2564, + "src": "2670:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 4707, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2670:48:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4713, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5289, + "src": "2769:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4712, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2761:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4714, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2761:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4710, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "2742:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4711, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2736, + "src": "2742:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4715, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2742:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4708, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "2728:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4709, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMax", + "nodeType": "MemberAccess", + "referencedDeclaration": 2590, + "src": "2728:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 4716, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2728:48:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4722, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5289, + "src": "2828:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4721, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2820:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4723, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2820:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4719, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "2801:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4720, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2736, + "src": "2801:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4724, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2801:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4717, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "2786:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4718, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeFlat", + "nodeType": "MemberAccess", + "referencedDeclaration": 2616, + "src": "2786:14:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 4725, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2786:49:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4731, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5289, + "src": "2886:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4730, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2878:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4732, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2878:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4728, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "2859:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4729, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2736, + "src": "2859:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4733, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2859:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4726, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "2845:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4727, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMsg", + "nodeType": "MemberAccess", + "referencedDeclaration": 2642, + "src": "2845:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bytes memory)" + } + }, + "id": 4734, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2845:48:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4738, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5289, + "src": "2930:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4737, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2922:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4739, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2922:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4735, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "2903:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4736, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2736, + "src": "2903:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4740, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2903:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 4741, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2602:342:9", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_address_$", + "typeString": "tuple(uint256,uint256,uint256,uint256,bytes memory,address)" + } + }, + "functionReturnParameters": 4689, + "id": 4742, + "nodeType": "Return", + "src": "2595:349:9" + } + ] + }, + "documentation": "@notice Gets fee parameters\n@return {\n\"bps\":\"Fee amount as a mesuare of basis points\",\n\"min\":\"Minimum fee amount\",\n\"max\":\"Maximum fee amount\",\n\"flat\":\"Flat fee amount\",\n\"contract\":\"Address of fee contract\"\n}", + "id": 4744, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getFeeParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4676, + "nodeType": "ParameterList", + "parameters": [], + "src": "2488:2:9" + }, + "payable": false, + "returnParameters": { + "id": 4689, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4678, + "name": "bps", + "nodeType": "VariableDeclaration", + "scope": 4744, + "src": "2512:8:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4677, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2512:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4680, + "name": "min", + "nodeType": "VariableDeclaration", + "scope": 4744, + "src": "2522:8:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4679, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2522:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4682, + "name": "max", + "nodeType": "VariableDeclaration", + "scope": 4744, + "src": "2532:8:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4681, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2532:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4684, + "name": "flat", + "nodeType": "VariableDeclaration", + "scope": 4744, + "src": "2542:9:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4683, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2542:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4686, + "name": "feeMsg", + "nodeType": "VariableDeclaration", + "scope": 4744, + "src": "2553:12:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4685, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2553:5:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4688, + "name": "feeAccount", + "nodeType": "VariableDeclaration", + "scope": 4744, + "src": "2567:18:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4687, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2567:7:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2511:75:9" + }, + "scope": 4859, + "src": "2467:484:9", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4762, + "nodeType": "Block", + "src": "3250:82:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4756, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5289, + "src": "3310:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4755, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3302:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4757, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3302:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4753, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "3283:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4754, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2736, + "src": "3283:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4758, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3283:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4759, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4746, + "src": "3318:6:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 4751, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "3265:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4752, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "calculateFees", + "nodeType": "MemberAccess", + "referencedDeclaration": 3004, + "src": "3265:17:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) view returns (uint256)" + } + }, + "id": 4760, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3265:60:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4750, + "id": 4761, + "nodeType": "Return", + "src": "3258:67:9" + } + ] + }, + "documentation": "@notice Calculates fee of a given transfer amount\n@param amount Amount to calculcate fee value\n@return {\"fees\": \"Returns the calculated transaction fees based on the fee contract parameters\"}", + "id": 4763, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "calculateFees", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4747, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4746, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 4763, + "src": "3205:11:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4745, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3205:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3204:13:9" + }, + "payable": false, + "returnParameters": { + "id": 4750, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4749, + "name": "fees", + "nodeType": "VariableDeclaration", + "scope": 4763, + "src": "3239:9:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4748, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3239:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3238:11:9" + }, + "scope": 4859, + "src": "3182:150:9", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4857, + "nodeType": "Block", + "src": "3992:972:9", + "statements": [ + { + "assignments": [ + 4779 + ], + "declarations": [ + { + "constant": false, + "id": 4779, + "name": "fees", + "nodeType": "VariableDeclaration", + "scope": 4858, + "src": "4000:9:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4778, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "4000:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 4783, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4781, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4769, + "src": "4026:6:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4780, + "name": "calculateFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4763, + "src": "4012:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view returns (uint256)" + } + }, + "id": 4782, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4012:21:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4000:33:9" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4787, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "4141:3:9", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4788, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "4141:10:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4791, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4765, + "src": "4172:8:9", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 4792, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4769, + "src": "4182:6:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 4789, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "4153:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4790, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFxUSDAmount", + "nodeType": "MemberAccess", + "referencedDeclaration": 4621, + "src": "4153:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,uint256) view returns (uint256)" + } + }, + "id": 4793, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4153:36:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 4785, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "4112:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4786, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountSpendingAmount", + "nodeType": "MemberAccess", + "referencedDeclaration": 4400, + "src": "4112:28:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 4794, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4112:78:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20736574206163636f756e74207370656e64696e6720616d6f756e742e", + "id": 4795, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4200:47:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7a8790433f99260aa4e38602407436fb82a1411633b4406759e1ebede4d74a18", + "typeString": "literal_string \"Error: Unable to set account spending amount.\"" + }, + "value": "Error: Unable to set account spending amount." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7a8790433f99260aa4e38602407436fb82a1411633b4406759e1ebede4d74a18", + "typeString": "literal_string \"Error: Unable to set account spending amount.\"" + } + ], + "id": 4784, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "4104:7:9", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4796, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4104:144:9", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4797, + "nodeType": "ExpressionStatement", + "src": "4104:144:9" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4801, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4765, + "src": "4282:8:9", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4802, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "4292:3:9", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4803, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "4292:10:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4804, + "name": "merchant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4767, + "src": "4304:8:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4805, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4769, + "src": "4314:6:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 4806, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4773, + "src": "4322:4:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 4799, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "4264:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4800, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "forceTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 3351, + "src": "4264:17:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,address,uint256,bytes memory) returns (bool)" + } + }, + "id": 4807, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4264:63:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207472616e736665722066756e647320746f206163636f756e74", + "id": 4808, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4337:44:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_bbf466ef45b7ce75995210021820dc27f441a75c62bed33c09723390eec8e030", + "typeString": "literal_string \"Error: Unable to transfer funds to account\"" + }, + "value": "Error: Unable to transfer funds to account" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_bbf466ef45b7ce75995210021820dc27f441a75c62bed33c09723390eec8e030", + "typeString": "literal_string \"Error: Unable to transfer funds to account\"" + } + ], + "id": 4798, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "4256:7:9", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4809, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4256:126:9", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4810, + "nodeType": "ExpressionStatement", + "src": "4256:126:9" + }, + { + "assignments": [ + 4812 + ], + "declarations": [ + { + "constant": false, + "id": 4812, + "name": "feeContract", + "nodeType": "VariableDeclaration", + "scope": 4858, + "src": "4391:19:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4811, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4391:7:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 4819, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4816, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5289, + "src": "4440:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4815, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4432:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4817, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4432:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4813, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "4413:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4814, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2736, + "src": "4413:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4818, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4413:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4391:55:9" + }, + { + "condition": { + "argumentTypes": null, + "id": 4820, + "name": "merchantPaysFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4771, + "src": "4554:16:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 4853, + "nodeType": "Block", + "src": "4752:186:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4840, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4765, + "src": "4788:8:9", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4841, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "4798:3:9", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4842, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "4798:10:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4843, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4812, + "src": "4810:11:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4844, + "name": "fees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4779, + "src": "4823:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4847, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4812, + "src": "4843:11:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4845, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "4829:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4846, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMsg", + "nodeType": "MemberAccess", + "referencedDeclaration": 2642, + "src": "4829:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bytes memory)" + } + }, + "id": 4848, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4829:26:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 4838, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "4770:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4839, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "forceTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 3351, + "src": "4770:17:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,address,uint256,bytes memory) returns (bool)" + } + }, + "id": 4849, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4770:86:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207472616e73666572206665657320746f2066656520636f6e74726163742e", + "id": 4850, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4868:49:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f7d9d2b186deae04747f480de0e416c74701ab3e2f8cceccd78101586f4f25fa", + "typeString": "literal_string \"Error: Unable to transfer fees to fee contract.\"" + }, + "value": "Error: Unable to transfer fees to fee contract." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_f7d9d2b186deae04747f480de0e416c74701ab3e2f8cceccd78101586f4f25fa", + "typeString": "literal_string \"Error: Unable to transfer fees to fee contract.\"" + } + ], + "id": 4837, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "4762:7:9", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4851, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4762:156:9", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4852, + "nodeType": "ExpressionStatement", + "src": "4762:156:9" + } + ] + }, + "id": 4854, + "nodeType": "IfStatement", + "src": "4550:388:9", + "trueBody": { + "id": 4836, + "nodeType": "Block", + "src": "4572:174:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4824, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4765, + "src": "4608:8:9", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 4825, + "name": "merchant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4767, + "src": "4618:8:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4826, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4812, + "src": "4628:11:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4827, + "name": "fees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4779, + "src": "4641:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4830, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4812, + "src": "4661:11:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4828, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "4647:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4829, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMsg", + "nodeType": "MemberAccess", + "referencedDeclaration": 2642, + "src": "4647:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bytes memory)" + } + }, + "id": 4831, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4647:26:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 4822, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "4590:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4823, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "forceTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 3351, + "src": "4590:17:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,address,uint256,bytes memory) returns (bool)" + } + }, + "id": 4832, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4590:84:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207472616e73666572206665657320746f2066656520636f6e74726163742e", + "id": 4833, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4686:49:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f7d9d2b186deae04747f480de0e416c74701ab3e2f8cceccd78101586f4f25fa", + "typeString": "literal_string \"Error: Unable to transfer fees to fee contract.\"" + }, + "value": "Error: Unable to transfer fees to fee contract." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_f7d9d2b186deae04747f480de0e416c74701ab3e2f8cceccd78101586f4f25fa", + "typeString": "literal_string \"Error: Unable to transfer fees to fee contract.\"" + } + ], + "id": 4821, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "4582:7:9", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4834, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4582:154:9", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4835, + "nodeType": "ExpressionStatement", + "src": "4582:154:9" + } + ] + } + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4855, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4953:4:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 4777, + "id": 4856, + "nodeType": "Return", + "src": "4946:11:9" + } + ] + }, + "documentation": "@notice Pay method for merchant interface\n@param currency Currency symbol of the token (e.g. USDx, JYPx, GBPx)\n@param merchant Ethereum address of merchant\n@param amount Amount of currency to send to merchant\n@param merchantPaysFees Provide option for merchant to pay the transaction fees\n@param data Optional data to be included when paying the merchant (e.g. item receipt)\n@return { \"success\" : \"Returns true if successfully called from another contract\"}", + "id": 4858, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [], + "name": "pay", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4774, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4765, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 4858, + "src": "3879:15:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 4764, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3879:6:9", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4767, + "name": "merchant", + "nodeType": "VariableDeclaration", + "scope": 4858, + "src": "3896:16:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4766, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3896:7:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4769, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 4858, + "src": "3914:11:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4768, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3914:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4771, + "name": "merchantPaysFees", + "nodeType": "VariableDeclaration", + "scope": 4858, + "src": "3927:21:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4770, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3927:4:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4773, + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 4858, + "src": "3950:10:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4772, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3950:5:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3878:83:9" + }, + "payable": false, + "returnParameters": { + "id": 4777, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4776, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 4858, + "src": "3978:12:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4775, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3978:4:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3977:14:9" + }, + "scope": 4859, + "src": "3866:1098:9", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 4860, + "src": "879:4088:9" + } + ], + "src": "0:4968:9" + }, + "legacyAST": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOMerchant.sol", + "exportedSymbols": { + "TokenIOMerchant": [ + 4859 + ] + }, + "id": 4860, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4624, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:9" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 4625, + "nodeType": "ImportDirective", + "scope": 4860, + "sourceUnit": 185, + "src": "796:23:9", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 4626, + "nodeType": "ImportDirective", + "scope": 4860, + "sourceUnit": 5242, + "src": "820:30:9", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 4627, + "nodeType": "ImportDirective", + "scope": 4860, + "sourceUnit": 4623, + "src": "851:26:9", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 4628, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "907:7:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 4629, + "nodeType": "InheritanceSpecifier", + "src": "907:7:9" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 4859, + "linearizedBaseContracts": [ + 4859, + 184 + ], + "name": "TokenIOMerchant", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 4632, + "libraryName": { + "contractScope": null, + "id": 4630, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4622, + "src": "1011:10:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4622", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "1005:37:9", + "typeName": { + "contractScope": null, + "id": 4631, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1026:15:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 4634, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 4859, + "src": "1047:19:9", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 4633, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1047:15:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 4654, + "nodeType": "Block", + "src": "1265:470:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 4645, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4639, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "1598:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4641, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1645, + "src": "1598:11:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4643, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4636, + "src": "1627:16:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4642, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5241, + "src": "1612:14:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5241_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 4644, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1612:32:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1598:46:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "id": 4646, + "nodeType": "ExpressionStatement", + "src": "1598:46:9" + }, + { + "expression": { + "argumentTypes": null, + "id": 4652, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 4647, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1704:5:9", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 4650, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4648, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "1710:3:9", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4649, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1710:10:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1704:17:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4651, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1724:4:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1704:24:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4653, + "nodeType": "ExpressionStatement", + "src": "1704:24:9" + } + ] + }, + "documentation": "@notice Constructor method for Merchant contract\n@param _storageContract Ethereum Address of TokenIOStorage contract", + "id": 4655, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4637, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4636, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 4655, + "src": "1232:24:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4635, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1232:7:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1231:26:9" + }, + "payable": false, + "returnParameters": { + "id": 4638, + "nodeType": "ParameterList", + "parameters": [], + "src": "1265:0:9" + }, + "scope": 4859, + "src": "1220:515:9", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4674, + "nodeType": "Block", + "src": "2034:168:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4667, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4657, + "src": "2069:11:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4665, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "2050:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4666, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2102, + "src": "2050:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) returns (bool)" + } + }, + "id": 4668, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2050:31:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e74726163742e20456e7375726520636f6e747261637420697320616c6c6f7765642062792073746f7261676520636f6e74726163742e", + "id": 4669, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2091:84:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_9e05a6836836cb77baea52eb421ebbf742058dce5c126f5d3343064b07960fe4", + "typeString": "literal_string \"Error: Unable to set fee contract. Ensure contract is allowed by storage contract.\"" + }, + "value": "Error: Unable to set fee contract. Ensure contract is allowed by storage contract." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_9e05a6836836cb77baea52eb421ebbf742058dce5c126f5d3343064b07960fe4", + "typeString": "literal_string \"Error: Unable to set fee contract. Ensure contract is allowed by storage contract.\"" + } + ], + "id": 4664, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "2042:7:9", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4670, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2042:134:9", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4671, + "nodeType": "ExpressionStatement", + "src": "2042:134:9" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4672, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2191:4:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 4663, + "id": 4673, + "nodeType": "Return", + "src": "2184:11:9" + } + ] + }, + "documentation": "@notice Sets Merchant globals and fee paramters\n@param feeContract Address of fee contract\n@return { \"success\" : \"Returns true if successfully called from another contract\"}", + "id": 4675, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 4660, + "modifierName": { + "argumentTypes": null, + "id": 4659, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "1994:9:9", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "1994:9:9" + } + ], + "name": "setParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4658, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4657, + "name": "feeContract", + "nodeType": "VariableDeclaration", + "scope": 4675, + "src": "1968:19:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4656, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1968:7:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1960:33:9" + }, + "payable": false, + "returnParameters": { + "id": 4663, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4662, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 4675, + "src": "2020:12:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4661, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2020:4:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2019:14:9" + }, + "scope": 4859, + "src": "1942:260:9", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4743, + "nodeType": "Block", + "src": "2587:364:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4695, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5289, + "src": "2653:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4694, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2645:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4696, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2645:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4692, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "2626:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4693, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2736, + "src": "2626:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4697, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2626:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4690, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "2612:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4691, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeBPS", + "nodeType": "MemberAccess", + "referencedDeclaration": 2538, + "src": "2612:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 4698, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2612:48:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4704, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5289, + "src": "2711:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4703, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2703:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4705, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2703:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4701, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "2684:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4702, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2736, + "src": "2684:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4706, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2684:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4699, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "2670:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4700, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMin", + "nodeType": "MemberAccess", + "referencedDeclaration": 2564, + "src": "2670:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 4707, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2670:48:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4713, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5289, + "src": "2769:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4712, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2761:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4714, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2761:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4710, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "2742:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4711, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2736, + "src": "2742:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4715, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2742:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4708, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "2728:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4709, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMax", + "nodeType": "MemberAccess", + "referencedDeclaration": 2590, + "src": "2728:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 4716, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2728:48:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4722, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5289, + "src": "2828:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4721, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2820:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4723, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2820:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4719, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "2801:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4720, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2736, + "src": "2801:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4724, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2801:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4717, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "2786:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4718, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeFlat", + "nodeType": "MemberAccess", + "referencedDeclaration": 2616, + "src": "2786:14:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 4725, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2786:49:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4731, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5289, + "src": "2886:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4730, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2878:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4732, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2878:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4728, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "2859:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4729, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2736, + "src": "2859:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4733, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2859:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4726, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "2845:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4727, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMsg", + "nodeType": "MemberAccess", + "referencedDeclaration": 2642, + "src": "2845:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bytes memory)" + } + }, + "id": 4734, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2845:48:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4738, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5289, + "src": "2930:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4737, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2922:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4739, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2922:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4735, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "2903:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4736, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2736, + "src": "2903:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4740, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2903:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 4741, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2602:342:9", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_address_$", + "typeString": "tuple(uint256,uint256,uint256,uint256,bytes memory,address)" + } + }, + "functionReturnParameters": 4689, + "id": 4742, + "nodeType": "Return", + "src": "2595:349:9" + } + ] + }, + "documentation": "@notice Gets fee parameters\n@return {\n\"bps\":\"Fee amount as a mesuare of basis points\",\n\"min\":\"Minimum fee amount\",\n\"max\":\"Maximum fee amount\",\n\"flat\":\"Flat fee amount\",\n\"contract\":\"Address of fee contract\"\n}", + "id": 4744, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getFeeParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4676, + "nodeType": "ParameterList", + "parameters": [], + "src": "2488:2:9" + }, + "payable": false, + "returnParameters": { + "id": 4689, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4678, + "name": "bps", + "nodeType": "VariableDeclaration", + "scope": 4744, + "src": "2512:8:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4677, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2512:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4680, + "name": "min", + "nodeType": "VariableDeclaration", + "scope": 4744, + "src": "2522:8:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4679, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2522:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4682, + "name": "max", + "nodeType": "VariableDeclaration", + "scope": 4744, + "src": "2532:8:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4681, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2532:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4684, + "name": "flat", + "nodeType": "VariableDeclaration", + "scope": 4744, + "src": "2542:9:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4683, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2542:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4686, + "name": "feeMsg", + "nodeType": "VariableDeclaration", + "scope": 4744, + "src": "2553:12:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4685, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2553:5:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4688, + "name": "feeAccount", + "nodeType": "VariableDeclaration", + "scope": 4744, + "src": "2567:18:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4687, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2567:7:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2511:75:9" + }, + "scope": 4859, + "src": "2467:484:9", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4762, + "nodeType": "Block", + "src": "3250:82:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4756, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5289, + "src": "3310:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4755, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3302:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4757, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3302:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4753, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "3283:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4754, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2736, + "src": "3283:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4758, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3283:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4759, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4746, + "src": "3318:6:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 4751, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "3265:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4752, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "calculateFees", + "nodeType": "MemberAccess", + "referencedDeclaration": 3004, + "src": "3265:17:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) view returns (uint256)" + } + }, + "id": 4760, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3265:60:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4750, + "id": 4761, + "nodeType": "Return", + "src": "3258:67:9" + } + ] + }, + "documentation": "@notice Calculates fee of a given transfer amount\n@param amount Amount to calculcate fee value\n@return {\"fees\": \"Returns the calculated transaction fees based on the fee contract parameters\"}", + "id": 4763, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "calculateFees", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4747, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4746, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 4763, + "src": "3205:11:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4745, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3205:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3204:13:9" + }, + "payable": false, + "returnParameters": { + "id": 4750, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4749, + "name": "fees", + "nodeType": "VariableDeclaration", + "scope": 4763, + "src": "3239:9:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4748, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3239:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3238:11:9" + }, + "scope": 4859, + "src": "3182:150:9", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4857, + "nodeType": "Block", + "src": "3992:972:9", + "statements": [ + { + "assignments": [ + 4779 + ], + "declarations": [ + { + "constant": false, + "id": 4779, + "name": "fees", + "nodeType": "VariableDeclaration", + "scope": 4858, + "src": "4000:9:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4778, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "4000:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 4783, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4781, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4769, + "src": "4026:6:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4780, + "name": "calculateFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4763, + "src": "4012:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view returns (uint256)" + } + }, + "id": 4782, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4012:21:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4000:33:9" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4787, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "4141:3:9", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4788, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "4141:10:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4791, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4765, + "src": "4172:8:9", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 4792, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4769, + "src": "4182:6:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 4789, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "4153:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4790, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFxUSDAmount", + "nodeType": "MemberAccess", + "referencedDeclaration": 4621, + "src": "4153:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,uint256) view returns (uint256)" + } + }, + "id": 4793, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4153:36:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 4785, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "4112:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4786, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountSpendingAmount", + "nodeType": "MemberAccess", + "referencedDeclaration": 4400, + "src": "4112:28:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 4794, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4112:78:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20736574206163636f756e74207370656e64696e6720616d6f756e742e", + "id": 4795, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4200:47:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7a8790433f99260aa4e38602407436fb82a1411633b4406759e1ebede4d74a18", + "typeString": "literal_string \"Error: Unable to set account spending amount.\"" + }, + "value": "Error: Unable to set account spending amount." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7a8790433f99260aa4e38602407436fb82a1411633b4406759e1ebede4d74a18", + "typeString": "literal_string \"Error: Unable to set account spending amount.\"" + } + ], + "id": 4784, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "4104:7:9", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4796, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4104:144:9", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4797, + "nodeType": "ExpressionStatement", + "src": "4104:144:9" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4801, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4765, + "src": "4282:8:9", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4802, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "4292:3:9", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4803, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "4292:10:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4804, + "name": "merchant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4767, + "src": "4304:8:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4805, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4769, + "src": "4314:6:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 4806, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4773, + "src": "4322:4:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 4799, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "4264:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4800, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "forceTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 3351, + "src": "4264:17:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,address,uint256,bytes memory) returns (bool)" + } + }, + "id": 4807, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4264:63:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207472616e736665722066756e647320746f206163636f756e74", + "id": 4808, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4337:44:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_bbf466ef45b7ce75995210021820dc27f441a75c62bed33c09723390eec8e030", + "typeString": "literal_string \"Error: Unable to transfer funds to account\"" + }, + "value": "Error: Unable to transfer funds to account" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_bbf466ef45b7ce75995210021820dc27f441a75c62bed33c09723390eec8e030", + "typeString": "literal_string \"Error: Unable to transfer funds to account\"" + } + ], + "id": 4798, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "4256:7:9", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4809, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4256:126:9", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4810, + "nodeType": "ExpressionStatement", + "src": "4256:126:9" + }, + { + "assignments": [ + 4812 + ], + "declarations": [ + { + "constant": false, + "id": 4812, + "name": "feeContract", + "nodeType": "VariableDeclaration", + "scope": 4858, + "src": "4391:19:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4811, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4391:7:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 4819, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4816, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5289, + "src": "4440:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4859", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4815, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4432:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4817, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4432:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4813, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "4413:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4814, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2736, + "src": "4413:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4818, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4413:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4391:55:9" + }, + { + "condition": { + "argumentTypes": null, + "id": 4820, + "name": "merchantPaysFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4771, + "src": "4554:16:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 4853, + "nodeType": "Block", + "src": "4752:186:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4840, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4765, + "src": "4788:8:9", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4841, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "4798:3:9", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4842, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "4798:10:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4843, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4812, + "src": "4810:11:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4844, + "name": "fees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4779, + "src": "4823:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4847, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4812, + "src": "4843:11:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4845, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "4829:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4846, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMsg", + "nodeType": "MemberAccess", + "referencedDeclaration": 2642, + "src": "4829:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bytes memory)" + } + }, + "id": 4848, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4829:26:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 4838, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "4770:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4839, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "forceTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 3351, + "src": "4770:17:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,address,uint256,bytes memory) returns (bool)" + } + }, + "id": 4849, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4770:86:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207472616e73666572206665657320746f2066656520636f6e74726163742e", + "id": 4850, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4868:49:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f7d9d2b186deae04747f480de0e416c74701ab3e2f8cceccd78101586f4f25fa", + "typeString": "literal_string \"Error: Unable to transfer fees to fee contract.\"" + }, + "value": "Error: Unable to transfer fees to fee contract." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_f7d9d2b186deae04747f480de0e416c74701ab3e2f8cceccd78101586f4f25fa", + "typeString": "literal_string \"Error: Unable to transfer fees to fee contract.\"" + } + ], + "id": 4837, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "4762:7:9", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4851, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4762:156:9", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4852, + "nodeType": "ExpressionStatement", + "src": "4762:156:9" + } + ] + }, + "id": 4854, + "nodeType": "IfStatement", + "src": "4550:388:9", + "trueBody": { + "id": 4836, + "nodeType": "Block", + "src": "4572:174:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4824, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4765, + "src": "4608:8:9", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 4825, + "name": "merchant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4767, + "src": "4618:8:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4826, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4812, + "src": "4628:11:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4827, + "name": "fees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4779, + "src": "4641:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4830, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4812, + "src": "4661:11:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4828, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "4647:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4829, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMsg", + "nodeType": "MemberAccess", + "referencedDeclaration": 2642, + "src": "4647:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_address_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bytes memory)" + } + }, + "id": 4831, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4647:26:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 4822, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "4590:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4823, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "forceTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 3351, + "src": "4590:17:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,address,uint256,bytes memory) returns (bool)" + } + }, + "id": 4832, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4590:84:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207472616e73666572206665657320746f2066656520636f6e74726163742e", + "id": 4833, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4686:49:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f7d9d2b186deae04747f480de0e416c74701ab3e2f8cceccd78101586f4f25fa", + "typeString": "literal_string \"Error: Unable to transfer fees to fee contract.\"" + }, + "value": "Error: Unable to transfer fees to fee contract." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_f7d9d2b186deae04747f480de0e416c74701ab3e2f8cceccd78101586f4f25fa", + "typeString": "literal_string \"Error: Unable to transfer fees to fee contract.\"" + } + ], + "id": 4821, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5259, + 5260 + ], + "referencedDeclaration": 5260, + "src": "4582:7:9", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4834, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4582:154:9", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4835, + "nodeType": "ExpressionStatement", + "src": "4582:154:9" + } + ] + } + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4855, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4953:4:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 4777, + "id": 4856, + "nodeType": "Return", + "src": "4946:11:9" + } + ] + }, + "documentation": "@notice Pay method for merchant interface\n@param currency Currency symbol of the token (e.g. USDx, JYPx, GBPx)\n@param merchant Ethereum address of merchant\n@param amount Amount of currency to send to merchant\n@param merchantPaysFees Provide option for merchant to pay the transaction fees\n@param data Optional data to be included when paying the merchant (e.g. item receipt)\n@return { \"success\" : \"Returns true if successfully called from another contract\"}", + "id": 4858, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [], + "name": "pay", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4774, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4765, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 4858, + "src": "3879:15:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 4764, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3879:6:9", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4767, + "name": "merchant", + "nodeType": "VariableDeclaration", + "scope": 4858, + "src": "3896:16:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4766, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3896:7:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4769, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 4858, + "src": "3914:11:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4768, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3914:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4771, + "name": "merchantPaysFees", + "nodeType": "VariableDeclaration", + "scope": 4858, + "src": "3927:21:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4770, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3927:4:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4773, + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 4858, + "src": "3950:10:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4772, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3950:5:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3878:83:9" + }, + "payable": false, + "returnParameters": { + "id": 4777, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4776, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 4858, + "src": "3978:12:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4775, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3978:4:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3977:14:9" + }, + "scope": 4859, + "src": "3866:1098:9", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 4860, + "src": "879:4088:9" + } + ], + "src": "0:4968:9" + }, + "compiler": { + "name": "solc", + "version": "0.4.24+commit.e67f0147.Emscripten.clang" + }, + "networks": { + "1": { + "events": {}, + "links": {}, + "address": "0x07fec31eec2885569f7a42cf116377fc27801941", + "transactionHash": "0xd4a780d61a0dd88d0523d204314d50fc4b301df062ec042a59cfcb71550d4a41" + } + }, + "schemaVersion": "2.0.1", + "updatedAt": "2018-09-18T18:57:45.614Z" +} \ No newline at end of file diff --git a/deployed/mainnet-deprecated/TokenIONameSpace.json b/deployed/mainnet-deprecated/TokenIONameSpace.json new file mode 100644 index 0000000..7c714a8 --- /dev/null +++ b/deployed/mainnet-deprecated/TokenIONameSpace.json @@ -0,0 +1,1297 @@ +{ + "contractName": "TokenIONameSpace", + "abi": [ + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "allowOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "removeOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "", + "type": "address" + } + ], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "name": "_storageContract", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "AllowOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "RevokeOwnership", + "type": "event" + }, + { + "constant": true, + "inputs": [ + { + "name": "currency", + "type": "string" + } + ], + "name": "getTokenNameSpace", + "outputs": [ + { + "name": "contractAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b506040516020806106eb833981016040908152905133600090815260208190529182208054600160ff19918216811783558054600160a060020a031916600160a060020a03909416939093178355815416909117905561067590819061007690396000f30060806040526004361061006c5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663394387b181146100715780634bbc142c146100e6578063666a34271461011b578063666e1b391461013c578063f2fde38b1461015d575b600080fd5b34801561007d57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100ca94369492936024939284019190819084018382808284375094975061017e9650505050505050565b60408051600160a060020a039092168252519081900360200190f35b3480156100f257600080fd5b50610107600160a060020a0360043516610197565b604080519115158252519081900360200190f35b34801561012757600080fd5b50610107600160a060020a0360043516610277565b34801561014857600080fd5b50610107600160a060020a0360043516610354565b34801561016957600080fd5b50610107600160a060020a0360043516610369565b600061019160018363ffffffff6104c716565b92915050565b3360009081526020819052604081205460ff161515610226576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b3360009081526020819052604081205460ff161515610306576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b3360009081526020819052604081205460ff1615156103f8576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a0382161515610458576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b6000808260405160200180807f746f6b656e2e6e616d6573706163650000000000000000000000000000000000815250600f0182805190602001908083835b602083106105255780518252601f199092019160209182019101610506565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083106105885780518252601f199092019160209182019101610569565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506040513d602081101561063f57600080fd5b50519493505050505600a165627a7a72305820caf5416bf0198d0d856fd3926172e4df1b076ab6fd48a064563f8b56b31177a00029", + "deployedBytecode": "0x60806040526004361061006c5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663394387b181146100715780634bbc142c146100e6578063666a34271461011b578063666e1b391461013c578063f2fde38b1461015d575b600080fd5b34801561007d57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100ca94369492936024939284019190819084018382808284375094975061017e9650505050505050565b60408051600160a060020a039092168252519081900360200190f35b3480156100f257600080fd5b50610107600160a060020a0360043516610197565b604080519115158252519081900360200190f35b34801561012757600080fd5b50610107600160a060020a0360043516610277565b34801561014857600080fd5b50610107600160a060020a0360043516610354565b34801561016957600080fd5b50610107600160a060020a0360043516610369565b600061019160018363ffffffff6104c716565b92915050565b3360009081526020819052604081205460ff161515610226576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b3360009081526020819052604081205460ff161515610306576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b3360009081526020819052604081205460ff1615156103f8576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a0382161515610458576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b6000808260405160200180807f746f6b656e2e6e616d6573706163650000000000000000000000000000000000815250600f0182805190602001908083835b602083106105255780518252601f199092019160209182019101610506565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083106105885780518252601f199092019160209182019101610569565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506040513d602081101561063f57600080fd5b50519493505050505600a165627a7a72305820caf5416bf0198d0d856fd3926172e4df1b076ab6fd48a064563f8b56b31177a00029", + "sourceMap": "1076:1347:10:-;;;1414:474;8:9:-1;5:2;;;30:1;27;20:12;5:2;1414:474:10;;;;;;;;;;;;;;;;1117:10:1;1111:5;:17;;;1414:474:10;1111:17:1;;;;;;:24;;1131:4;-1:-1:-1;;1111:24:1;;;;;;;1758:46:10;;-1:-1:-1;;;;;;1758:46:10;-1:-1:-1;;;;;1758:46:10;;;;;;;;;1858:24;;;;;;;;1076:1347;;;;;;;;", + "deployedSourceMap": "1076:1347:10:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2275:145;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2275:145:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2275:145:10;;-1:-1:-1;2275:145:10;;-1:-1:-1;;;;;;;2275:145:10;;;;;-1:-1:-1;;;;;2275:145:10;;;;;;;;;;;;;;2127:185:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2127:185:1;-1:-1:-1;;;;;2127:185:1;;;;;;;;;;;;;;;;;;;;;;;2571:188;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2571:188:1;-1:-1:-1;;;;;2571:188:1;;;;;725:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;725:37:1;-1:-1:-1;;;;;725:37:1;;;;;1589:291;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1589:291:1;-1:-1:-1;;;;;1589:291:1;;;;;2275:145:10;2340:23;2382:31;:3;2404:8;2382:31;:21;:31;:::i;:::-;2375:38;2275:145;-1:-1:-1;;2275:145:10:o;2127:185:1:-;1261:10;2201:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2221:21:1;;:5;:21;;;;;;;;;;;:28;;-1:-1:-1;;2221:28:1;2245:4;2221:28;;;2260:30;;;2221:5;2260:30;-1:-1:-1;2303:4:1;2127:185;;;:::o;2571:188::-;1261:10;2646:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2666:21:1;;2690:5;2666:21;;;;;;;;;;;:29;;-1:-1:-1;;2666:29:1;;;2706:31;;;2690:5;2706:31;-1:-1:-1;2750:4:1;2571:188;;;:::o;725:37::-;;;;;;;;;;;;;;;;:::o;1589:291::-;1261:10;1660:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1688:22:1;;;;1680:66;;;;;-1:-1:-1;;;;;1680:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1757:42;;-1:-1:-1;;;;;1757:42:1;;;1778:10;;1757:42;;;;;-1:-1:-1;;;;;;1805:15:1;:5;:15;;;;;;;;;;;:22;;1823:4;-1:-1:-1;;1805:22:1;;;;;;;;1839:10;1833:17;;;;;;:25;;;;;;;1823:4;1589:291::o;18424:231:8:-;18510:23;18541:10;18600:8;18564:45;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;18564:45:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;18564:45:8;;;18554:56;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;18554:56:8;;;;;;;;;;;;18623:12;;:27;;;;;;;;;;;18554:56;;-1:-1:-1;;;;;;18623:12:8;;;;-1:-1:-1;18623:23:8;;-1:-1:-1;18623:27:8;;;;;263:2:-1;;-1:-1;18623:27:8;;;;;;;-1:-1:-1;18623:12:8;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;18623:27:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18623:27:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18623:27:8;;18424:231;-1:-1:-1;;;;18424:231:8:o", + "source": "pragma solidity 0.4.24;\n\n\n/**\nCOPYRIGHT 2018 Token, Inc.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\n@title Token Name Space Interface for Token, Inc. Smart Money System\n\n@author Ryan Tate , Sean Pollock \n\n@notice Contract uses generalized storage contract, `TokenIOStorage`, for\nupgradeability of interface contract.\n\n@dev In the event that the main contract becomes deprecated, the upgraded contract\nwill be set as the owner of this contract, and use this contract's storage to\nmaintain data consistency between contract.\n\n*/\n\nimport \"./Ownable.sol\";\nimport \"./TokenIOStorage.sol\";\nimport \"./TokenIOLib.sol\";\n\ncontract TokenIONameSpace is Ownable {\n\n /// @dev Set reference to TokenIOLib interface which proxies to TokenIOStorage\n using TokenIOLib for TokenIOLib.Data;\n TokenIOLib.Data lib;\n\n /**\n \t* @notice Constructor method for TokenIONameSpace contract\n \t* @param _storageContract address of TokenIOStorage contract\n \t*/\n \tconstructor(address _storageContract) public {\n \t\t\t/// @dev Set the storage contract for the interface\n \t\t\t/// @dev NOTE: This contract will be unable to use the storage constract until\n \t\t\t/// @dev contract address is authorized with the storage contract\n \t\t\t/// @dev Once authorized, Use the `setParams` method to set storage values\n \t\t\tlib.Storage = TokenIOStorage(_storageContract);\n\n \t\t\t/// @dev set owner to contract initiator\n \t\t\towner[msg.sender] = true;\n \t}\n\n /**\n * @notice Returns the address of the contract associated with the currency symbol\n * @notice This method may be deprecated or refactored to allow for multiple interfaces\n * @param currency string Currency symbol of the token (e.g. USDx, JYPx, GBPx)\n * @return {\"contractAddress\": \"Returns the token contract address associated with the currency\"}\n */\n function getTokenNameSpace(string currency) public view returns (address contractAddress) {\n return lib.getTokenNameSpace(currency);\n }\n\n}\n", + "sourcePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIONameSpace.sol", + "ast": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIONameSpace.sol", + "exportedSymbols": { + "TokenIONameSpace": [ + 4906 + ] + }, + "id": 4907, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4861, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:10" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 4862, + "nodeType": "ImportDirective", + "scope": 4907, + "sourceUnit": 185, + "src": "993:23:10", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 4863, + "nodeType": "ImportDirective", + "scope": 4907, + "sourceUnit": 5242, + "src": "1017:30:10", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 4864, + "nodeType": "ImportDirective", + "scope": 4907, + "sourceUnit": 4623, + "src": "1048:26:10", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 4865, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "1105:7:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 4866, + "nodeType": "InheritanceSpecifier", + "src": "1105:7:10" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 4906, + "linearizedBaseContracts": [ + 4906, + 184 + ], + "name": "TokenIONameSpace", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 4869, + "libraryName": { + "contractScope": null, + "id": 4867, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4622, + "src": "1209:10:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4622", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "1203:37:10", + "typeName": { + "contractScope": null, + "id": 4868, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1224:15:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 4871, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 4906, + "src": "1245:19:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 4870, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1245:15:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 4891, + "nodeType": "Block", + "src": "1459:429:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 4882, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4876, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4871, + "src": "1758:3:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4878, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1645, + "src": "1758:11:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4880, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4873, + "src": "1787:16:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4879, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5241, + "src": "1772:14:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5241_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 4881, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1772:32:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1758:46:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "id": 4883, + "nodeType": "ExpressionStatement", + "src": "1758:46:10" + }, + { + "expression": { + "argumentTypes": null, + "id": 4889, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 4884, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1858:5:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 4887, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4885, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "1864:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4886, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1864:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1858:17:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4888, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1878:4:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1858:24:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4890, + "nodeType": "ExpressionStatement", + "src": "1858:24:10" + } + ] + }, + "documentation": "@notice Constructor method for TokenIONameSpace contract\n@param _storageContract address of TokenIOStorage contract", + "id": 4892, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4874, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4873, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 4892, + "src": "1426:24:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4872, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1426:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1425:26:10" + }, + "payable": false, + "returnParameters": { + "id": 4875, + "nodeType": "ParameterList", + "parameters": [], + "src": "1459:0:10" + }, + "scope": 4906, + "src": "1414:474:10", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4904, + "nodeType": "Block", + "src": "2365:55:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4901, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4894, + "src": "2404:8:10", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 4899, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4871, + "src": "2382:3:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4900, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenNameSpace", + "nodeType": "MemberAccess", + "referencedDeclaration": 2382, + "src": "2382:21:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$returns$_t_address_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) view returns (address)" + } + }, + "id": 4902, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2382:31:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 4898, + "id": 4903, + "nodeType": "Return", + "src": "2375:38:10" + } + ] + }, + "documentation": "@notice Returns the address of the contract associated with the currency symbol\n@notice This method may be deprecated or refactored to allow for multiple interfaces\n@param currency string Currency symbol of the token (e.g. USDx, JYPx, GBPx)\n@return {\"contractAddress\": \"Returns the token contract address associated with the currency\"}", + "id": 4905, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getTokenNameSpace", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4895, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4894, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 4905, + "src": "2302:15:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 4893, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2302:6:10", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2301:17:10" + }, + "payable": false, + "returnParameters": { + "id": 4898, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4897, + "name": "contractAddress", + "nodeType": "VariableDeclaration", + "scope": 4905, + "src": "2340:23:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4896, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2340:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2339:25:10" + }, + "scope": 4906, + "src": "2275:145:10", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 4907, + "src": "1076:1347:10" + } + ], + "src": "0:2424:10" + }, + "legacyAST": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIONameSpace.sol", + "exportedSymbols": { + "TokenIONameSpace": [ + 4906 + ] + }, + "id": 4907, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4861, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:10" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 4862, + "nodeType": "ImportDirective", + "scope": 4907, + "sourceUnit": 185, + "src": "993:23:10", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 4863, + "nodeType": "ImportDirective", + "scope": 4907, + "sourceUnit": 5242, + "src": "1017:30:10", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 4864, + "nodeType": "ImportDirective", + "scope": 4907, + "sourceUnit": 4623, + "src": "1048:26:10", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 4865, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "1105:7:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 4866, + "nodeType": "InheritanceSpecifier", + "src": "1105:7:10" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 4906, + "linearizedBaseContracts": [ + 4906, + 184 + ], + "name": "TokenIONameSpace", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 4869, + "libraryName": { + "contractScope": null, + "id": 4867, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4622, + "src": "1209:10:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4622", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "1203:37:10", + "typeName": { + "contractScope": null, + "id": 4868, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1224:15:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 4871, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 4906, + "src": "1245:19:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 4870, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1646, + "src": "1245:15:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 4891, + "nodeType": "Block", + "src": "1459:429:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 4882, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4876, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4871, + "src": "1758:3:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4878, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1645, + "src": "1758:11:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4880, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4873, + "src": "1787:16:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4879, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5241, + "src": "1772:14:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5241_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 4881, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1772:32:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1758:46:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5241", + "typeString": "contract TokenIOStorage" + } + }, + "id": 4883, + "nodeType": "ExpressionStatement", + "src": "1758:46:10" + }, + { + "expression": { + "argumentTypes": null, + "id": 4889, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 4884, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1858:5:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 4887, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4885, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "1864:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4886, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1864:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1858:17:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4888, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1878:4:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1858:24:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4890, + "nodeType": "ExpressionStatement", + "src": "1858:24:10" + } + ] + }, + "documentation": "@notice Constructor method for TokenIONameSpace contract\n@param _storageContract address of TokenIOStorage contract", + "id": 4892, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4874, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4873, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 4892, + "src": "1426:24:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4872, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1426:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1425:26:10" + }, + "payable": false, + "returnParameters": { + "id": 4875, + "nodeType": "ParameterList", + "parameters": [], + "src": "1459:0:10" + }, + "scope": 4906, + "src": "1414:474:10", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4904, + "nodeType": "Block", + "src": "2365:55:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4901, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4894, + "src": "2404:8:10", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 4899, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4871, + "src": "2382:3:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1646_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4900, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenNameSpace", + "nodeType": "MemberAccess", + "referencedDeclaration": 2382, + "src": "2382:21:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1646_storage_ptr_$_t_string_memory_ptr_$returns$_t_address_$bound_to$_t_struct$_Data_$1646_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) view returns (address)" + } + }, + "id": 4902, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2382:31:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 4898, + "id": 4903, + "nodeType": "Return", + "src": "2375:38:10" + } + ] + }, + "documentation": "@notice Returns the address of the contract associated with the currency symbol\n@notice This method may be deprecated or refactored to allow for multiple interfaces\n@param currency string Currency symbol of the token (e.g. USDx, JYPx, GBPx)\n@return {\"contractAddress\": \"Returns the token contract address associated with the currency\"}", + "id": 4905, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getTokenNameSpace", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4895, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4894, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 4905, + "src": "2302:15:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 4893, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2302:6:10", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2301:17:10" + }, + "payable": false, + "returnParameters": { + "id": 4898, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4897, + "name": "contractAddress", + "nodeType": "VariableDeclaration", + "scope": 4905, + "src": "2340:23:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4896, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2340:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2339:25:10" + }, + "scope": 4906, + "src": "2275:145:10", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 4907, + "src": "1076:1347:10" + } + ], + "src": "0:2424:10" + }, + "compiler": { + "name": "solc", + "version": "0.4.24+commit.e67f0147.Emscripten.clang" + }, + "networks": {}, + "schemaVersion": "2.0.1", + "updatedAt": "2018-09-18T18:14:09.180Z" +} \ No newline at end of file diff --git a/deployed/mainnet-deprecated/TokenIOStorage.json b/deployed/mainnet-deprecated/TokenIOStorage.json new file mode 100644 index 0000000..8701020 --- /dev/null +++ b/deployed/mainnet-deprecated/TokenIOStorage.json @@ -0,0 +1,8232 @@ +{ + "contractName": "TokenIOStorage", + "abi": [ + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "allowOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "removeOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "", + "type": "address" + } + ], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "AllowOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "RevokeOwnership", + "type": "event" + }, + { + "constant": false, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + }, + { + "name": "_value", + "type": "address" + } + ], + "name": "setAddress", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "setUint", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + }, + { + "name": "_value", + "type": "string" + } + ], + "name": "setString", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + }, + { + "name": "_value", + "type": "bytes" + } + ], + "name": "setBytes", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + }, + { + "name": "_value", + "type": "bool" + } + ], + "name": "setBool", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + }, + { + "name": "_value", + "type": "int256" + } + ], + "name": "setInt", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + } + ], + "name": "deleteAddress", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + } + ], + "name": "deleteUint", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + } + ], + "name": "deleteString", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + } + ], + "name": "deleteBytes", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + } + ], + "name": "deleteBool", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + } + ], + "name": "deleteInt", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + } + ], + "name": "getAddress", + "outputs": [ + { + "name": "_value", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + } + ], + "name": "getUint", + "outputs": [ + { + "name": "_value", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + } + ], + "name": "getString", + "outputs": [ + { + "name": "_value", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + } + ], + "name": "getBytes", + "outputs": [ + { + "name": "_value", + "type": "bytes" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + } + ], + "name": "getBool", + "outputs": [ + { + "name": "_value", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + } + ], + "name": "getInt", + "outputs": [ + { + "name": "_value", + "type": "int256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50336000908152602081905260409020805460ff1990811660019081179091161790556110b2806100426000396000f3006080604052600436106101275763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630e14a376811461012c57806321f8a721146101585780632c62ff2d1461018c5780632e28d084146101a45780633e49bed0146102025780634bbc142c1461021d578063616b59f61461023e578063666a342714610256578063666e1b39146102775780636e899550146102985780637ae1cfca146102f65780638c1600951461030e578063986e791a14610326578063abfdcced146103b3578063bd02d0f5146103d0578063c031a180146103fa578063ca446dd914610412578063dc97d96214610436578063e2a4853a1461044e578063e2b202bf14610469578063f2fde38b14610481578063f6bb3cc4146104a2575b600080fd5b34801561013857600080fd5b506101446004356104ba565b604080519115158252519081900360200190f35b34801561016457600080fd5b50610170600435610554565b60408051600160a060020a039092168252519081900360200190f35b34801561019857600080fd5b5061014460043561056f565b3480156101b057600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526101449583359536956044949193909101919081908401838280828437509497506105f69650505050505050565b34801561020e57600080fd5b5061014460043560243561068a565b34801561022957600080fd5b50610144600160a060020a036004351661070b565b34801561024a57600080fd5b506101446004356107c7565b34801561026257600080fd5b50610144600160a060020a0360043516610851565b34801561028357600080fd5b50610144600160a060020a036004351661090a565b3480156102a457600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261014495833595369560449491939091019190819084018382808284375094975061091f9650505050505050565b34801561030257600080fd5b506101446004356109a9565b34801561031a57600080fd5b506101446004356109be565b34801561033257600080fd5b5061033e600435610a3e565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610378578181015183820152602001610360565b50505050905090810190601f1680156103a55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103bf57600080fd5b506101446004356024351515610add565b3480156103dc57600080fd5b506103e8600435610b6c565b60408051918252519081900360200190f35b34801561040657600080fd5b5061033e600435610b7e565b34801561041e57600080fd5b50610144600435600160a060020a0360243516610be8565b34801561044257600080fd5b506103e8600435610c92565b34801561045a57600080fd5b50610144600435602435610ca4565b34801561047557600080fd5b50610144600435610d25565b34801561048d57600080fd5b50610144600160a060020a0360043516610da8565b3480156104ae57600080fd5b50610144600435610ee2565b3360009081526020819052604081205460ff161515610525576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b506000908152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff19169055600190565b600090815260036020526040902054600160a060020a031690565b3360009081526020819052604081205460ff1615156105da576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b506000908152600560205260409020805460ff19169055600190565b3360009081526020819052604081205460ff161515610661576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b6000838152600460209081526040909120835161068092850190610f64565b5060019392505050565b3360009081526020819052604081205460ff1615156106f5576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b5060009182526006602052604090912055600190565b3360009081526020819052604081205460ff161515610776576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b3360009081526020819052604081205460ff161515610832576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b600082815260046020526040812061084991610fe2565b506001919050565b3360009081526020819052604081205460ff1615156108bc576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b3360009081526020819052604081205460ff16151561098a576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b6000838152600260209081526040909120835161068092850190610f64565b60009081526005602052604090205460ff1690565b3360009081526020819052604081205460ff161515610a29576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b50600090815260066020526040812055600190565b600081815260026020818152604092839020805484516000196001831615610100020190911693909304601f81018390048302840183019094528383526060939091830182828015610ad15780601f10610aa657610100808354040283529160200191610ad1565b820191906000526020600020905b815481529060010190602001808311610ab457829003601f168201915b50505050509050919050565b3360009081526020819052604081205460ff161515610b48576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b50600091825260056020526040909120805460ff1916911515919091179055600190565b60009081526001602052604090205490565b60008181526004602090815260409182902080548351601f6002610100600185161502600019019093169290920491820184900484028101840190945280845260609392830182828015610ad15780601f10610aa657610100808354040283529160200191610ad1565b3360009081526020819052604081205460ff161515610c53576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b5060008281526003602052604090208054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116179055600192915050565b60009081526006602052604090205490565b3360009081526020819052604081205460ff161515610d0f576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b5060009182526001602081905260409092205590565b3360009081526020819052604081205460ff161515610d90576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b50600090815260016020819052604082209190915590565b3360009081526020819052604081205460ff161515610e13576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b600160a060020a0382161515610e73576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b3360009081526020819052604081205460ff161515610f4d576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b600082815260026020526040812061084991610fe2565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610fa557805160ff1916838001178555610fd2565b82800160010185558215610fd2579182015b82811115610fd2578251825591602001919060010190610fb7565b50610fde929150611029565b5090565b50805460018160011615610100020316600290046000825580601f106110085750611026565b601f0160209004906000526020600020908101906110269190611029565b50565b61104391905b80821115610fde576000815560010161102f565b90560020616c6c6f7765642062792074686520636f6e74726163742e000000000000004572726f723a205472616e73616374696f6e2073656e646572206973206e6f74a165627a7a72305820056cfbd62230040e00d890ea4ea35df860cfed498efc9f987cffb80ffc91f0c50029", + "deployedBytecode": "0x6080604052600436106101275763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630e14a376811461012c57806321f8a721146101585780632c62ff2d1461018c5780632e28d084146101a45780633e49bed0146102025780634bbc142c1461021d578063616b59f61461023e578063666a342714610256578063666e1b39146102775780636e899550146102985780637ae1cfca146102f65780638c1600951461030e578063986e791a14610326578063abfdcced146103b3578063bd02d0f5146103d0578063c031a180146103fa578063ca446dd914610412578063dc97d96214610436578063e2a4853a1461044e578063e2b202bf14610469578063f2fde38b14610481578063f6bb3cc4146104a2575b600080fd5b34801561013857600080fd5b506101446004356104ba565b604080519115158252519081900360200190f35b34801561016457600080fd5b50610170600435610554565b60408051600160a060020a039092168252519081900360200190f35b34801561019857600080fd5b5061014460043561056f565b3480156101b057600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526101449583359536956044949193909101919081908401838280828437509497506105f69650505050505050565b34801561020e57600080fd5b5061014460043560243561068a565b34801561022957600080fd5b50610144600160a060020a036004351661070b565b34801561024a57600080fd5b506101446004356107c7565b34801561026257600080fd5b50610144600160a060020a0360043516610851565b34801561028357600080fd5b50610144600160a060020a036004351661090a565b3480156102a457600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261014495833595369560449491939091019190819084018382808284375094975061091f9650505050505050565b34801561030257600080fd5b506101446004356109a9565b34801561031a57600080fd5b506101446004356109be565b34801561033257600080fd5b5061033e600435610a3e565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610378578181015183820152602001610360565b50505050905090810190601f1680156103a55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103bf57600080fd5b506101446004356024351515610add565b3480156103dc57600080fd5b506103e8600435610b6c565b60408051918252519081900360200190f35b34801561040657600080fd5b5061033e600435610b7e565b34801561041e57600080fd5b50610144600435600160a060020a0360243516610be8565b34801561044257600080fd5b506103e8600435610c92565b34801561045a57600080fd5b50610144600435602435610ca4565b34801561047557600080fd5b50610144600435610d25565b34801561048d57600080fd5b50610144600160a060020a0360043516610da8565b3480156104ae57600080fd5b50610144600435610ee2565b3360009081526020819052604081205460ff161515610525576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b506000908152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff19169055600190565b600090815260036020526040902054600160a060020a031690565b3360009081526020819052604081205460ff1615156105da576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b506000908152600560205260409020805460ff19169055600190565b3360009081526020819052604081205460ff161515610661576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b6000838152600460209081526040909120835161068092850190610f64565b5060019392505050565b3360009081526020819052604081205460ff1615156106f5576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b5060009182526006602052604090912055600190565b3360009081526020819052604081205460ff161515610776576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b3360009081526020819052604081205460ff161515610832576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b600082815260046020526040812061084991610fe2565b506001919050565b3360009081526020819052604081205460ff1615156108bc576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b3360009081526020819052604081205460ff16151561098a576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b6000838152600260209081526040909120835161068092850190610f64565b60009081526005602052604090205460ff1690565b3360009081526020819052604081205460ff161515610a29576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b50600090815260066020526040812055600190565b600081815260026020818152604092839020805484516000196001831615610100020190911693909304601f81018390048302840183019094528383526060939091830182828015610ad15780601f10610aa657610100808354040283529160200191610ad1565b820191906000526020600020905b815481529060010190602001808311610ab457829003601f168201915b50505050509050919050565b3360009081526020819052604081205460ff161515610b48576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b50600091825260056020526040909120805460ff1916911515919091179055600190565b60009081526001602052604090205490565b60008181526004602090815260409182902080548351601f6002610100600185161502600019019093169290920491820184900484028101840190945280845260609392830182828015610ad15780601f10610aa657610100808354040283529160200191610ad1565b3360009081526020819052604081205460ff161515610c53576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b5060008281526003602052604090208054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116179055600192915050565b60009081526006602052604090205490565b3360009081526020819052604081205460ff161515610d0f576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b5060009182526001602081905260409092205590565b3360009081526020819052604081205460ff161515610d90576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b50600090815260016020819052604082209190915590565b3360009081526020819052604081205460ff161515610e13576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b600160a060020a0382161515610e73576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b3360009081526020819052604081205460ff161515610f4d576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b600082815260026020526040812061084991610fe2565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610fa557805160ff1916838001178555610fd2565b82800160010185558215610fd2579182015b82811115610fd2578251825591602001919060010190610fb7565b50610fde929150611029565b5090565b50805460018160011615610100020316600290046000825580601f106110085750611026565b601f0160209004906000526020600020908101906110269190611029565b50565b61104391905b80821115610fde576000815560010161102f565b90560020616c6c6f7765642062792074686520636f6e74726163742e000000000000004572726f723a205472616e73616374696f6e2073656e646572206973206e6f74a165627a7a72305820056cfbd62230040e00d890ea4ea35df860cfed498efc9f987cffb80ffc91f0c50029", + "sourceMap": "1972:8029:11:-;;;2669:207;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1117:10:1;1111:5;:17;;;;;;;;;;:24;;-1:-1:-1;;1111:24:1;;;1131:4;1111:24;;;2845::11;;;;;;1972:8029;;;;;;", + "deployedSourceMap": "1972:8029:11:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5901:142;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5901:142:11;;;;;;;;;;;;;;;;;;;;;;;8203:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8203:115:11;;;;;;;;;-1:-1:-1;;;;;8203:115:11;;;;;;;;;;;;;;7428:136;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7428:136:11;;;;;4517:151;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4517:151:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4517:151:11;;-1:-1:-1;4517:151:11;;-1:-1:-1;;;;;;;4517:151:11;5384:145;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5384:145:11;;;;;;;2127:185:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2127:185:1;-1:-1:-1;;;;;2127:185:1;;;;;7048:138:11;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7048:138:11;;;;;2571:188:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2571:188:1;-1:-1:-1;;;;;2571:188:1;;;;;725:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;725:37:1;-1:-1:-1;;;;;725:37:1;;;;;4076:154:11;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4076:154:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4076:154:11;;-1:-1:-1;4076:154:11;;-1:-1:-1;;;;;;;4076:154:11;9563:106;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9563:106:11;;;;;7805:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7805:134:11;;;;;8884:112;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8884:112:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;8884:112:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4953:148;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4953:148:11;;;;;;;;;8546:106;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8546:106:11;;;;;;;;;;;;;;;;;;;;;9226:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9226:109:11;;;;;3197:157;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3197:157:11;;;-1:-1:-1;;;;;3197:157:11;;;;;9895:103;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9895:103:11;;;;;3639:148;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3639:148:11;;;;;;;6285:136;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6285:136:11;;;;;1589:291:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1589:291:1;-1:-1:-1;;;;;1589:291:1;;;;;6665:140:11;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6665:140:11;;;;;5901:142;1261:10:1;5964:12:11;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;5995:20:11;;;;:14;:20;;;;;5988:27;;-1:-1:-1;;5988:27:11;;;-1:-1:-1;;5901:142:11:o;8203:115::-;8258:14;8291:20;;;:14;:20;;;;;;-1:-1:-1;;;;;8291:20:11;;8203:115::o;7428:136::-;1261:10:1;7488:12:11;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;7519:17:11;;;;:11;:17;;;;;7512:24;;-1:-1:-1;;7512:24:11;;;-1:-1:-1;;7428:136:11:o;4517:151::-;1261:10:1;4589:12:11;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;4613:18:11;;;;:12;:18;;;;;;;;:27;;;;;;;;:::i;:::-;-1:-1:-1;4657:4:11;;4517:151;-1:-1:-1;;;4517:151:11:o;5384:145::-;1261:10:1;5452:12:11;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;5476:16:11;;;;:10;:16;;;;;;:25;5518:4;;5384:145::o;2127:185:1:-;1261:10;2201:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;2221:21:1;;:5;:21;;;;;;;;;;;:28;;-1:-1:-1;;2221:28:1;2245:4;2221:28;;;2260:30;;;2221:5;2260:30;-1:-1:-1;2303:4:1;2127:185;;;:::o;7048:138:11:-;1261:10:1;7109:12:11;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;7140:18:11;;;;:12;:18;;;;;7133:25;;;:::i;:::-;-1:-1:-1;7175:4:11;7048:138;;;:::o;2571:188:1:-;1261:10;2646:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;2666:21:1;;2690:5;2666:21;;;;;;;;;;;:29;;-1:-1:-1;;2666:29:1;;;2706:31;;;2690:5;2706:31;-1:-1:-1;2750:4:1;2571:188;;;:::o;725:37::-;;;;;;;;;;;;;;;;:::o;4076:154:11:-;1261:10:1;4150:12:11;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;4174:19:11;;;;:13;:19;;;;;;;;:28;;;;;;;;:::i;9563:106::-;9615:11;9645:17;;;:11;:17;;;;;;;;;9563:106::o;7805:134::-;1261:10:1;7864:12:11;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;7895:16:11;;;;:10;:16;;;;;7888:23;7928:4;;7805:134::o;8884:112::-;8970:19;;;;:13;:19;;;;;;;;;8963:26;;;;-1:-1:-1;;8963:26:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8938:13;;8970:19;;8963:26;;8970:19;8963:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8884:112;;;:::o;4953:148::-;1261:10:1;5023:12:11;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;5047:17:11;;;;:11;:17;;;;;;:26;;-1:-1:-1;;5047:26:11;;;;;;;;;;-1:-1:-1;;4953:148:11:o;8546:106::-;8598:11;8628:17;;;:11;:17;;;;;;;8546:106::o;9226:109::-;9310:18;;;;:12;:18;;;;;;;;;9303:25;;;;;;;;;;;;-1:-1:-1;;9303:25:11;;;;;;;;;;;;;;;;;;;;;;;;;;9279:12;;9303:25;;;9310:18;9303:25;;;;;;;;;;;;;;;;;;;;;;;;3197:157;1261:10:1;3273:12:11;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;3297:20:11;;;;:14;:20;;;;;:29;;-1:-1:-1;;;;;3297:29:11;;-1:-1:-1;;3297:29:11;;;;;;;3197:157;;;;:::o;9895:103::-;9946:10;9975:16;;;:10;:16;;;;;;;9895:103::o;3639:148::-;1261:10:1;3709:12:11;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;3733:17:11;;;;:11;:17;;;;;;;;:26;:11;3639:148::o;6285:136::-;1261:10:1;6345:12:11;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;6376:17:11;;;;:11;:17;;;;;;;6369:24;;;;6376:11;6285:136::o;1589:291:1:-;1261:10;1660:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;1688:22:1;;;;1680:66;;;;;-1:-1:-1;;;;;1680:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1757:42;;-1:-1:-1;;;;;1757:42:1;;;1778:10;;1757:42;;;;;-1:-1:-1;;;;;;1805:15:1;:5;:15;;;;;;;;;;;:22;;1823:4;-1:-1:-1;;1805:22:1;;;;;;;;1839:10;1833:17;;;;;;:25;;;;;;;1823:4;1589:291::o;6665:140:11:-;1261:10:1;6727:12:11;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;6758:19:11;;;;:13;:19;;;;;6751:26;;;:::i;1972:8029::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1972:8029:11;;;-1:-1:-1;1972:8029:11;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o", + "source": "pragma solidity 0.4.24;\n\nimport \"./Ownable.sol\";\n\n/**\n\nCOPYRIGHT 2018 Token, Inc.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n@title TokenIOStorage - Serves as derived contract for TokenIO contract and\nis used to upgrade interfaces in the event of deprecating the main contract.\n\n@author Ryan Tate , Sean Pollock \n\n@notice Storage contract\n\n@dev In the event that the main contract becomes deprecated, the upgraded contract\nwill be set as the owner of this contract, and use this contract's storage to\nmaintain data consistency between contract.\n\n@notice NOTE: This contract is based on the RocketPool Storage Contract,\nfound here: https://github.com/rocket-pool/rocketpool/blob/master/contracts/RocketStorage.sol\nAnd this medium article: https://medium.com/rocket-pool/upgradable-solidity-contract-design-54789205276d\n\nChanges:\n - setting primitive mapping view to internal;\n - setting method views to public;\n\n @dev NOTE: When deprecating the main TokenIO contract, the upgraded contract\n must take ownership of the TokenIO contract, it will require using the public methods\n to update changes to the underlying data. The updated contract must use a\n standard call to original TokenIO contract such that the request is made from\n the upgraded contract and not the transaction origin (tx.origin) of the signing\n account.\n\n\n @dev NOTE: The reasoning for using the storage contract is to abstract the interface\n from the data of the contract on chain, limiting the need to migrate data to\n new contracts.\n\n*/\ncontract TokenIOStorage is Ownable {\n\n\n /// @dev mapping for Primitive Data Types;\n\t\t/// @notice primitive data mappings have `internal` view;\n\t\t/// @dev only the derived contract can use the internal methods;\n\t\t/// @dev key == `keccak256(param1, param2...)`\n\t\t/// @dev Nested mapping can be achieved using multiple params in keccak256 hash;\n mapping(bytes32 => uint256) internal uIntStorage;\n mapping(bytes32 => string) internal stringStorage;\n mapping(bytes32 => address) internal addressStorage;\n mapping(bytes32 => bytes) internal bytesStorage;\n mapping(bytes32 => bool) internal boolStorage;\n mapping(bytes32 => int256) internal intStorage;\n\n constructor() public {\n\t\t\t\t/// @notice owner is set to msg.sender by default\n\t\t\t\t/// @dev consider removing in favor of setting ownership in inherited\n\t\t\t\t/// contract\n owner[msg.sender] = true;\n }\n\n /// @dev Set Key Methods\n\n /**\n * @notice Set value for Address associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @param _value The Address value to be set\n * @return { \"success\" : \"Returns true when successfully called from another contract\" }\n */\n function setAddress(bytes32 _key, address _value) public onlyOwner returns (bool success) {\n addressStorage[_key] = _value;\n return true;\n }\n\n /**\n * @notice Set value for Uint associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @param _value The Uint value to be set\n * @return { \"success\" : \"Returns true when successfully called from another contract\" }\n */\n function setUint(bytes32 _key, uint _value) public onlyOwner returns (bool success) {\n uIntStorage[_key] = _value;\n return true;\n }\n\n /**\n * @notice Set value for String associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @param _value The String value to be set\n * @return { \"success\" : \"Returns true when successfully called from another contract\" }\n */\n function setString(bytes32 _key, string _value) public onlyOwner returns (bool success) {\n stringStorage[_key] = _value;\n return true;\n }\n\n /**\n * @notice Set value for Bytes associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @param _value The Bytes value to be set\n * @return { \"success\" : \"Returns true when successfully called from another contract\" }\n */\n function setBytes(bytes32 _key, bytes _value) public onlyOwner returns (bool success) {\n bytesStorage[_key] = _value;\n return true;\n }\n\n /**\n * @notice Set value for Bool associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @param _value The Bool value to be set\n * @return { \"success\" : \"Returns true when successfully called from another contract\" }\n */\n function setBool(bytes32 _key, bool _value) public onlyOwner returns (bool success) {\n boolStorage[_key] = _value;\n return true;\n }\n\n /**\n * @notice Set value for Int associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @param _value The Int value to be set\n * @return { \"success\" : \"Returns true when successfully called from another contract\" }\n */\n function setInt(bytes32 _key, int _value) public onlyOwner returns (bool success) {\n intStorage[_key] = _value;\n return true;\n }\n\n /// @dev Delete Key Methods\n\t\t/// @dev delete methods may be unnecessary; Use set methods to set values\n\t\t/// to default?\n\n /**\n * @notice Delete value for Address associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @return { \"success\" : \"Returns true when successfully called from another contract\" }\n */\n function deleteAddress(bytes32 _key) public onlyOwner returns (bool success) {\n delete addressStorage[_key];\n return true;\n }\n\n /**\n * @notice Delete value for Uint associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @return { \"success\" : \"Returns true when successfully called from another contract\" }\n */\n function deleteUint(bytes32 _key) public onlyOwner returns (bool success) {\n delete uIntStorage[_key];\n return true;\n }\n\n /**\n * @notice Delete value for String associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @return { \"success\" : \"Returns true when successfully called from another contract\" }\n */\n function deleteString(bytes32 _key) public onlyOwner returns (bool success) {\n delete stringStorage[_key];\n return true;\n }\n\n /**\n * @notice Delete value for Bytes associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @return { \"success\" : \"Returns true when successfully called from another contract\" }\n */\n function deleteBytes(bytes32 _key) public onlyOwner returns (bool success) {\n delete bytesStorage[_key];\n return true;\n }\n\n /**\n * @notice Delete value for Bool associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @return { \"success\" : \"Returns true when successfully called from another contract\" }\n */\n function deleteBool(bytes32 _key) public onlyOwner returns (bool success) {\n delete boolStorage[_key];\n return true;\n }\n\n /**\n * @notice Delete value for Int associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @return { \"success\" : \"Returns true when successfully called from another contract\" }\n */\n function deleteInt(bytes32 _key) public onlyOwner returns (bool success) {\n delete intStorage[_key];\n return true;\n }\n\n /// @dev Get Key Methods\n\n /**\n * @notice Get value for Address associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @return { \"_value\" : \"Returns the Address value associated with the id key\" }\n */\n function getAddress(bytes32 _key) public view returns (address _value) {\n return addressStorage[_key];\n }\n\n /**\n * @notice Get value for Uint associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @return { \"_value\" : \"Returns the Uint value associated with the id key\" }\n */\n function getUint(bytes32 _key) public view returns (uint _value) {\n return uIntStorage[_key];\n }\n\n /**\n * @notice Get value for String associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @return { \"_value\" : \"Returns the String value associated with the id key\" }\n */\n function getString(bytes32 _key) public view returns (string _value) {\n return stringStorage[_key];\n }\n\n /**\n * @notice Get value for Bytes associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @return { \"_value\" : \"Returns the Bytes value associated with the id key\" }\n */\n function getBytes(bytes32 _key) public view returns (bytes _value) {\n return bytesStorage[_key];\n }\n\n /**\n * @notice Get value for Bool associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @return { \"_value\" : \"Returns the Bool value associated with the id key\" }\n */\n function getBool(bytes32 _key) public view returns (bool _value) {\n return boolStorage[_key];\n }\n\n /**\n * @notice Get value for Int associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @return { \"_value\" : \"Returns the Int value associated with the id key\" }\n */\n function getInt(bytes32 _key) public view returns (int _value) {\n return intStorage[_key];\n }\n\n}\n", + "sourcePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "ast": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "exportedSymbols": { + "TokenIOStorage": [ + 5241 + ] + }, + "id": 5242, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4908, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:11" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 4909, + "nodeType": "ImportDirective", + "scope": 5242, + "sourceUnit": 185, + "src": "25:23:11", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 4910, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "1999:7:11", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 4911, + "nodeType": "InheritanceSpecifier", + "src": "1999:7:11" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": "COPYRIGHT 2018 Token, Inc.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n@title TokenIOStorage - Serves as derived contract for TokenIO contract and\nis used to upgrade interfaces in the event of deprecating the main contract.\n@author Ryan Tate , Sean Pollock \n@notice Storage contract\n@dev In the event that the main contract becomes deprecated, the upgraded contract\nwill be set as the owner of this contract, and use this contract's storage to\nmaintain data consistency between contract.\n@notice NOTE: This contract is based on the RocketPool Storage Contract,\nfound here: https://github.com/rocket-pool/rocketpool/blob/master/contracts/RocketStorage.sol\nAnd this medium article: https://medium.com/rocket-pool/upgradable-solidity-contract-design-54789205276d\nChanges:\n- setting primitive mapping view to internal;\n- setting method views to public;\n@dev NOTE: When deprecating the main TokenIO contract, the upgraded contract\nmust take ownership of the TokenIO contract, it will require using the public methods\nto update changes to the underlying data. The updated contract must use a\nstandard call to original TokenIO contract such that the request is made from\nthe upgraded contract and not the transaction origin (tx.origin) of the signing\naccount.\n@dev NOTE: The reasoning for using the storage contract is to abstract the interface\nfrom the data of the contract on chain, limiting the need to migrate data to\nnew contracts.", + "fullyImplemented": true, + "id": 5241, + "linearizedBaseContracts": [ + 5241, + 184 + ], + "name": "TokenIOStorage", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 4915, + "name": "uIntStorage", + "nodeType": "VariableDeclaration", + "scope": 5241, + "src": "2321:51:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + }, + "typeName": { + "id": 4914, + "keyType": { + "id": 4912, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2329:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2321:27:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + }, + "valueType": { + "id": 4913, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2340:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4919, + "name": "stringStorage", + "nodeType": "VariableDeclaration", + "scope": 5241, + "src": "2378:53:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_string_storage_$", + "typeString": "mapping(bytes32 => string)" + }, + "typeName": { + "id": 4918, + "keyType": { + "id": 4916, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2386:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2378:26:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_string_storage_$", + "typeString": "mapping(bytes32 => string)" + }, + "valueType": { + "id": 4917, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2397:6:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4923, + "name": "addressStorage", + "nodeType": "VariableDeclaration", + "scope": 5241, + "src": "2437:54:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", + "typeString": "mapping(bytes32 => address)" + }, + "typeName": { + "id": 4922, + "keyType": { + "id": 4920, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2445:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2437:27:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", + "typeString": "mapping(bytes32 => address)" + }, + "valueType": { + "id": 4921, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2456:7:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4927, + "name": "bytesStorage", + "nodeType": "VariableDeclaration", + "scope": 5241, + "src": "2497:52:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes_storage_$", + "typeString": "mapping(bytes32 => bytes)" + }, + "typeName": { + "id": 4926, + "keyType": { + "id": 4924, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2505:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2497:25:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes_storage_$", + "typeString": "mapping(bytes32 => bytes)" + }, + "valueType": { + "id": 4925, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2516:5:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4931, + "name": "boolStorage", + "nodeType": "VariableDeclaration", + "scope": 5241, + "src": "2555:51:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", + "typeString": "mapping(bytes32 => bool)" + }, + "typeName": { + "id": 4930, + "keyType": { + "id": 4928, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2563:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2555:24:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", + "typeString": "mapping(bytes32 => bool)" + }, + "valueType": { + "id": 4929, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2574:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4935, + "name": "intStorage", + "nodeType": "VariableDeclaration", + "scope": 5241, + "src": "2612:50:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_int256_$", + "typeString": "mapping(bytes32 => int256)" + }, + "typeName": { + "id": 4934, + "keyType": { + "id": 4932, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2620:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2612:26:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_int256_$", + "typeString": "mapping(bytes32 => int256)" + }, + "valueType": { + "id": 4933, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "2631:6:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 4945, + "nodeType": "Block", + "src": "2690:186:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 4943, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 4938, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "2845:5:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 4941, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4939, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "2851:3:11", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4940, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2851:10:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2845:17:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4942, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2865:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "2845:24:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4944, + "nodeType": "ExpressionStatement", + "src": "2845:24:11" + } + ] + }, + "documentation": null, + "id": 4946, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4936, + "nodeType": "ParameterList", + "parameters": [], + "src": "2680:2:11" + }, + "payable": false, + "returnParameters": { + "id": 4937, + "nodeType": "ParameterList", + "parameters": [], + "src": "2690:0:11" + }, + "scope": 5241, + "src": "2669:207:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4965, + "nodeType": "Block", + "src": "3287:67:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 4961, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 4957, + "name": "addressStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4923, + "src": "3297:14:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", + "typeString": "mapping(bytes32 => address)" + } + }, + "id": 4959, + "indexExpression": { + "argumentTypes": null, + "id": 4958, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4948, + "src": "3312:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3297:20:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 4960, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4950, + "src": "3320:6:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "3297:29:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 4962, + "nodeType": "ExpressionStatement", + "src": "3297:29:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4963, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3343:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 4956, + "id": 4964, + "nodeType": "Return", + "src": "3336:11:11" + } + ] + }, + "documentation": "@notice Set value for Address associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@param _value The Address value to be set\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 4966, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 4953, + "modifierName": { + "argumentTypes": null, + "id": 4952, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "3254:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "3254:9:11" + } + ], + "name": "setAddress", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4951, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4948, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 4966, + "src": "3217:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4947, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3217:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4950, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 4966, + "src": "3231:14:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4949, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3231:7:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3216:30:11" + }, + "payable": false, + "returnParameters": { + "id": 4956, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4955, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 4966, + "src": "3273:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4954, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3273:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3272:14:11" + }, + "scope": 5241, + "src": "3197:157:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4985, + "nodeType": "Block", + "src": "3723:64:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 4981, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 4977, + "name": "uIntStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4915, + "src": "3733:11:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 4979, + "indexExpression": { + "argumentTypes": null, + "id": 4978, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4968, + "src": "3745:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3733:17:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 4980, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4970, + "src": "3753:6:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3733:26:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4982, + "nodeType": "ExpressionStatement", + "src": "3733:26:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4983, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3776:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 4976, + "id": 4984, + "nodeType": "Return", + "src": "3769:11:11" + } + ] + }, + "documentation": "@notice Set value for Uint associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@param _value The Uint value to be set\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 4986, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 4973, + "modifierName": { + "argumentTypes": null, + "id": 4972, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "3690:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "3690:9:11" + } + ], + "name": "setUint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4971, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4968, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 4986, + "src": "3656:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4967, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3656:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4970, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 4986, + "src": "3670:11:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4969, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3670:4:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3655:27:11" + }, + "payable": false, + "returnParameters": { + "id": 4976, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4975, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 4986, + "src": "3709:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4974, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3709:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3708:14:11" + }, + "scope": 5241, + "src": "3639:148:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5005, + "nodeType": "Block", + "src": "4164:66:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5001, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 4997, + "name": "stringStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4919, + "src": "4174:13:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_string_storage_$", + "typeString": "mapping(bytes32 => string storage ref)" + } + }, + "id": 4999, + "indexExpression": { + "argumentTypes": null, + "id": 4998, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4988, + "src": "4188:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "4174:19:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 5000, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4990, + "src": "4196:6:11", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "src": "4174:28:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "id": 5002, + "nodeType": "ExpressionStatement", + "src": "4174:28:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5003, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4219:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 4996, + "id": 5004, + "nodeType": "Return", + "src": "4212:11:11" + } + ] + }, + "documentation": "@notice Set value for String associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@param _value The String value to be set\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5006, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 4993, + "modifierName": { + "argumentTypes": null, + "id": 4992, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "4131:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "4131:9:11" + } + ], + "name": "setString", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4991, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4988, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5006, + "src": "4095:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4987, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4095:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4990, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5006, + "src": "4109:13:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 4989, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "4109:6:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4094:29:11" + }, + "payable": false, + "returnParameters": { + "id": 4996, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4995, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5006, + "src": "4150:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4994, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4150:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4149:14:11" + }, + "scope": 5241, + "src": "4076:154:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5025, + "nodeType": "Block", + "src": "4603:65:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5021, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5017, + "name": "bytesStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4927, + "src": "4613:12:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes_storage_$", + "typeString": "mapping(bytes32 => bytes storage ref)" + } + }, + "id": 5019, + "indexExpression": { + "argumentTypes": null, + "id": 5018, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5008, + "src": "4626:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "4613:18:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage", + "typeString": "bytes storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 5020, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5010, + "src": "4634:6:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "src": "4613:27:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage", + "typeString": "bytes storage ref" + } + }, + "id": 5022, + "nodeType": "ExpressionStatement", + "src": "4613:27:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5023, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4657:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5016, + "id": 5024, + "nodeType": "Return", + "src": "4650:11:11" + } + ] + }, + "documentation": "@notice Set value for Bytes associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@param _value The Bytes value to be set\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5026, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5013, + "modifierName": { + "argumentTypes": null, + "id": 5012, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "4570:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "4570:9:11" + } + ], + "name": "setBytes", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5011, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5008, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5026, + "src": "4535:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5007, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4535:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 5010, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5026, + "src": "4549:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5009, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4549:5:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4534:28:11" + }, + "payable": false, + "returnParameters": { + "id": 5016, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5015, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5026, + "src": "4589:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5014, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4589:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4588:14:11" + }, + "scope": 5241, + "src": "4517:151:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5045, + "nodeType": "Block", + "src": "5037:64:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5041, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5037, + "name": "boolStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4931, + "src": "5047:11:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", + "typeString": "mapping(bytes32 => bool)" + } + }, + "id": 5039, + "indexExpression": { + "argumentTypes": null, + "id": 5038, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5028, + "src": "5059:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "5047:17:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 5040, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5030, + "src": "5067:6:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5047:26:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5042, + "nodeType": "ExpressionStatement", + "src": "5047:26:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5043, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5090:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5036, + "id": 5044, + "nodeType": "Return", + "src": "5083:11:11" + } + ] + }, + "documentation": "@notice Set value for Bool associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@param _value The Bool value to be set\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5046, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5033, + "modifierName": { + "argumentTypes": null, + "id": 5032, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "5004:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "5004:9:11" + } + ], + "name": "setBool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5031, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5028, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5046, + "src": "4970:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5027, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4970:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 5030, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5046, + "src": "4984:11:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5029, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4984:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4969:27:11" + }, + "payable": false, + "returnParameters": { + "id": 5036, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5035, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5046, + "src": "5023:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5034, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5023:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5022:14:11" + }, + "scope": 5241, + "src": "4953:148:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5065, + "nodeType": "Block", + "src": "5466:63:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5061, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5057, + "name": "intStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4935, + "src": "5476:10:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_int256_$", + "typeString": "mapping(bytes32 => int256)" + } + }, + "id": 5059, + "indexExpression": { + "argumentTypes": null, + "id": 5058, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5048, + "src": "5487:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "5476:16:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 5060, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5050, + "src": "5495:6:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "5476:25:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 5062, + "nodeType": "ExpressionStatement", + "src": "5476:25:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5063, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5518:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5056, + "id": 5064, + "nodeType": "Return", + "src": "5511:11:11" + } + ] + }, + "documentation": "@notice Set value for Int associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@param _value The Int value to be set\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5066, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5053, + "modifierName": { + "argumentTypes": null, + "id": 5052, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "5433:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "5433:9:11" + } + ], + "name": "setInt", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5051, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5048, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5066, + "src": "5400:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5047, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5400:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 5050, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5066, + "src": "5414:10:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 5049, + "name": "int", + "nodeType": "ElementaryTypeName", + "src": "5414:3:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5399:26:11" + }, + "payable": false, + "returnParameters": { + "id": 5056, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5055, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5066, + "src": "5452:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5054, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5452:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5451:14:11" + }, + "scope": 5241, + "src": "5384:145:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5082, + "nodeType": "Block", + "src": "5978:65:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5078, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "5988:27:11", + "subExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5075, + "name": "addressStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4923, + "src": "5995:14:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", + "typeString": "mapping(bytes32 => address)" + } + }, + "id": 5077, + "indexExpression": { + "argumentTypes": null, + "id": 5076, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5068, + "src": "6010:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "5995:20:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5079, + "nodeType": "ExpressionStatement", + "src": "5988:27:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5080, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6032:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5074, + "id": 5081, + "nodeType": "Return", + "src": "6025:11:11" + } + ] + }, + "documentation": "@notice Delete value for Address associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5083, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5071, + "modifierName": { + "argumentTypes": null, + "id": 5070, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "5945:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "5945:9:11" + } + ], + "name": "deleteAddress", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5069, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5068, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5083, + "src": "5924:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5067, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5924:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5923:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5074, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5073, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5083, + "src": "5964:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5072, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5964:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5963:14:11" + }, + "scope": 5241, + "src": "5901:142:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5099, + "nodeType": "Block", + "src": "6359:62:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5095, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "6369:24:11", + "subExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5092, + "name": "uIntStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4915, + "src": "6376:11:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 5094, + "indexExpression": { + "argumentTypes": null, + "id": 5093, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5085, + "src": "6388:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "6376:17:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5096, + "nodeType": "ExpressionStatement", + "src": "6369:24:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5097, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6410:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5091, + "id": 5098, + "nodeType": "Return", + "src": "6403:11:11" + } + ] + }, + "documentation": "@notice Delete value for Uint associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5100, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5088, + "modifierName": { + "argumentTypes": null, + "id": 5087, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "6326:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "6326:9:11" + } + ], + "name": "deleteUint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5086, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5085, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5100, + "src": "6305:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5084, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6305:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6304:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5091, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5090, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5100, + "src": "6345:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5089, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6345:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6344:14:11" + }, + "scope": 5241, + "src": "6285:136:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5116, + "nodeType": "Block", + "src": "6741:64:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5112, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "6751:26:11", + "subExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5109, + "name": "stringStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4919, + "src": "6758:13:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_string_storage_$", + "typeString": "mapping(bytes32 => string storage ref)" + } + }, + "id": 5111, + "indexExpression": { + "argumentTypes": null, + "id": 5110, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5102, + "src": "6772:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "6758:19:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5113, + "nodeType": "ExpressionStatement", + "src": "6751:26:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5114, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6794:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5108, + "id": 5115, + "nodeType": "Return", + "src": "6787:11:11" + } + ] + }, + "documentation": "@notice Delete value for String associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5117, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5105, + "modifierName": { + "argumentTypes": null, + "id": 5104, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "6708:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "6708:9:11" + } + ], + "name": "deleteString", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5103, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5102, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5117, + "src": "6687:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5101, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6687:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6686:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5108, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5107, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5117, + "src": "6727:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5106, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6727:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6726:14:11" + }, + "scope": 5241, + "src": "6665:140:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5133, + "nodeType": "Block", + "src": "7123:63:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5129, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "7133:25:11", + "subExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5126, + "name": "bytesStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4927, + "src": "7140:12:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes_storage_$", + "typeString": "mapping(bytes32 => bytes storage ref)" + } + }, + "id": 5128, + "indexExpression": { + "argumentTypes": null, + "id": 5127, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5119, + "src": "7153:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7140:18:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage", + "typeString": "bytes storage ref" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5130, + "nodeType": "ExpressionStatement", + "src": "7133:25:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5131, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7175:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5125, + "id": 5132, + "nodeType": "Return", + "src": "7168:11:11" + } + ] + }, + "documentation": "@notice Delete value for Bytes associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5134, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5122, + "modifierName": { + "argumentTypes": null, + "id": 5121, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "7090:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "7090:9:11" + } + ], + "name": "deleteBytes", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5120, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5119, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5134, + "src": "7069:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5118, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7069:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7068:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5125, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5124, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5134, + "src": "7109:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5123, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7109:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7108:14:11" + }, + "scope": 5241, + "src": "7048:138:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5150, + "nodeType": "Block", + "src": "7502:62:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5146, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "7512:24:11", + "subExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5143, + "name": "boolStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4931, + "src": "7519:11:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", + "typeString": "mapping(bytes32 => bool)" + } + }, + "id": 5145, + "indexExpression": { + "argumentTypes": null, + "id": 5144, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5136, + "src": "7531:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7519:17:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5147, + "nodeType": "ExpressionStatement", + "src": "7512:24:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5148, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7553:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5142, + "id": 5149, + "nodeType": "Return", + "src": "7546:11:11" + } + ] + }, + "documentation": "@notice Delete value for Bool associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5151, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5139, + "modifierName": { + "argumentTypes": null, + "id": 5138, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "7469:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "7469:9:11" + } + ], + "name": "deleteBool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5137, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5136, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5151, + "src": "7448:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5135, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7448:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7447:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5142, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5141, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5151, + "src": "7488:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5140, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7488:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7487:14:11" + }, + "scope": 5241, + "src": "7428:136:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5167, + "nodeType": "Block", + "src": "7878:61:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5163, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "7888:23:11", + "subExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5160, + "name": "intStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4935, + "src": "7895:10:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_int256_$", + "typeString": "mapping(bytes32 => int256)" + } + }, + "id": 5162, + "indexExpression": { + "argumentTypes": null, + "id": 5161, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5153, + "src": "7906:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7895:16:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5164, + "nodeType": "ExpressionStatement", + "src": "7888:23:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5165, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7928:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5159, + "id": 5166, + "nodeType": "Return", + "src": "7921:11:11" + } + ] + }, + "documentation": "@notice Delete value for Int associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5168, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5156, + "modifierName": { + "argumentTypes": null, + "id": 5155, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "7845:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "7845:9:11" + } + ], + "name": "deleteInt", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5154, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5153, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5168, + "src": "7824:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5152, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7824:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7823:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5159, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5158, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5168, + "src": "7864:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5157, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7864:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7863:14:11" + }, + "scope": 5241, + "src": "7805:134:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5179, + "nodeType": "Block", + "src": "8274:44:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5175, + "name": "addressStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4923, + "src": "8291:14:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", + "typeString": "mapping(bytes32 => address)" + } + }, + "id": 5177, + "indexExpression": { + "argumentTypes": null, + "id": 5176, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5170, + "src": "8306:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8291:20:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 5174, + "id": 5178, + "nodeType": "Return", + "src": "8284:27:11" + } + ] + }, + "documentation": "@notice Get value for Address associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"_value\" : \"Returns the Address value associated with the id key\" }", + "id": 5180, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getAddress", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5171, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5170, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5180, + "src": "8223:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5169, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8223:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8222:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5174, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5173, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5180, + "src": "8258:14:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5172, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8258:7:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8257:16:11" + }, + "scope": 5241, + "src": "8203:115:11", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5191, + "nodeType": "Block", + "src": "8611:41:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5187, + "name": "uIntStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4915, + "src": "8628:11:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 5189, + "indexExpression": { + "argumentTypes": null, + "id": 5188, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5182, + "src": "8640:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8628:17:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 5186, + "id": 5190, + "nodeType": "Return", + "src": "8621:24:11" + } + ] + }, + "documentation": "@notice Get value for Uint associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"_value\" : \"Returns the Uint value associated with the id key\" }", + "id": 5192, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getUint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5183, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5182, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5192, + "src": "8563:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5181, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8563:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8562:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5186, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5185, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5192, + "src": "8598:11:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5184, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "8598:4:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8597:13:11" + }, + "scope": 5241, + "src": "8546:106:11", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5203, + "nodeType": "Block", + "src": "8953:43:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5199, + "name": "stringStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4919, + "src": "8970:13:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_string_storage_$", + "typeString": "mapping(bytes32 => string storage ref)" + } + }, + "id": 5201, + "indexExpression": { + "argumentTypes": null, + "id": 5200, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5194, + "src": "8984:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8970:19:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "functionReturnParameters": 5198, + "id": 5202, + "nodeType": "Return", + "src": "8963:26:11" + } + ] + }, + "documentation": "@notice Get value for String associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"_value\" : \"Returns the String value associated with the id key\" }", + "id": 5204, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getString", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5195, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5194, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5204, + "src": "8903:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5193, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8903:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8902:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5198, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5197, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5204, + "src": "8938:13:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 5196, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "8938:6:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8937:15:11" + }, + "scope": 5241, + "src": "8884:112:11", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5215, + "nodeType": "Block", + "src": "9293:42:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5211, + "name": "bytesStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4927, + "src": "9310:12:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes_storage_$", + "typeString": "mapping(bytes32 => bytes storage ref)" + } + }, + "id": 5213, + "indexExpression": { + "argumentTypes": null, + "id": 5212, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5206, + "src": "9323:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9310:18:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage", + "typeString": "bytes storage ref" + } + }, + "functionReturnParameters": 5210, + "id": 5214, + "nodeType": "Return", + "src": "9303:25:11" + } + ] + }, + "documentation": "@notice Get value for Bytes associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"_value\" : \"Returns the Bytes value associated with the id key\" }", + "id": 5216, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getBytes", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5207, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5206, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5216, + "src": "9244:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5205, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "9244:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9243:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5210, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5209, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5216, + "src": "9279:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5208, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "9279:5:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9278:14:11" + }, + "scope": 5241, + "src": "9226:109:11", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5227, + "nodeType": "Block", + "src": "9628:41:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5223, + "name": "boolStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4931, + "src": "9645:11:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", + "typeString": "mapping(bytes32 => bool)" + } + }, + "id": 5225, + "indexExpression": { + "argumentTypes": null, + "id": 5224, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5218, + "src": "9657:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9645:17:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 5222, + "id": 5226, + "nodeType": "Return", + "src": "9638:24:11" + } + ] + }, + "documentation": "@notice Get value for Bool associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"_value\" : \"Returns the Bool value associated with the id key\" }", + "id": 5228, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getBool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5219, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5218, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5228, + "src": "9580:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5217, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "9580:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9579:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5222, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5221, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5228, + "src": "9615:11:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5220, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "9615:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9614:13:11" + }, + "scope": 5241, + "src": "9563:106:11", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5239, + "nodeType": "Block", + "src": "9958:40:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5235, + "name": "intStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4935, + "src": "9975:10:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_int256_$", + "typeString": "mapping(bytes32 => int256)" + } + }, + "id": 5237, + "indexExpression": { + "argumentTypes": null, + "id": 5236, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5230, + "src": "9986:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9975:16:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "functionReturnParameters": 5234, + "id": 5238, + "nodeType": "Return", + "src": "9968:23:11" + } + ] + }, + "documentation": "@notice Get value for Int associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"_value\" : \"Returns the Int value associated with the id key\" }", + "id": 5240, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getInt", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5231, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5230, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5240, + "src": "9911:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5229, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "9911:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9910:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5234, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5233, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5240, + "src": "9946:10:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 5232, + "name": "int", + "nodeType": "ElementaryTypeName", + "src": "9946:3:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9945:12:11" + }, + "scope": 5241, + "src": "9895:103:11", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 5242, + "src": "1972:8029:11" + } + ], + "src": "0:10002:11" + }, + "legacyAST": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "exportedSymbols": { + "TokenIOStorage": [ + 5241 + ] + }, + "id": 5242, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4908, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:11" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 4909, + "nodeType": "ImportDirective", + "scope": 5242, + "sourceUnit": 185, + "src": "25:23:11", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 4910, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "1999:7:11", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 4911, + "nodeType": "InheritanceSpecifier", + "src": "1999:7:11" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": "COPYRIGHT 2018 Token, Inc.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n@title TokenIOStorage - Serves as derived contract for TokenIO contract and\nis used to upgrade interfaces in the event of deprecating the main contract.\n@author Ryan Tate , Sean Pollock \n@notice Storage contract\n@dev In the event that the main contract becomes deprecated, the upgraded contract\nwill be set as the owner of this contract, and use this contract's storage to\nmaintain data consistency between contract.\n@notice NOTE: This contract is based on the RocketPool Storage Contract,\nfound here: https://github.com/rocket-pool/rocketpool/blob/master/contracts/RocketStorage.sol\nAnd this medium article: https://medium.com/rocket-pool/upgradable-solidity-contract-design-54789205276d\nChanges:\n- setting primitive mapping view to internal;\n- setting method views to public;\n@dev NOTE: When deprecating the main TokenIO contract, the upgraded contract\nmust take ownership of the TokenIO contract, it will require using the public methods\nto update changes to the underlying data. The updated contract must use a\nstandard call to original TokenIO contract such that the request is made from\nthe upgraded contract and not the transaction origin (tx.origin) of the signing\naccount.\n@dev NOTE: The reasoning for using the storage contract is to abstract the interface\nfrom the data of the contract on chain, limiting the need to migrate data to\nnew contracts.", + "fullyImplemented": true, + "id": 5241, + "linearizedBaseContracts": [ + 5241, + 184 + ], + "name": "TokenIOStorage", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 4915, + "name": "uIntStorage", + "nodeType": "VariableDeclaration", + "scope": 5241, + "src": "2321:51:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + }, + "typeName": { + "id": 4914, + "keyType": { + "id": 4912, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2329:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2321:27:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + }, + "valueType": { + "id": 4913, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2340:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4919, + "name": "stringStorage", + "nodeType": "VariableDeclaration", + "scope": 5241, + "src": "2378:53:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_string_storage_$", + "typeString": "mapping(bytes32 => string)" + }, + "typeName": { + "id": 4918, + "keyType": { + "id": 4916, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2386:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2378:26:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_string_storage_$", + "typeString": "mapping(bytes32 => string)" + }, + "valueType": { + "id": 4917, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2397:6:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4923, + "name": "addressStorage", + "nodeType": "VariableDeclaration", + "scope": 5241, + "src": "2437:54:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", + "typeString": "mapping(bytes32 => address)" + }, + "typeName": { + "id": 4922, + "keyType": { + "id": 4920, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2445:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2437:27:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", + "typeString": "mapping(bytes32 => address)" + }, + "valueType": { + "id": 4921, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2456:7:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4927, + "name": "bytesStorage", + "nodeType": "VariableDeclaration", + "scope": 5241, + "src": "2497:52:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes_storage_$", + "typeString": "mapping(bytes32 => bytes)" + }, + "typeName": { + "id": 4926, + "keyType": { + "id": 4924, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2505:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2497:25:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes_storage_$", + "typeString": "mapping(bytes32 => bytes)" + }, + "valueType": { + "id": 4925, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2516:5:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4931, + "name": "boolStorage", + "nodeType": "VariableDeclaration", + "scope": 5241, + "src": "2555:51:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", + "typeString": "mapping(bytes32 => bool)" + }, + "typeName": { + "id": 4930, + "keyType": { + "id": 4928, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2563:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2555:24:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", + "typeString": "mapping(bytes32 => bool)" + }, + "valueType": { + "id": 4929, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2574:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4935, + "name": "intStorage", + "nodeType": "VariableDeclaration", + "scope": 5241, + "src": "2612:50:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_int256_$", + "typeString": "mapping(bytes32 => int256)" + }, + "typeName": { + "id": 4934, + "keyType": { + "id": 4932, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2620:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2612:26:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_int256_$", + "typeString": "mapping(bytes32 => int256)" + }, + "valueType": { + "id": 4933, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "2631:6:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 4945, + "nodeType": "Block", + "src": "2690:186:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 4943, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 4938, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "2845:5:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 4941, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4939, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5256, + "src": "2851:3:11", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4940, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2851:10:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2845:17:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4942, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2865:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "2845:24:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4944, + "nodeType": "ExpressionStatement", + "src": "2845:24:11" + } + ] + }, + "documentation": null, + "id": 4946, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4936, + "nodeType": "ParameterList", + "parameters": [], + "src": "2680:2:11" + }, + "payable": false, + "returnParameters": { + "id": 4937, + "nodeType": "ParameterList", + "parameters": [], + "src": "2690:0:11" + }, + "scope": 5241, + "src": "2669:207:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4965, + "nodeType": "Block", + "src": "3287:67:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 4961, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 4957, + "name": "addressStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4923, + "src": "3297:14:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", + "typeString": "mapping(bytes32 => address)" + } + }, + "id": 4959, + "indexExpression": { + "argumentTypes": null, + "id": 4958, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4948, + "src": "3312:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3297:20:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 4960, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4950, + "src": "3320:6:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "3297:29:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 4962, + "nodeType": "ExpressionStatement", + "src": "3297:29:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4963, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3343:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 4956, + "id": 4964, + "nodeType": "Return", + "src": "3336:11:11" + } + ] + }, + "documentation": "@notice Set value for Address associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@param _value The Address value to be set\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 4966, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 4953, + "modifierName": { + "argumentTypes": null, + "id": 4952, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "3254:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "3254:9:11" + } + ], + "name": "setAddress", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4951, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4948, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 4966, + "src": "3217:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4947, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3217:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4950, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 4966, + "src": "3231:14:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4949, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3231:7:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3216:30:11" + }, + "payable": false, + "returnParameters": { + "id": 4956, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4955, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 4966, + "src": "3273:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4954, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3273:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3272:14:11" + }, + "scope": 5241, + "src": "3197:157:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4985, + "nodeType": "Block", + "src": "3723:64:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 4981, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 4977, + "name": "uIntStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4915, + "src": "3733:11:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 4979, + "indexExpression": { + "argumentTypes": null, + "id": 4978, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4968, + "src": "3745:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3733:17:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 4980, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4970, + "src": "3753:6:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3733:26:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4982, + "nodeType": "ExpressionStatement", + "src": "3733:26:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4983, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3776:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 4976, + "id": 4984, + "nodeType": "Return", + "src": "3769:11:11" + } + ] + }, + "documentation": "@notice Set value for Uint associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@param _value The Uint value to be set\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 4986, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 4973, + "modifierName": { + "argumentTypes": null, + "id": 4972, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "3690:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "3690:9:11" + } + ], + "name": "setUint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4971, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4968, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 4986, + "src": "3656:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4967, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3656:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4970, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 4986, + "src": "3670:11:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4969, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3670:4:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3655:27:11" + }, + "payable": false, + "returnParameters": { + "id": 4976, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4975, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 4986, + "src": "3709:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4974, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3709:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3708:14:11" + }, + "scope": 5241, + "src": "3639:148:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5005, + "nodeType": "Block", + "src": "4164:66:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5001, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 4997, + "name": "stringStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4919, + "src": "4174:13:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_string_storage_$", + "typeString": "mapping(bytes32 => string storage ref)" + } + }, + "id": 4999, + "indexExpression": { + "argumentTypes": null, + "id": 4998, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4988, + "src": "4188:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "4174:19:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 5000, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4990, + "src": "4196:6:11", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "src": "4174:28:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "id": 5002, + "nodeType": "ExpressionStatement", + "src": "4174:28:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5003, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4219:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 4996, + "id": 5004, + "nodeType": "Return", + "src": "4212:11:11" + } + ] + }, + "documentation": "@notice Set value for String associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@param _value The String value to be set\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5006, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 4993, + "modifierName": { + "argumentTypes": null, + "id": 4992, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "4131:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "4131:9:11" + } + ], + "name": "setString", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4991, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4988, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5006, + "src": "4095:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4987, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4095:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4990, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5006, + "src": "4109:13:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 4989, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "4109:6:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4094:29:11" + }, + "payable": false, + "returnParameters": { + "id": 4996, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4995, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5006, + "src": "4150:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4994, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4150:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4149:14:11" + }, + "scope": 5241, + "src": "4076:154:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5025, + "nodeType": "Block", + "src": "4603:65:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5021, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5017, + "name": "bytesStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4927, + "src": "4613:12:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes_storage_$", + "typeString": "mapping(bytes32 => bytes storage ref)" + } + }, + "id": 5019, + "indexExpression": { + "argumentTypes": null, + "id": 5018, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5008, + "src": "4626:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "4613:18:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage", + "typeString": "bytes storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 5020, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5010, + "src": "4634:6:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "src": "4613:27:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage", + "typeString": "bytes storage ref" + } + }, + "id": 5022, + "nodeType": "ExpressionStatement", + "src": "4613:27:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5023, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4657:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5016, + "id": 5024, + "nodeType": "Return", + "src": "4650:11:11" + } + ] + }, + "documentation": "@notice Set value for Bytes associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@param _value The Bytes value to be set\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5026, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5013, + "modifierName": { + "argumentTypes": null, + "id": 5012, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "4570:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "4570:9:11" + } + ], + "name": "setBytes", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5011, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5008, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5026, + "src": "4535:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5007, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4535:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 5010, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5026, + "src": "4549:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5009, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4549:5:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4534:28:11" + }, + "payable": false, + "returnParameters": { + "id": 5016, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5015, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5026, + "src": "4589:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5014, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4589:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4588:14:11" + }, + "scope": 5241, + "src": "4517:151:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5045, + "nodeType": "Block", + "src": "5037:64:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5041, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5037, + "name": "boolStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4931, + "src": "5047:11:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", + "typeString": "mapping(bytes32 => bool)" + } + }, + "id": 5039, + "indexExpression": { + "argumentTypes": null, + "id": 5038, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5028, + "src": "5059:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "5047:17:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 5040, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5030, + "src": "5067:6:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5047:26:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5042, + "nodeType": "ExpressionStatement", + "src": "5047:26:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5043, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5090:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5036, + "id": 5044, + "nodeType": "Return", + "src": "5083:11:11" + } + ] + }, + "documentation": "@notice Set value for Bool associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@param _value The Bool value to be set\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5046, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5033, + "modifierName": { + "argumentTypes": null, + "id": 5032, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "5004:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "5004:9:11" + } + ], + "name": "setBool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5031, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5028, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5046, + "src": "4970:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5027, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4970:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 5030, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5046, + "src": "4984:11:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5029, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4984:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4969:27:11" + }, + "payable": false, + "returnParameters": { + "id": 5036, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5035, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5046, + "src": "5023:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5034, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5023:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5022:14:11" + }, + "scope": 5241, + "src": "4953:148:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5065, + "nodeType": "Block", + "src": "5466:63:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5061, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5057, + "name": "intStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4935, + "src": "5476:10:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_int256_$", + "typeString": "mapping(bytes32 => int256)" + } + }, + "id": 5059, + "indexExpression": { + "argumentTypes": null, + "id": 5058, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5048, + "src": "5487:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "5476:16:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 5060, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5050, + "src": "5495:6:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "5476:25:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 5062, + "nodeType": "ExpressionStatement", + "src": "5476:25:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5063, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5518:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5056, + "id": 5064, + "nodeType": "Return", + "src": "5511:11:11" + } + ] + }, + "documentation": "@notice Set value for Int associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@param _value The Int value to be set\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5066, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5053, + "modifierName": { + "argumentTypes": null, + "id": 5052, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "5433:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "5433:9:11" + } + ], + "name": "setInt", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5051, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5048, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5066, + "src": "5400:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5047, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5400:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 5050, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5066, + "src": "5414:10:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 5049, + "name": "int", + "nodeType": "ElementaryTypeName", + "src": "5414:3:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5399:26:11" + }, + "payable": false, + "returnParameters": { + "id": 5056, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5055, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5066, + "src": "5452:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5054, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5452:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5451:14:11" + }, + "scope": 5241, + "src": "5384:145:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5082, + "nodeType": "Block", + "src": "5978:65:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5078, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "5988:27:11", + "subExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5075, + "name": "addressStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4923, + "src": "5995:14:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", + "typeString": "mapping(bytes32 => address)" + } + }, + "id": 5077, + "indexExpression": { + "argumentTypes": null, + "id": 5076, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5068, + "src": "6010:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "5995:20:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5079, + "nodeType": "ExpressionStatement", + "src": "5988:27:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5080, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6032:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5074, + "id": 5081, + "nodeType": "Return", + "src": "6025:11:11" + } + ] + }, + "documentation": "@notice Delete value for Address associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5083, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5071, + "modifierName": { + "argumentTypes": null, + "id": 5070, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "5945:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "5945:9:11" + } + ], + "name": "deleteAddress", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5069, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5068, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5083, + "src": "5924:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5067, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5924:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5923:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5074, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5073, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5083, + "src": "5964:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5072, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5964:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5963:14:11" + }, + "scope": 5241, + "src": "5901:142:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5099, + "nodeType": "Block", + "src": "6359:62:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5095, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "6369:24:11", + "subExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5092, + "name": "uIntStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4915, + "src": "6376:11:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 5094, + "indexExpression": { + "argumentTypes": null, + "id": 5093, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5085, + "src": "6388:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "6376:17:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5096, + "nodeType": "ExpressionStatement", + "src": "6369:24:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5097, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6410:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5091, + "id": 5098, + "nodeType": "Return", + "src": "6403:11:11" + } + ] + }, + "documentation": "@notice Delete value for Uint associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5100, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5088, + "modifierName": { + "argumentTypes": null, + "id": 5087, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "6326:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "6326:9:11" + } + ], + "name": "deleteUint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5086, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5085, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5100, + "src": "6305:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5084, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6305:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6304:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5091, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5090, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5100, + "src": "6345:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5089, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6345:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6344:14:11" + }, + "scope": 5241, + "src": "6285:136:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5116, + "nodeType": "Block", + "src": "6741:64:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5112, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "6751:26:11", + "subExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5109, + "name": "stringStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4919, + "src": "6758:13:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_string_storage_$", + "typeString": "mapping(bytes32 => string storage ref)" + } + }, + "id": 5111, + "indexExpression": { + "argumentTypes": null, + "id": 5110, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5102, + "src": "6772:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "6758:19:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5113, + "nodeType": "ExpressionStatement", + "src": "6751:26:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5114, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6794:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5108, + "id": 5115, + "nodeType": "Return", + "src": "6787:11:11" + } + ] + }, + "documentation": "@notice Delete value for String associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5117, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5105, + "modifierName": { + "argumentTypes": null, + "id": 5104, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "6708:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "6708:9:11" + } + ], + "name": "deleteString", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5103, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5102, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5117, + "src": "6687:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5101, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6687:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6686:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5108, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5107, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5117, + "src": "6727:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5106, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6727:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6726:14:11" + }, + "scope": 5241, + "src": "6665:140:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5133, + "nodeType": "Block", + "src": "7123:63:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5129, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "7133:25:11", + "subExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5126, + "name": "bytesStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4927, + "src": "7140:12:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes_storage_$", + "typeString": "mapping(bytes32 => bytes storage ref)" + } + }, + "id": 5128, + "indexExpression": { + "argumentTypes": null, + "id": 5127, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5119, + "src": "7153:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7140:18:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage", + "typeString": "bytes storage ref" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5130, + "nodeType": "ExpressionStatement", + "src": "7133:25:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5131, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7175:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5125, + "id": 5132, + "nodeType": "Return", + "src": "7168:11:11" + } + ] + }, + "documentation": "@notice Delete value for Bytes associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5134, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5122, + "modifierName": { + "argumentTypes": null, + "id": 5121, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "7090:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "7090:9:11" + } + ], + "name": "deleteBytes", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5120, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5119, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5134, + "src": "7069:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5118, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7069:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7068:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5125, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5124, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5134, + "src": "7109:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5123, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7109:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7108:14:11" + }, + "scope": 5241, + "src": "7048:138:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5150, + "nodeType": "Block", + "src": "7502:62:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5146, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "7512:24:11", + "subExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5143, + "name": "boolStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4931, + "src": "7519:11:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", + "typeString": "mapping(bytes32 => bool)" + } + }, + "id": 5145, + "indexExpression": { + "argumentTypes": null, + "id": 5144, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5136, + "src": "7531:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7519:17:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5147, + "nodeType": "ExpressionStatement", + "src": "7512:24:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5148, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7553:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5142, + "id": 5149, + "nodeType": "Return", + "src": "7546:11:11" + } + ] + }, + "documentation": "@notice Delete value for Bool associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5151, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5139, + "modifierName": { + "argumentTypes": null, + "id": 5138, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "7469:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "7469:9:11" + } + ], + "name": "deleteBool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5137, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5136, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5151, + "src": "7448:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5135, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7448:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7447:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5142, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5141, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5151, + "src": "7488:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5140, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7488:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7487:14:11" + }, + "scope": 5241, + "src": "7428:136:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5167, + "nodeType": "Block", + "src": "7878:61:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5163, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "7888:23:11", + "subExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5160, + "name": "intStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4935, + "src": "7895:10:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_int256_$", + "typeString": "mapping(bytes32 => int256)" + } + }, + "id": 5162, + "indexExpression": { + "argumentTypes": null, + "id": 5161, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5153, + "src": "7906:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7895:16:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5164, + "nodeType": "ExpressionStatement", + "src": "7888:23:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5165, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7928:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5159, + "id": 5166, + "nodeType": "Return", + "src": "7921:11:11" + } + ] + }, + "documentation": "@notice Delete value for Int associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5168, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5156, + "modifierName": { + "argumentTypes": null, + "id": 5155, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "7845:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "7845:9:11" + } + ], + "name": "deleteInt", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5154, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5153, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5168, + "src": "7824:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5152, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7824:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7823:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5159, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5158, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5168, + "src": "7864:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5157, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7864:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7863:14:11" + }, + "scope": 5241, + "src": "7805:134:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5179, + "nodeType": "Block", + "src": "8274:44:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5175, + "name": "addressStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4923, + "src": "8291:14:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", + "typeString": "mapping(bytes32 => address)" + } + }, + "id": 5177, + "indexExpression": { + "argumentTypes": null, + "id": 5176, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5170, + "src": "8306:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8291:20:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 5174, + "id": 5178, + "nodeType": "Return", + "src": "8284:27:11" + } + ] + }, + "documentation": "@notice Get value for Address associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"_value\" : \"Returns the Address value associated with the id key\" }", + "id": 5180, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getAddress", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5171, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5170, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5180, + "src": "8223:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5169, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8223:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8222:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5174, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5173, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5180, + "src": "8258:14:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5172, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8258:7:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8257:16:11" + }, + "scope": 5241, + "src": "8203:115:11", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5191, + "nodeType": "Block", + "src": "8611:41:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5187, + "name": "uIntStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4915, + "src": "8628:11:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 5189, + "indexExpression": { + "argumentTypes": null, + "id": 5188, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5182, + "src": "8640:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8628:17:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 5186, + "id": 5190, + "nodeType": "Return", + "src": "8621:24:11" + } + ] + }, + "documentation": "@notice Get value for Uint associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"_value\" : \"Returns the Uint value associated with the id key\" }", + "id": 5192, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getUint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5183, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5182, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5192, + "src": "8563:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5181, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8563:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8562:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5186, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5185, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5192, + "src": "8598:11:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5184, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "8598:4:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8597:13:11" + }, + "scope": 5241, + "src": "8546:106:11", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5203, + "nodeType": "Block", + "src": "8953:43:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5199, + "name": "stringStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4919, + "src": "8970:13:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_string_storage_$", + "typeString": "mapping(bytes32 => string storage ref)" + } + }, + "id": 5201, + "indexExpression": { + "argumentTypes": null, + "id": 5200, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5194, + "src": "8984:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8970:19:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "functionReturnParameters": 5198, + "id": 5202, + "nodeType": "Return", + "src": "8963:26:11" + } + ] + }, + "documentation": "@notice Get value for String associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"_value\" : \"Returns the String value associated with the id key\" }", + "id": 5204, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getString", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5195, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5194, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5204, + "src": "8903:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5193, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8903:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8902:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5198, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5197, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5204, + "src": "8938:13:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 5196, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "8938:6:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8937:15:11" + }, + "scope": 5241, + "src": "8884:112:11", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5215, + "nodeType": "Block", + "src": "9293:42:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5211, + "name": "bytesStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4927, + "src": "9310:12:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes_storage_$", + "typeString": "mapping(bytes32 => bytes storage ref)" + } + }, + "id": 5213, + "indexExpression": { + "argumentTypes": null, + "id": 5212, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5206, + "src": "9323:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9310:18:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage", + "typeString": "bytes storage ref" + } + }, + "functionReturnParameters": 5210, + "id": 5214, + "nodeType": "Return", + "src": "9303:25:11" + } + ] + }, + "documentation": "@notice Get value for Bytes associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"_value\" : \"Returns the Bytes value associated with the id key\" }", + "id": 5216, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getBytes", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5207, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5206, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5216, + "src": "9244:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5205, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "9244:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9243:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5210, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5209, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5216, + "src": "9279:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5208, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "9279:5:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9278:14:11" + }, + "scope": 5241, + "src": "9226:109:11", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5227, + "nodeType": "Block", + "src": "9628:41:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5223, + "name": "boolStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4931, + "src": "9645:11:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", + "typeString": "mapping(bytes32 => bool)" + } + }, + "id": 5225, + "indexExpression": { + "argumentTypes": null, + "id": 5224, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5218, + "src": "9657:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9645:17:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 5222, + "id": 5226, + "nodeType": "Return", + "src": "9638:24:11" + } + ] + }, + "documentation": "@notice Get value for Bool associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"_value\" : \"Returns the Bool value associated with the id key\" }", + "id": 5228, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getBool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5219, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5218, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5228, + "src": "9580:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5217, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "9580:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9579:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5222, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5221, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5228, + "src": "9615:11:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5220, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "9615:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9614:13:11" + }, + "scope": 5241, + "src": "9563:106:11", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5239, + "nodeType": "Block", + "src": "9958:40:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5235, + "name": "intStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4935, + "src": "9975:10:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_int256_$", + "typeString": "mapping(bytes32 => int256)" + } + }, + "id": 5237, + "indexExpression": { + "argumentTypes": null, + "id": 5236, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5230, + "src": "9986:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9975:16:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "functionReturnParameters": 5234, + "id": 5238, + "nodeType": "Return", + "src": "9968:23:11" + } + ] + }, + "documentation": "@notice Get value for Int associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"_value\" : \"Returns the Int value associated with the id key\" }", + "id": 5240, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getInt", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5231, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5230, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5240, + "src": "9911:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5229, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "9911:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9910:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5234, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5233, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5240, + "src": "9946:10:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 5232, + "name": "int", + "nodeType": "ElementaryTypeName", + "src": "9946:3:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9945:12:11" + }, + "scope": 5241, + "src": "9895:103:11", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 5242, + "src": "1972:8029:11" + } + ], + "src": "0:10002:11" + }, + "compiler": { + "name": "solc", + "version": "0.4.24+commit.e67f0147.Emscripten.clang" + }, + "networks": { + "1": { + "events": { + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + "0x1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c5": { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "AllowOwnership", + "type": "event" + }, + "0x2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad98": { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "RevokeOwnership", + "type": "event" + } + }, + "links": {}, + "address": "0xe8f0b03249a078cbb1cc5b58addb6c289952a036", + "transactionHash": "0x707a50aa241ab7a9355e1a9a30ecb8f8d762228ff6f4a9862e3aa0f52fe25fba" + } + }, + "schemaVersion": "2.0.1", + "updatedAt": "2018-09-18T18:57:45.570Z" +} \ No newline at end of file diff --git a/deployed/mainnet-v1.0.1/Migrations.json b/deployed/mainnet-v1.0.1/Migrations.json new file mode 100644 index 0000000..66cd860 --- /dev/null +++ b/deployed/mainnet-v1.0.1/Migrations.json @@ -0,0 +1,1391 @@ +{ + "contractName": "Migrations", + "abi": [ + { + "constant": true, + "inputs": [], + "name": "last_completed_migration", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "constant": false, + "inputs": [ + { + "name": "completed", + "type": "uint256" + } + ], + "name": "setCompleted", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "new_address", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5060008054600160a060020a0319163317905561023c806100326000396000f3006080604052600436106100615763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630900f0108114610066578063445df0ac146100965780638da5cb5b146100bd578063fdacd576146100fb575b600080fd5b34801561007257600080fd5b5061009473ffffffffffffffffffffffffffffffffffffffff60043516610113565b005b3480156100a257600080fd5b506100ab6101c5565b60408051918252519081900360200190f35b3480156100c957600080fd5b506100d26101cb565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561010757600080fd5b506100946004356101e7565b6000805473ffffffffffffffffffffffffffffffffffffffff163314156101c1578190508073ffffffffffffffffffffffffffffffffffffffff1663fdacd5766001546040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b1580156101a857600080fd5b505af11580156101bc573d6000803e3d6000fd5b505050505b5050565b60015481565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1633141561020d5760018190555b505600a165627a7a723058200175751d280e290aa803e109324413a03bf62768201f1dae333300fb6049ffaf0029", + "deployedBytecode": "0x6080604052600436106100615763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630900f0108114610066578063445df0ac146100965780638da5cb5b146100bd578063fdacd576146100fb575b600080fd5b34801561007257600080fd5b5061009473ffffffffffffffffffffffffffffffffffffffff60043516610113565b005b3480156100a257600080fd5b506100ab6101c5565b60408051918252519081900360200190f35b3480156100c957600080fd5b506100d26101cb565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561010757600080fd5b506100946004356101e7565b6000805473ffffffffffffffffffffffffffffffffffffffff163314156101c1578190508073ffffffffffffffffffffffffffffffffffffffff1663fdacd5766001546040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b1580156101a857600080fd5b505af11580156101bc573d6000803e3d6000fd5b505050505b5050565b60015481565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1633141561020d5760018190555b505600a165627a7a723058200175751d280e290aa803e109324413a03bf62768201f1dae333300fb6049ffaf0029", + "sourceMap": "25:480:0:-;;;177:50;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;204:5:0;:18;;-1:-1:-1;;;;;;204:18:0;212:10;204:18;;;25:480;;;;;;", + "deployedSourceMap": "25:480:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;338:165;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;338:165:0;;;;;;;;;73:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;73:36:0;;;;;;;;;;;;;;;;;;;;49:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49:20:0;;;;;;;;;;;;;;;;;;;;;;;231:103;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;231:103:0;;;;;338:165;400:19;160:5;;;;146:10;:19;142:26;;;433:11;400:45;;451:8;:21;;;473:24;;451:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;451:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;451:47:0;;;;142:26;338:165;;:::o;73:36::-;;;;:::o;49:20::-;;;;;;:::o;231:103::-;160:5;;;;146:10;:19;142:26;;;293:24;:36;;;142:26;231:103;:::o", + "source": "pragma solidity 0.4.24;\n\ncontract Migrations {\n address public owner;\n uint public last_completed_migration;\n\n modifier restricted() {\n if (msg.sender == owner) _;\n }\n\n constructor() public {\n owner = msg.sender;\n }\n\n function setCompleted(uint completed) public restricted {\n last_completed_migration = completed;\n }\n\n function upgrade(address new_address) public restricted {\n Migrations upgraded = Migrations(new_address);\n upgraded.setCompleted(last_completed_migration);\n }\n}\n", + "sourcePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Migrations.sol", + "ast": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Migrations.sol", + "exportedSymbols": { + "Migrations": [ + 56 + ] + }, + "id": 57, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:0" + }, + { + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 56, + "linearizedBaseContracts": [ + 56 + ], + "name": "Migrations", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 3, + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 56, + "src": "49:20:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "49:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "id": 5, + "name": "last_completed_migration", + "nodeType": "VariableDeclaration", + "scope": 56, + "src": "73:36:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "73:4:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "public" + }, + { + "body": { + "id": 13, + "nodeType": "Block", + "src": "136:37:0", + "statements": [ + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 10, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 7, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "146:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 8, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "146:10:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 9, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3, + "src": "160:5:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "146:19:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 12, + "nodeType": "IfStatement", + "src": "142:26:0", + "trueBody": { + "id": 11, + "nodeType": "PlaceholderStatement", + "src": "167:1:0" + } + } + ] + }, + "documentation": null, + "id": 14, + "name": "restricted", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 6, + "nodeType": "ParameterList", + "parameters": [], + "src": "133:2:0" + }, + "src": "114:59:0", + "visibility": "internal" + }, + { + "body": { + "id": 22, + "nodeType": "Block", + "src": "198:29:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 20, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 17, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3, + "src": "204:5:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 18, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "212:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 19, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "212:10:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "204:18:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 21, + "nodeType": "ExpressionStatement", + "src": "204:18:0" + } + ] + }, + "documentation": null, + "id": 23, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 15, + "nodeType": "ParameterList", + "parameters": [], + "src": "188:2:0" + }, + "payable": false, + "returnParameters": { + "id": 16, + "nodeType": "ParameterList", + "parameters": [], + "src": "198:0:0" + }, + "scope": 56, + "src": "177:50:0", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 34, + "nodeType": "Block", + "src": "287:47:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 32, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 30, + "name": "last_completed_migration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5, + "src": "293:24:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 31, + "name": "completed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25, + "src": "320:9:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "293:36:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 33, + "nodeType": "ExpressionStatement", + "src": "293:36:0" + } + ] + }, + "documentation": null, + "id": 35, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 28, + "modifierName": { + "argumentTypes": null, + "id": 27, + "name": "restricted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14, + "src": "276:10:0", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "276:10:0" + } + ], + "name": "setCompleted", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 26, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 25, + "name": "completed", + "nodeType": "VariableDeclaration", + "scope": 35, + "src": "253:14:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 24, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "253:4:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "252:16:0" + }, + "payable": false, + "returnParameters": { + "id": 29, + "nodeType": "ParameterList", + "parameters": [], + "src": "287:0:0" + }, + "scope": 56, + "src": "231:103:0", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 54, + "nodeType": "Block", + "src": "394:109:0", + "statements": [ + { + "assignments": [ + 43 + ], + "declarations": [ + { + "constant": false, + "id": 43, + "name": "upgraded", + "nodeType": "VariableDeclaration", + "scope": 55, + "src": "400:19:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Migrations_$56", + "typeString": "contract Migrations" + }, + "typeName": { + "contractScope": null, + "id": 42, + "name": "Migrations", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 56, + "src": "400:10:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Migrations_$56", + "typeString": "contract Migrations" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 47, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 45, + "name": "new_address", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 37, + "src": "433:11:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 44, + "name": "Migrations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 56, + "src": "422:10:0", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Migrations_$56_$", + "typeString": "type(contract Migrations)" + } + }, + "id": 46, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "422:23:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Migrations_$56", + "typeString": "contract Migrations" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "400:45:0" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 51, + "name": "last_completed_migration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5, + "src": "473:24:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 48, + "name": "upgraded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 43, + "src": "451:8:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Migrations_$56", + "typeString": "contract Migrations" + } + }, + "id": 50, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "setCompleted", + "nodeType": "MemberAccess", + "referencedDeclaration": 35, + "src": "451:21:0", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256) external" + } + }, + "id": 52, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "451:47:0", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 53, + "nodeType": "ExpressionStatement", + "src": "451:47:0" + } + ] + }, + "documentation": null, + "id": 55, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 40, + "modifierName": { + "argumentTypes": null, + "id": 39, + "name": "restricted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14, + "src": "383:10:0", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "383:10:0" + } + ], + "name": "upgrade", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 38, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 37, + "name": "new_address", + "nodeType": "VariableDeclaration", + "scope": 55, + "src": "355:19:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 36, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "355:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "354:21:0" + }, + "payable": false, + "returnParameters": { + "id": 41, + "nodeType": "ParameterList", + "parameters": [], + "src": "394:0:0" + }, + "scope": 56, + "src": "338:165:0", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 57, + "src": "25:480:0" + } + ], + "src": "0:506:0" + }, + "legacyAST": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Migrations.sol", + "exportedSymbols": { + "Migrations": [ + 56 + ] + }, + "id": 57, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:0" + }, + { + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 56, + "linearizedBaseContracts": [ + 56 + ], + "name": "Migrations", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 3, + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 56, + "src": "49:20:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "49:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "id": 5, + "name": "last_completed_migration", + "nodeType": "VariableDeclaration", + "scope": 56, + "src": "73:36:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "73:4:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "public" + }, + { + "body": { + "id": 13, + "nodeType": "Block", + "src": "136:37:0", + "statements": [ + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 10, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 7, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "146:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 8, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "146:10:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 9, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3, + "src": "160:5:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "146:19:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 12, + "nodeType": "IfStatement", + "src": "142:26:0", + "trueBody": { + "id": 11, + "nodeType": "PlaceholderStatement", + "src": "167:1:0" + } + } + ] + }, + "documentation": null, + "id": 14, + "name": "restricted", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 6, + "nodeType": "ParameterList", + "parameters": [], + "src": "133:2:0" + }, + "src": "114:59:0", + "visibility": "internal" + }, + { + "body": { + "id": 22, + "nodeType": "Block", + "src": "198:29:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 20, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 17, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3, + "src": "204:5:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 18, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "212:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 19, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "212:10:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "204:18:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 21, + "nodeType": "ExpressionStatement", + "src": "204:18:0" + } + ] + }, + "documentation": null, + "id": 23, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 15, + "nodeType": "ParameterList", + "parameters": [], + "src": "188:2:0" + }, + "payable": false, + "returnParameters": { + "id": 16, + "nodeType": "ParameterList", + "parameters": [], + "src": "198:0:0" + }, + "scope": 56, + "src": "177:50:0", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 34, + "nodeType": "Block", + "src": "287:47:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 32, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 30, + "name": "last_completed_migration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5, + "src": "293:24:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 31, + "name": "completed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25, + "src": "320:9:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "293:36:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 33, + "nodeType": "ExpressionStatement", + "src": "293:36:0" + } + ] + }, + "documentation": null, + "id": 35, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 28, + "modifierName": { + "argumentTypes": null, + "id": 27, + "name": "restricted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14, + "src": "276:10:0", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "276:10:0" + } + ], + "name": "setCompleted", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 26, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 25, + "name": "completed", + "nodeType": "VariableDeclaration", + "scope": 35, + "src": "253:14:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 24, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "253:4:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "252:16:0" + }, + "payable": false, + "returnParameters": { + "id": 29, + "nodeType": "ParameterList", + "parameters": [], + "src": "287:0:0" + }, + "scope": 56, + "src": "231:103:0", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 54, + "nodeType": "Block", + "src": "394:109:0", + "statements": [ + { + "assignments": [ + 43 + ], + "declarations": [ + { + "constant": false, + "id": 43, + "name": "upgraded", + "nodeType": "VariableDeclaration", + "scope": 55, + "src": "400:19:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Migrations_$56", + "typeString": "contract Migrations" + }, + "typeName": { + "contractScope": null, + "id": 42, + "name": "Migrations", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 56, + "src": "400:10:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Migrations_$56", + "typeString": "contract Migrations" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 47, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 45, + "name": "new_address", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 37, + "src": "433:11:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 44, + "name": "Migrations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 56, + "src": "422:10:0", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Migrations_$56_$", + "typeString": "type(contract Migrations)" + } + }, + "id": 46, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "422:23:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Migrations_$56", + "typeString": "contract Migrations" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "400:45:0" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 51, + "name": "last_completed_migration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5, + "src": "473:24:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 48, + "name": "upgraded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 43, + "src": "451:8:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Migrations_$56", + "typeString": "contract Migrations" + } + }, + "id": 50, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "setCompleted", + "nodeType": "MemberAccess", + "referencedDeclaration": 35, + "src": "451:21:0", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256) external" + } + }, + "id": 52, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "451:47:0", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 53, + "nodeType": "ExpressionStatement", + "src": "451:47:0" + } + ] + }, + "documentation": null, + "id": 55, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 40, + "modifierName": { + "argumentTypes": null, + "id": 39, + "name": "restricted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14, + "src": "383:10:0", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "383:10:0" + } + ], + "name": "upgrade", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 38, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 37, + "name": "new_address", + "nodeType": "VariableDeclaration", + "scope": 55, + "src": "355:19:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 36, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "355:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "354:21:0" + }, + "payable": false, + "returnParameters": { + "id": 41, + "nodeType": "ParameterList", + "parameters": [], + "src": "394:0:0" + }, + "scope": 56, + "src": "338:165:0", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 57, + "src": "25:480:0" + } + ], + "src": "0:506:0" + }, + "compiler": { + "name": "solc", + "version": "0.4.24+commit.e67f0147.Emscripten.clang" + }, + "networks": { + "1": { + "events": {}, + "links": {}, + "address": "0x2c73bd47580b2a2ba9cfac4fc73fed07764a72f0", + "transactionHash": "0x3d17429f13502b53740e7286b2601a714ec8fb453df24a5b794feb077e617699" + }, + "4447": { + "events": {}, + "links": {}, + "address": "0x8cdaf0cd259887258bc13a92c0a6da92698644c0", + "transactionHash": "0x80dd84284a64bae0c034e86d4a4253eec382f9e557f56d2cc6fe606c8fe346f7" + } + }, + "schemaVersion": "2.0.1", + "updatedAt": "2018-10-24T17:41:08.921Z" +} \ No newline at end of file diff --git a/deployed/mainnet-v1.0.1/Ownable.json b/deployed/mainnet-v1.0.1/Ownable.json new file mode 100644 index 0000000..170651b --- /dev/null +++ b/deployed/mainnet-v1.0.1/Ownable.json @@ -0,0 +1,3323 @@ +{ + "contractName": "Ownable", + "abi": [ + { + "constant": true, + "inputs": [ + { + "name": "", + "type": "address" + } + ], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "AllowOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "RevokeOwnership", + "type": "event" + }, + { + "constant": false, + "inputs": [ + { + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "allowOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "removeOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50336000908152602081905260409020805460ff1916600117905561045a8061003a6000396000f3006080604052600436106100615763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416634bbc142c8114610066578063666a34271461009b578063666e1b39146100bc578063f2fde38b146100dd575b600080fd5b34801561007257600080fd5b50610087600160a060020a03600435166100fe565b604080519115158252519081900360200190f35b3480156100a757600080fd5b50610087600160a060020a03600435166101de565b3480156100c857600080fd5b50610087600160a060020a03600435166102bb565b3480156100e957600080fd5b50610087600160a060020a03600435166102d0565b3360009081526020819052604081205460ff16151561018d576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b3360009081526020819052604081205460ff16151561026d576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b3360009081526020819052604081205460ff16151561035f576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a03821615156103bf576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff1991821681179092553384529190922080549091169055905600a165627a7a72305820008982c7122c078b3561e82dc528b2b9c23f88189abb0e2866f411c5d2edc7950029", + "deployedBytecode": "0x6080604052600436106100615763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416634bbc142c8114610066578063666a34271461009b578063666e1b39146100bc578063f2fde38b146100dd575b600080fd5b34801561007257600080fd5b50610087600160a060020a03600435166100fe565b604080519115158252519081900360200190f35b3480156100a757600080fd5b50610087600160a060020a03600435166101de565b3480156100c857600080fd5b50610087600160a060020a03600435166102bb565b3480156100e957600080fd5b50610087600160a060020a03600435166102d0565b3360009081526020819052604081205460ff16151561018d576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b3360009081526020819052604081205460ff16151561026d576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b3360009081526020819052604081205460ff16151561035f576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a03821615156103bf576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff1991821681179092553384529190922080549091169055905600a165627a7a72305820008982c7122c078b3561e82dc528b2b9c23f88189abb0e2866f411c5d2edc7950029", + "sourceMap": "703:2059:1:-;;;1084:56;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1117:10:1;1111:5;:17;;;;;;;;;;:24;;-1:-1:-1;;1111:24:1;1131:4;1111:24;;;703:2059;;;;;;", + "deployedSourceMap": "703:2059:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2127:185;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2127:185:1;-1:-1:-1;;;;;2127:185:1;;;;;;;;;;;;;;;;;;;;;;;2571:188;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2571:188:1;-1:-1:-1;;;;;2571:188:1;;;;;725:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;725:37:1;-1:-1:-1;;;;;725:37:1;;;;;1589:291;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1589:291:1;-1:-1:-1;;;;;1589:291:1;;;;;2127:185;1261:10;2201:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2221:21:1;;:5;:21;;;;;;;;;;;:28;;-1:-1:-1;;2221:28:1;2245:4;2221:28;;;2260:30;;;2221:5;2260:30;-1:-1:-1;2303:4:1;2127:185;;;:::o;2571:188::-;1261:10;2646:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2666:21:1;;2690:5;2666:21;;;;;;;;;;;:29;;-1:-1:-1;;2666:29:1;;;2706:31;;;2690:5;2706:31;-1:-1:-1;2750:4:1;2571:188;;;:::o;725:37::-;;;;;;;;;;;;;;;;:::o;1589:291::-;1261:10;1660:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1688:22:1;;;;1680:66;;;;;-1:-1:-1;;;;;1680:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1757:42;;-1:-1:-1;;;;;1757:42:1;;;1778:10;;1757:42;;;;;-1:-1:-1;;;;;;1805:15:1;:5;:15;;;;;;;;;;;:22;;1823:4;-1:-1:-1;;1805:22:1;;;;;;;;1839:10;1833:17;;;;;;:25;;;;;;;1823:4;1589:291::o", + "source": "pragma solidity 0.4.24;\n\n\n\n\n/**\n\nCOPYRIGHT 2018 Token, Inc.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n@title Ownable\n@dev The Ownable contract has an owner address, and provides basic authorization control\nfunctions, this simplifies the implementation of \"user permissions\".\n\n\n */\ncontract Ownable {\n\n mapping(address => bool) public owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n event AllowOwnership(address indexed allowedAddress);\n event RevokeOwnership(address indexed allowedAddress);\n\n /**\n * @dev The Ownable constructor sets the original `owner` of the contract to the sender\n * account.\n */\n constructor() public {\n owner[msg.sender] = true;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner[msg.sender], \"Error: Transaction sender is not allowed by the contract.\");\n _;\n }\n\n /**\n * @dev Allows the current owner to transfer control of the contract to a newOwner.\n * @param newOwner The address to transfer ownership to.\n * @return {\"success\" : \"Returns true when successfully transferred ownership\"}\n */\n function transferOwnership(address newOwner) public onlyOwner returns (bool success) {\n require(newOwner != address(0), \"Error: newOwner cannot be null!\");\n emit OwnershipTransferred(msg.sender, newOwner);\n owner[newOwner] = true;\n owner[msg.sender] = false;\n return true;\n }\n\n /**\n * @dev Allows interface contracts and accounts to access contract methods (e.g. Storage contract)\n * @param allowedAddress The address of new owner\n * @return {\"success\" : \"Returns true when successfully allowed ownership\"}\n */\n function allowOwnership(address allowedAddress) public onlyOwner returns (bool success) {\n owner[allowedAddress] = true;\n emit AllowOwnership(allowedAddress);\n return true;\n }\n\n /**\n * @dev Disallows interface contracts and accounts to access contract methods (e.g. Storage contract)\n * @param allowedAddress The address to disallow ownership\n * @return {\"success\" : \"Returns true when successfully allowed ownership\"}\n */\n function removeOwnership(address allowedAddress) public onlyOwner returns (bool success) {\n owner[allowedAddress] = false;\n emit RevokeOwnership(allowedAddress);\n return true;\n }\n\n}\n", + "sourcePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "ast": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "exportedSymbols": { + "Ownable": [ + 184 + ] + }, + "id": 185, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 58, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:1" + }, + { + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": "COPYRIGHT 2018 Token, Inc.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n@title Ownable\n@dev The Ownable contract has an owner address, and provides basic authorization control\nfunctions, this simplifies the implementation of \"user permissions\".", + "fullyImplemented": true, + "id": 184, + "linearizedBaseContracts": [ + 184 + ], + "name": "Ownable", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 62, + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 184, + "src": "725:37:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "typeName": { + "id": 61, + "keyType": { + "id": 59, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "733:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "725:24:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "valueType": { + "id": 60, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "744:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + }, + "value": null, + "visibility": "public" + }, + { + "anonymous": false, + "documentation": null, + "id": 68, + "name": "OwnershipTransferred", + "nodeType": "EventDefinition", + "parameters": { + "id": 67, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 64, + "indexed": true, + "name": "previousOwner", + "nodeType": "VariableDeclaration", + "scope": 68, + "src": "794:29:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 63, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "794:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 66, + "indexed": true, + "name": "newOwner", + "nodeType": "VariableDeclaration", + "scope": 68, + "src": "825:24:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 65, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "825:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "793:57:1" + }, + "src": "767:84:1" + }, + { + "anonymous": false, + "documentation": null, + "id": 72, + "name": "AllowOwnership", + "nodeType": "EventDefinition", + "parameters": { + "id": 71, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 70, + "indexed": true, + "name": "allowedAddress", + "nodeType": "VariableDeclaration", + "scope": 72, + "src": "875:30:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 69, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "875:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "874:32:1" + }, + "src": "854:53:1" + }, + { + "anonymous": false, + "documentation": null, + "id": 76, + "name": "RevokeOwnership", + "nodeType": "EventDefinition", + "parameters": { + "id": 75, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 74, + "indexed": true, + "name": "allowedAddress", + "nodeType": "VariableDeclaration", + "scope": 76, + "src": "932:30:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 73, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "932:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "931:32:1" + }, + "src": "910:54:1" + }, + { + "body": { + "id": 86, + "nodeType": "Block", + "src": "1105:35:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 84, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 79, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1111:5:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 82, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 80, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "1117:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 81, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1117:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1111:17:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 83, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1131:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1111:24:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 85, + "nodeType": "ExpressionStatement", + "src": "1111:24:1" + } + ] + }, + "documentation": "@dev The Ownable constructor sets the original `owner` of the contract to the sender\naccount.", + "id": 87, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 77, + "nodeType": "ParameterList", + "parameters": [], + "src": "1095:2:1" + }, + "payable": false, + "returnParameters": { + "id": 78, + "nodeType": "ParameterList", + "parameters": [], + "src": "1105:0:1" + }, + "scope": 184, + "src": "1084:56:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 98, + "nodeType": "Block", + "src": "1241:105:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 90, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1255:5:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 93, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 91, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "1261:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 92, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1261:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1255:17:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7420616c6c6f7765642062792074686520636f6e74726163742e", + "id": 94, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1274:59:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_8291170cda70aa6a33f032b286d45ac3395ac65762e92264c69af22ca29fa73f", + "typeString": "literal_string \"Error: Transaction sender is not allowed by the contract.\"" + }, + "value": "Error: Transaction sender is not allowed by the contract." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_8291170cda70aa6a33f032b286d45ac3395ac65762e92264c69af22ca29fa73f", + "typeString": "literal_string \"Error: Transaction sender is not allowed by the contract.\"" + } + ], + "id": 89, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "1247:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 95, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1247:87:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 96, + "nodeType": "ExpressionStatement", + "src": "1247:87:1" + }, + { + "id": 97, + "nodeType": "PlaceholderStatement", + "src": "1340:1:1" + } + ] + }, + "documentation": "@dev Throws if called by any account other than the owner.", + "id": 99, + "name": "onlyOwner", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 88, + "nodeType": "ParameterList", + "parameters": [], + "src": "1238:2:1" + }, + "src": "1220:126:1", + "visibility": "internal" + }, + { + "body": { + "id": 138, + "nodeType": "Block", + "src": "1674:206:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 113, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 109, + "name": "newOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 101, + "src": "1688:8:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 111, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1708:1:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 110, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1700:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 112, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1700:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1688:22:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c21", + "id": 114, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1712:33:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0cf773df2ba40d551ba87e95013f067aa808666d9d26ad6f662416df58eb7494", + "typeString": "literal_string \"Error: newOwner cannot be null!\"" + }, + "value": "Error: newOwner cannot be null!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0cf773df2ba40d551ba87e95013f067aa808666d9d26ad6f662416df58eb7494", + "typeString": "literal_string \"Error: newOwner cannot be null!\"" + } + ], + "id": 108, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "1680:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 115, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1680:66:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 116, + "nodeType": "ExpressionStatement", + "src": "1680:66:1" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 118, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "1778:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 119, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1778:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 120, + "name": "newOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 101, + "src": "1790:8:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 117, + "name": "OwnershipTransferred", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 68, + "src": "1757:20:1", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", + "typeString": "function (address,address)" + } + }, + "id": 121, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1757:42:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 122, + "nodeType": "EmitStatement", + "src": "1752:47:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 127, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 123, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1805:5:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 125, + "indexExpression": { + "argumentTypes": null, + "id": 124, + "name": "newOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 101, + "src": "1811:8:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1805:15:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 126, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1823:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1805:22:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 128, + "nodeType": "ExpressionStatement", + "src": "1805:22:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 134, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 129, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1833:5:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 132, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 130, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "1839:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 131, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1839:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1833:17:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 133, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1853:5:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "src": "1833:25:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 135, + "nodeType": "ExpressionStatement", + "src": "1833:25:1" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 136, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1871:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 107, + "id": 137, + "nodeType": "Return", + "src": "1864:11:1" + } + ] + }, + "documentation": "@dev Allows the current owner to transfer control of the contract to a newOwner.\n@param newOwner The address to transfer ownership to.\n@return {\"success\" : \"Returns true when successfully transferred ownership\"}", + "id": 139, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 104, + "modifierName": { + "argumentTypes": null, + "id": 103, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "1641:9:1", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "1641:9:1" + } + ], + "name": "transferOwnership", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 102, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 101, + "name": "newOwner", + "nodeType": "VariableDeclaration", + "scope": 139, + "src": "1616:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 100, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1616:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1615:18:1" + }, + "payable": false, + "returnParameters": { + "id": 107, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 106, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 139, + "src": "1660:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 105, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1660:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1659:14:1" + }, + "scope": 184, + "src": "1589:291:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 160, + "nodeType": "Block", + "src": "2215:97:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 152, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 148, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "2221:5:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 150, + "indexExpression": { + "argumentTypes": null, + "id": 149, + "name": "allowedAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 141, + "src": "2227:14:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2221:21:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 151, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2245:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "2221:28:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 153, + "nodeType": "ExpressionStatement", + "src": "2221:28:1" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 155, + "name": "allowedAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 141, + "src": "2275:14:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 154, + "name": "AllowOwnership", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 72, + "src": "2260:14:1", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 156, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2260:30:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 157, + "nodeType": "EmitStatement", + "src": "2255:35:1" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 158, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2303:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 147, + "id": 159, + "nodeType": "Return", + "src": "2296:11:1" + } + ] + }, + "documentation": "@dev Allows interface contracts and accounts to access contract methods (e.g. Storage contract)\n@param allowedAddress The address of new owner\n@return {\"success\" : \"Returns true when successfully allowed ownership\"}", + "id": 161, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 144, + "modifierName": { + "argumentTypes": null, + "id": 143, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "2182:9:1", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2182:9:1" + } + ], + "name": "allowOwnership", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 142, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 141, + "name": "allowedAddress", + "nodeType": "VariableDeclaration", + "scope": 161, + "src": "2151:22:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 140, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2151:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2150:24:1" + }, + "payable": false, + "returnParameters": { + "id": 147, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 146, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 161, + "src": "2201:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 145, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2201:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2200:14:1" + }, + "scope": 184, + "src": "2127:185:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 182, + "nodeType": "Block", + "src": "2660:99:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 174, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 170, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "2666:5:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 172, + "indexExpression": { + "argumentTypes": null, + "id": 171, + "name": "allowedAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 163, + "src": "2672:14:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2666:21:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 173, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2690:5:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "src": "2666:29:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 175, + "nodeType": "ExpressionStatement", + "src": "2666:29:1" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 177, + "name": "allowedAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 163, + "src": "2722:14:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 176, + "name": "RevokeOwnership", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 76, + "src": "2706:15:1", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 178, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2706:31:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 179, + "nodeType": "EmitStatement", + "src": "2701:36:1" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 180, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2750:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 169, + "id": 181, + "nodeType": "Return", + "src": "2743:11:1" + } + ] + }, + "documentation": "@dev Disallows interface contracts and accounts to access contract methods (e.g. Storage contract)\n@param allowedAddress The address to disallow ownership\n@return {\"success\" : \"Returns true when successfully allowed ownership\"}", + "id": 183, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 166, + "modifierName": { + "argumentTypes": null, + "id": 165, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "2627:9:1", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2627:9:1" + } + ], + "name": "removeOwnership", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 164, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 163, + "name": "allowedAddress", + "nodeType": "VariableDeclaration", + "scope": 183, + "src": "2596:22:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 162, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2596:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2595:24:1" + }, + "payable": false, + "returnParameters": { + "id": 169, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 168, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 183, + "src": "2646:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 167, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2646:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2645:14:1" + }, + "scope": 184, + "src": "2571:188:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 185, + "src": "703:2059:1" + } + ], + "src": "0:2763:1" + }, + "legacyAST": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "exportedSymbols": { + "Ownable": [ + 184 + ] + }, + "id": 185, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 58, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:1" + }, + { + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": "COPYRIGHT 2018 Token, Inc.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n@title Ownable\n@dev The Ownable contract has an owner address, and provides basic authorization control\nfunctions, this simplifies the implementation of \"user permissions\".", + "fullyImplemented": true, + "id": 184, + "linearizedBaseContracts": [ + 184 + ], + "name": "Ownable", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 62, + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 184, + "src": "725:37:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "typeName": { + "id": 61, + "keyType": { + "id": 59, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "733:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "725:24:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "valueType": { + "id": 60, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "744:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + }, + "value": null, + "visibility": "public" + }, + { + "anonymous": false, + "documentation": null, + "id": 68, + "name": "OwnershipTransferred", + "nodeType": "EventDefinition", + "parameters": { + "id": 67, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 64, + "indexed": true, + "name": "previousOwner", + "nodeType": "VariableDeclaration", + "scope": 68, + "src": "794:29:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 63, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "794:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 66, + "indexed": true, + "name": "newOwner", + "nodeType": "VariableDeclaration", + "scope": 68, + "src": "825:24:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 65, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "825:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "793:57:1" + }, + "src": "767:84:1" + }, + { + "anonymous": false, + "documentation": null, + "id": 72, + "name": "AllowOwnership", + "nodeType": "EventDefinition", + "parameters": { + "id": 71, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 70, + "indexed": true, + "name": "allowedAddress", + "nodeType": "VariableDeclaration", + "scope": 72, + "src": "875:30:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 69, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "875:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "874:32:1" + }, + "src": "854:53:1" + }, + { + "anonymous": false, + "documentation": null, + "id": 76, + "name": "RevokeOwnership", + "nodeType": "EventDefinition", + "parameters": { + "id": 75, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 74, + "indexed": true, + "name": "allowedAddress", + "nodeType": "VariableDeclaration", + "scope": 76, + "src": "932:30:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 73, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "932:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "931:32:1" + }, + "src": "910:54:1" + }, + { + "body": { + "id": 86, + "nodeType": "Block", + "src": "1105:35:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 84, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 79, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1111:5:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 82, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 80, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "1117:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 81, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1117:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1111:17:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 83, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1131:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1111:24:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 85, + "nodeType": "ExpressionStatement", + "src": "1111:24:1" + } + ] + }, + "documentation": "@dev The Ownable constructor sets the original `owner` of the contract to the sender\naccount.", + "id": 87, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 77, + "nodeType": "ParameterList", + "parameters": [], + "src": "1095:2:1" + }, + "payable": false, + "returnParameters": { + "id": 78, + "nodeType": "ParameterList", + "parameters": [], + "src": "1105:0:1" + }, + "scope": 184, + "src": "1084:56:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 98, + "nodeType": "Block", + "src": "1241:105:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 90, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1255:5:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 93, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 91, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "1261:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 92, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1261:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1255:17:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7420616c6c6f7765642062792074686520636f6e74726163742e", + "id": 94, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1274:59:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_8291170cda70aa6a33f032b286d45ac3395ac65762e92264c69af22ca29fa73f", + "typeString": "literal_string \"Error: Transaction sender is not allowed by the contract.\"" + }, + "value": "Error: Transaction sender is not allowed by the contract." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_8291170cda70aa6a33f032b286d45ac3395ac65762e92264c69af22ca29fa73f", + "typeString": "literal_string \"Error: Transaction sender is not allowed by the contract.\"" + } + ], + "id": 89, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "1247:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 95, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1247:87:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 96, + "nodeType": "ExpressionStatement", + "src": "1247:87:1" + }, + { + "id": 97, + "nodeType": "PlaceholderStatement", + "src": "1340:1:1" + } + ] + }, + "documentation": "@dev Throws if called by any account other than the owner.", + "id": 99, + "name": "onlyOwner", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 88, + "nodeType": "ParameterList", + "parameters": [], + "src": "1238:2:1" + }, + "src": "1220:126:1", + "visibility": "internal" + }, + { + "body": { + "id": 138, + "nodeType": "Block", + "src": "1674:206:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 113, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 109, + "name": "newOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 101, + "src": "1688:8:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 111, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1708:1:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 110, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1700:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 112, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1700:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1688:22:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c21", + "id": 114, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1712:33:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0cf773df2ba40d551ba87e95013f067aa808666d9d26ad6f662416df58eb7494", + "typeString": "literal_string \"Error: newOwner cannot be null!\"" + }, + "value": "Error: newOwner cannot be null!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0cf773df2ba40d551ba87e95013f067aa808666d9d26ad6f662416df58eb7494", + "typeString": "literal_string \"Error: newOwner cannot be null!\"" + } + ], + "id": 108, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "1680:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 115, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1680:66:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 116, + "nodeType": "ExpressionStatement", + "src": "1680:66:1" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 118, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "1778:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 119, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1778:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 120, + "name": "newOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 101, + "src": "1790:8:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 117, + "name": "OwnershipTransferred", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 68, + "src": "1757:20:1", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", + "typeString": "function (address,address)" + } + }, + "id": 121, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1757:42:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 122, + "nodeType": "EmitStatement", + "src": "1752:47:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 127, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 123, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1805:5:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 125, + "indexExpression": { + "argumentTypes": null, + "id": 124, + "name": "newOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 101, + "src": "1811:8:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1805:15:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 126, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1823:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1805:22:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 128, + "nodeType": "ExpressionStatement", + "src": "1805:22:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 134, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 129, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1833:5:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 132, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 130, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "1839:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 131, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1839:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1833:17:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 133, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1853:5:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "src": "1833:25:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 135, + "nodeType": "ExpressionStatement", + "src": "1833:25:1" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 136, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1871:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 107, + "id": 137, + "nodeType": "Return", + "src": "1864:11:1" + } + ] + }, + "documentation": "@dev Allows the current owner to transfer control of the contract to a newOwner.\n@param newOwner The address to transfer ownership to.\n@return {\"success\" : \"Returns true when successfully transferred ownership\"}", + "id": 139, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 104, + "modifierName": { + "argumentTypes": null, + "id": 103, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "1641:9:1", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "1641:9:1" + } + ], + "name": "transferOwnership", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 102, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 101, + "name": "newOwner", + "nodeType": "VariableDeclaration", + "scope": 139, + "src": "1616:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 100, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1616:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1615:18:1" + }, + "payable": false, + "returnParameters": { + "id": 107, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 106, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 139, + "src": "1660:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 105, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1660:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1659:14:1" + }, + "scope": 184, + "src": "1589:291:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 160, + "nodeType": "Block", + "src": "2215:97:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 152, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 148, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "2221:5:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 150, + "indexExpression": { + "argumentTypes": null, + "id": 149, + "name": "allowedAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 141, + "src": "2227:14:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2221:21:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 151, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2245:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "2221:28:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 153, + "nodeType": "ExpressionStatement", + "src": "2221:28:1" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 155, + "name": "allowedAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 141, + "src": "2275:14:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 154, + "name": "AllowOwnership", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 72, + "src": "2260:14:1", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 156, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2260:30:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 157, + "nodeType": "EmitStatement", + "src": "2255:35:1" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 158, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2303:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 147, + "id": 159, + "nodeType": "Return", + "src": "2296:11:1" + } + ] + }, + "documentation": "@dev Allows interface contracts and accounts to access contract methods (e.g. Storage contract)\n@param allowedAddress The address of new owner\n@return {\"success\" : \"Returns true when successfully allowed ownership\"}", + "id": 161, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 144, + "modifierName": { + "argumentTypes": null, + "id": 143, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "2182:9:1", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2182:9:1" + } + ], + "name": "allowOwnership", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 142, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 141, + "name": "allowedAddress", + "nodeType": "VariableDeclaration", + "scope": 161, + "src": "2151:22:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 140, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2151:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2150:24:1" + }, + "payable": false, + "returnParameters": { + "id": 147, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 146, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 161, + "src": "2201:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 145, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2201:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2200:14:1" + }, + "scope": 184, + "src": "2127:185:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 182, + "nodeType": "Block", + "src": "2660:99:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 174, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 170, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "2666:5:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 172, + "indexExpression": { + "argumentTypes": null, + "id": 171, + "name": "allowedAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 163, + "src": "2672:14:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2666:21:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 173, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2690:5:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "src": "2666:29:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 175, + "nodeType": "ExpressionStatement", + "src": "2666:29:1" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 177, + "name": "allowedAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 163, + "src": "2722:14:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 176, + "name": "RevokeOwnership", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 76, + "src": "2706:15:1", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 178, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2706:31:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 179, + "nodeType": "EmitStatement", + "src": "2701:36:1" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 180, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2750:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 169, + "id": 181, + "nodeType": "Return", + "src": "2743:11:1" + } + ] + }, + "documentation": "@dev Disallows interface contracts and accounts to access contract methods (e.g. Storage contract)\n@param allowedAddress The address to disallow ownership\n@return {\"success\" : \"Returns true when successfully allowed ownership\"}", + "id": 183, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 166, + "modifierName": { + "argumentTypes": null, + "id": 165, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "2627:9:1", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2627:9:1" + } + ], + "name": "removeOwnership", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 164, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 163, + "name": "allowedAddress", + "nodeType": "VariableDeclaration", + "scope": 183, + "src": "2596:22:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 162, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2596:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2595:24:1" + }, + "payable": false, + "returnParameters": { + "id": 169, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 168, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 183, + "src": "2646:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 167, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2646:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2645:14:1" + }, + "scope": 184, + "src": "2571:188:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 185, + "src": "703:2059:1" + } + ], + "src": "0:2763:1" + }, + "compiler": { + "name": "solc", + "version": "0.4.24+commit.e67f0147.Emscripten.clang" + }, + "networks": {}, + "schemaVersion": "2.0.1", + "updatedAt": "2018-10-22T22:56:14.018Z" +} \ No newline at end of file diff --git a/deployed/mainnet-v1.0.1/SafeMath.json b/deployed/mainnet-v1.0.1/SafeMath.json new file mode 100644 index 0000000..469e6b9 --- /dev/null +++ b/deployed/mainnet-v1.0.1/SafeMath.json @@ -0,0 +1,2636 @@ +{ + "contractName": "SafeMath", + "abi": [], + "bytecode": "0x604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f30073000000000000000000000000000000000000000030146080604052600080fd00a165627a7a7230582050f4e221bb4114d8270b88c8af6307ea6c60ecc6f0aaf838d598316e5204a3930029", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fd00a165627a7a7230582050f4e221bb4114d8270b88c8af6307ea6c60ecc6f0aaf838d598316e5204a3930029", + "sourceMap": "119:1597:2:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24", + "deployedSourceMap": "119:1597:2:-;;;;;;;;", + "source": "pragma solidity 0.4.24;\n\n\n/**\n * @title SafeMath\n * @notice Math operations with safety checks that throw on error\n */\nlibrary SafeMath {\n\n /**\n * @notice Multiplies two numbers, throws on overflow.\n * @param a Multiplier\n * @param b Multiplicand\n * @return {\"result\" : \"Returns product\"}\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256 result) {\n if (a == 0) {\n return 0;\n }\n uint256 c = a * b;\n require(c / a == b, \"Error: Unsafe multiplication operation!\");\n return c;\n }\n\n /**\n * @notice Integer division of two numbers, truncating the quotient.\n * @param a Dividend\n * @param b Divisor\n * @return {\"result\" : \"Returns quotient\"}\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256 result) {\n // @dev require(b > 0); // Solidity automatically throws when dividing by 0\n uint256 c = a / b;\n // @dev require(a == b * c + a % b); // There is no case in which this doesn't hold\n return c;\n }\n\n /**\n * @notice Subtracts two numbers, throws on underflow.\n * @param a Subtrahend\n * @param b Minuend\n * @return {\"result\" : \"Returns difference\"}\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256 result) {\n // @dev throws on overflow (i.e. if subtrahend is greater than minuend)\n require(b <= a, \"Error: Unsafe subtraction operation!\");\n return a - b;\n }\n\n /**\n * @notice Adds two numbers, throws on overflow.\n * @param a First addend\n * @param b Second addend\n * @return {\"result\" : \"Returns summation\"}\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256 result) {\n uint256 c = a + b;\n require(c >= a, \"Error: Unsafe addition operation!\");\n return c;\n }\n}\n", + "sourcePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/SafeMath.sol", + "ast": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/SafeMath.sol", + "exportedSymbols": { + "SafeMath": [ + 285 + ] + }, + "id": 286, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 186, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:2" + }, + { + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "documentation": "@title SafeMath\n@notice Math operations with safety checks that throw on error", + "fullyImplemented": true, + "id": 285, + "linearizedBaseContracts": [ + 285 + ], + "name": "SafeMath", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 219, + "nodeType": "Block", + "src": "375:150:2", + "statements": [ + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 197, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 195, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 188, + "src": "385:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 196, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "390:1:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "385:6:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 201, + "nodeType": "IfStatement", + "src": "381:35:2", + "trueBody": { + "id": 200, + "nodeType": "Block", + "src": "393:23:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "hexValue": "30", + "id": 198, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "408:1:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 194, + "id": 199, + "nodeType": "Return", + "src": "401:8:2" + } + ] + } + }, + { + "assignments": [ + 203 + ], + "declarations": [ + { + "constant": false, + "id": 203, + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 220, + "src": "421:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 202, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "421:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 207, + "initialValue": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 206, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 204, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 188, + "src": "433:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "argumentTypes": null, + "id": 205, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 190, + "src": "437:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "433:5:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "421:17:2" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 213, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 211, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 209, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 203, + "src": "452:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 210, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 188, + "src": "456:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "452:5:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 212, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 190, + "src": "461:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "452:10:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e73616665206d756c7469706c69636174696f6e206f7065726174696f6e21", + "id": 214, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "464:41:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_49c093c4aaac6a69427fb8661ed09ebf27cf7be118643b83a9b37c894f827a15", + "typeString": "literal_string \"Error: Unsafe multiplication operation!\"" + }, + "value": "Error: Unsafe multiplication operation!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_49c093c4aaac6a69427fb8661ed09ebf27cf7be118643b83a9b37c894f827a15", + "typeString": "literal_string \"Error: Unsafe multiplication operation!\"" + } + ], + "id": 208, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "444:7:2", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 215, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "444:62:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 216, + "nodeType": "ExpressionStatement", + "src": "444:62:2" + }, + { + "expression": { + "argumentTypes": null, + "id": 217, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 203, + "src": "519:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 194, + "id": 218, + "nodeType": "Return", + "src": "512:8:2" + } + ] + }, + "documentation": "@notice Multiplies two numbers, throws on overflow.\n@param a Multiplier\n@param b Multiplicand\n@return {\"result\" : \"Returns product\"}", + "id": 220, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "mul", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 191, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 188, + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 220, + "src": "314:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 187, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "314:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 190, + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 220, + "src": "325:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 189, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "325:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "313:22:2" + }, + "payable": false, + "returnParameters": { + "id": 194, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 193, + "name": "result", + "nodeType": "VariableDeclaration", + "scope": 220, + "src": "359:14:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 192, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "359:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "358:16:2" + }, + "scope": 285, + "src": "301:224:2", + "stateMutability": "pure", + "superFunction": null, + "visibility": "internal" + }, + { + "body": { + "id": 237, + "nodeType": "Block", + "src": "771:210:2", + "statements": [ + { + "assignments": [ + 230 + ], + "declarations": [ + { + "constant": false, + "id": 230, + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 238, + "src": "857:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 229, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "857:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 234, + "initialValue": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 233, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 231, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 222, + "src": "869:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 232, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 224, + "src": "873:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "869:5:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "857:17:2" + }, + { + "expression": { + "argumentTypes": null, + "id": 235, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 230, + "src": "975:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 228, + "id": 236, + "nodeType": "Return", + "src": "968:8:2" + } + ] + }, + "documentation": "@notice Integer division of two numbers, truncating the quotient.\n@param a Dividend\n@param b Divisor\n@return {\"result\" : \"Returns quotient\"}", + "id": 238, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "div", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 225, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 222, + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 238, + "src": "710:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 221, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "710:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 224, + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 238, + "src": "721:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 223, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "721:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "709:22:2" + }, + "payable": false, + "returnParameters": { + "id": 228, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 227, + "name": "result", + "nodeType": "VariableDeclaration", + "scope": 238, + "src": "755:14:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 226, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "755:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "754:16:2" + }, + "scope": 285, + "src": "697:284:2", + "stateMutability": "pure", + "superFunction": null, + "visibility": "internal" + }, + { + "body": { + "id": 258, + "nodeType": "Block", + "src": "1217:160:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 250, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 248, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 242, + "src": "1307:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "argumentTypes": null, + "id": 249, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 240, + "src": "1312:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1307:6:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e73616665207375627472616374696f6e206f7065726174696f6e21", + "id": 251, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1315:38:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f18cbb1620e3a8d0fe2c5bbe86168dc13c8076938e9197b95da6e0f94a6aec73", + "typeString": "literal_string \"Error: Unsafe subtraction operation!\"" + }, + "value": "Error: Unsafe subtraction operation!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_f18cbb1620e3a8d0fe2c5bbe86168dc13c8076938e9197b95da6e0f94a6aec73", + "typeString": "literal_string \"Error: Unsafe subtraction operation!\"" + } + ], + "id": 247, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "1299:7:2", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 252, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1299:55:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 253, + "nodeType": "ExpressionStatement", + "src": "1299:55:2" + }, + { + "expression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 256, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 254, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 240, + "src": "1367:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "argumentTypes": null, + "id": 255, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 242, + "src": "1371:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1367:5:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 246, + "id": 257, + "nodeType": "Return", + "src": "1360:12:2" + } + ] + }, + "documentation": "@notice Subtracts two numbers, throws on underflow.\n@param a Subtrahend\n@param b Minuend\n@return {\"result\" : \"Returns difference\"}", + "id": 259, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "sub", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 243, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 240, + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 259, + "src": "1156:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 239, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1156:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 242, + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 259, + "src": "1167:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 241, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1167:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1155:22:2" + }, + "payable": false, + "returnParameters": { + "id": 246, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 245, + "name": "result", + "nodeType": "VariableDeclaration", + "scope": 259, + "src": "1201:14:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 244, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1201:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1200:16:2" + }, + "scope": 285, + "src": "1143:234:2", + "stateMutability": "pure", + "superFunction": null, + "visibility": "internal" + }, + { + "body": { + "id": 283, + "nodeType": "Block", + "src": "1614:100:2", + "statements": [ + { + "assignments": [ + 269 + ], + "declarations": [ + { + "constant": false, + "id": 269, + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 284, + "src": "1620:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 268, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1620:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 273, + "initialValue": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 272, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 270, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 261, + "src": "1632:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "argumentTypes": null, + "id": 271, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 263, + "src": "1636:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1632:5:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1620:17:2" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 277, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 275, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 269, + "src": "1651:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "argumentTypes": null, + "id": 276, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 261, + "src": "1656:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1651:6:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e73616665206164646974696f6e206f7065726174696f6e21", + "id": 278, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1659:35:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_dac03c1cef2f037b40233270a73516c3c6e3467d614e4cdde1fac39b0472de4a", + "typeString": "literal_string \"Error: Unsafe addition operation!\"" + }, + "value": "Error: Unsafe addition operation!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_dac03c1cef2f037b40233270a73516c3c6e3467d614e4cdde1fac39b0472de4a", + "typeString": "literal_string \"Error: Unsafe addition operation!\"" + } + ], + "id": 274, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "1643:7:2", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 279, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1643:52:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 280, + "nodeType": "ExpressionStatement", + "src": "1643:52:2" + }, + { + "expression": { + "argumentTypes": null, + "id": 281, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 269, + "src": "1708:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 267, + "id": 282, + "nodeType": "Return", + "src": "1701:8:2" + } + ] + }, + "documentation": "@notice Adds two numbers, throws on overflow.\n@param a First addend\n@param b Second addend\n@return {\"result\" : \"Returns summation\"}", + "id": 284, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "add", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 264, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 261, + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 284, + "src": "1553:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 260, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1553:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 263, + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 284, + "src": "1564:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 262, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1564:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1552:22:2" + }, + "payable": false, + "returnParameters": { + "id": 267, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 266, + "name": "result", + "nodeType": "VariableDeclaration", + "scope": 284, + "src": "1598:14:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 265, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1598:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1597:16:2" + }, + "scope": 285, + "src": "1540:174:2", + "stateMutability": "pure", + "superFunction": null, + "visibility": "internal" + } + ], + "scope": 286, + "src": "119:1597:2" + } + ], + "src": "0:1717:2" + }, + "legacyAST": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/SafeMath.sol", + "exportedSymbols": { + "SafeMath": [ + 285 + ] + }, + "id": 286, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 186, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:2" + }, + { + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "documentation": "@title SafeMath\n@notice Math operations with safety checks that throw on error", + "fullyImplemented": true, + "id": 285, + "linearizedBaseContracts": [ + 285 + ], + "name": "SafeMath", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 219, + "nodeType": "Block", + "src": "375:150:2", + "statements": [ + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 197, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 195, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 188, + "src": "385:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 196, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "390:1:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "385:6:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 201, + "nodeType": "IfStatement", + "src": "381:35:2", + "trueBody": { + "id": 200, + "nodeType": "Block", + "src": "393:23:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "hexValue": "30", + "id": 198, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "408:1:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 194, + "id": 199, + "nodeType": "Return", + "src": "401:8:2" + } + ] + } + }, + { + "assignments": [ + 203 + ], + "declarations": [ + { + "constant": false, + "id": 203, + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 220, + "src": "421:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 202, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "421:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 207, + "initialValue": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 206, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 204, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 188, + "src": "433:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "argumentTypes": null, + "id": 205, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 190, + "src": "437:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "433:5:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "421:17:2" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 213, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 211, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 209, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 203, + "src": "452:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 210, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 188, + "src": "456:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "452:5:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 212, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 190, + "src": "461:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "452:10:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e73616665206d756c7469706c69636174696f6e206f7065726174696f6e21", + "id": 214, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "464:41:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_49c093c4aaac6a69427fb8661ed09ebf27cf7be118643b83a9b37c894f827a15", + "typeString": "literal_string \"Error: Unsafe multiplication operation!\"" + }, + "value": "Error: Unsafe multiplication operation!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_49c093c4aaac6a69427fb8661ed09ebf27cf7be118643b83a9b37c894f827a15", + "typeString": "literal_string \"Error: Unsafe multiplication operation!\"" + } + ], + "id": 208, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "444:7:2", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 215, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "444:62:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 216, + "nodeType": "ExpressionStatement", + "src": "444:62:2" + }, + { + "expression": { + "argumentTypes": null, + "id": 217, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 203, + "src": "519:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 194, + "id": 218, + "nodeType": "Return", + "src": "512:8:2" + } + ] + }, + "documentation": "@notice Multiplies two numbers, throws on overflow.\n@param a Multiplier\n@param b Multiplicand\n@return {\"result\" : \"Returns product\"}", + "id": 220, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "mul", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 191, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 188, + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 220, + "src": "314:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 187, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "314:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 190, + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 220, + "src": "325:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 189, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "325:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "313:22:2" + }, + "payable": false, + "returnParameters": { + "id": 194, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 193, + "name": "result", + "nodeType": "VariableDeclaration", + "scope": 220, + "src": "359:14:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 192, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "359:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "358:16:2" + }, + "scope": 285, + "src": "301:224:2", + "stateMutability": "pure", + "superFunction": null, + "visibility": "internal" + }, + { + "body": { + "id": 237, + "nodeType": "Block", + "src": "771:210:2", + "statements": [ + { + "assignments": [ + 230 + ], + "declarations": [ + { + "constant": false, + "id": 230, + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 238, + "src": "857:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 229, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "857:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 234, + "initialValue": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 233, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 231, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 222, + "src": "869:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 232, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 224, + "src": "873:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "869:5:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "857:17:2" + }, + { + "expression": { + "argumentTypes": null, + "id": 235, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 230, + "src": "975:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 228, + "id": 236, + "nodeType": "Return", + "src": "968:8:2" + } + ] + }, + "documentation": "@notice Integer division of two numbers, truncating the quotient.\n@param a Dividend\n@param b Divisor\n@return {\"result\" : \"Returns quotient\"}", + "id": 238, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "div", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 225, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 222, + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 238, + "src": "710:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 221, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "710:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 224, + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 238, + "src": "721:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 223, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "721:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "709:22:2" + }, + "payable": false, + "returnParameters": { + "id": 228, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 227, + "name": "result", + "nodeType": "VariableDeclaration", + "scope": 238, + "src": "755:14:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 226, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "755:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "754:16:2" + }, + "scope": 285, + "src": "697:284:2", + "stateMutability": "pure", + "superFunction": null, + "visibility": "internal" + }, + { + "body": { + "id": 258, + "nodeType": "Block", + "src": "1217:160:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 250, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 248, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 242, + "src": "1307:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "argumentTypes": null, + "id": 249, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 240, + "src": "1312:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1307:6:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e73616665207375627472616374696f6e206f7065726174696f6e21", + "id": 251, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1315:38:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f18cbb1620e3a8d0fe2c5bbe86168dc13c8076938e9197b95da6e0f94a6aec73", + "typeString": "literal_string \"Error: Unsafe subtraction operation!\"" + }, + "value": "Error: Unsafe subtraction operation!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_f18cbb1620e3a8d0fe2c5bbe86168dc13c8076938e9197b95da6e0f94a6aec73", + "typeString": "literal_string \"Error: Unsafe subtraction operation!\"" + } + ], + "id": 247, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "1299:7:2", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 252, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1299:55:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 253, + "nodeType": "ExpressionStatement", + "src": "1299:55:2" + }, + { + "expression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 256, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 254, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 240, + "src": "1367:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "argumentTypes": null, + "id": 255, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 242, + "src": "1371:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1367:5:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 246, + "id": 257, + "nodeType": "Return", + "src": "1360:12:2" + } + ] + }, + "documentation": "@notice Subtracts two numbers, throws on underflow.\n@param a Subtrahend\n@param b Minuend\n@return {\"result\" : \"Returns difference\"}", + "id": 259, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "sub", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 243, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 240, + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 259, + "src": "1156:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 239, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1156:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 242, + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 259, + "src": "1167:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 241, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1167:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1155:22:2" + }, + "payable": false, + "returnParameters": { + "id": 246, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 245, + "name": "result", + "nodeType": "VariableDeclaration", + "scope": 259, + "src": "1201:14:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 244, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1201:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1200:16:2" + }, + "scope": 285, + "src": "1143:234:2", + "stateMutability": "pure", + "superFunction": null, + "visibility": "internal" + }, + { + "body": { + "id": 283, + "nodeType": "Block", + "src": "1614:100:2", + "statements": [ + { + "assignments": [ + 269 + ], + "declarations": [ + { + "constant": false, + "id": 269, + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 284, + "src": "1620:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 268, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1620:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 273, + "initialValue": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 272, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 270, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 261, + "src": "1632:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "argumentTypes": null, + "id": 271, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 263, + "src": "1636:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1632:5:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1620:17:2" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 277, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 275, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 269, + "src": "1651:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "argumentTypes": null, + "id": 276, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 261, + "src": "1656:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1651:6:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e73616665206164646974696f6e206f7065726174696f6e21", + "id": 278, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1659:35:2", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_dac03c1cef2f037b40233270a73516c3c6e3467d614e4cdde1fac39b0472de4a", + "typeString": "literal_string \"Error: Unsafe addition operation!\"" + }, + "value": "Error: Unsafe addition operation!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_dac03c1cef2f037b40233270a73516c3c6e3467d614e4cdde1fac39b0472de4a", + "typeString": "literal_string \"Error: Unsafe addition operation!\"" + } + ], + "id": 274, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "1643:7:2", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 279, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1643:52:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 280, + "nodeType": "ExpressionStatement", + "src": "1643:52:2" + }, + { + "expression": { + "argumentTypes": null, + "id": 281, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 269, + "src": "1708:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 267, + "id": 282, + "nodeType": "Return", + "src": "1701:8:2" + } + ] + }, + "documentation": "@notice Adds two numbers, throws on overflow.\n@param a First addend\n@param b Second addend\n@return {\"result\" : \"Returns summation\"}", + "id": 284, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "add", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 264, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 261, + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 284, + "src": "1553:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 260, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1553:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 263, + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 284, + "src": "1564:9:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 262, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1564:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1552:22:2" + }, + "payable": false, + "returnParameters": { + "id": 267, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 266, + "name": "result", + "nodeType": "VariableDeclaration", + "scope": 284, + "src": "1598:14:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 265, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1598:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1597:16:2" + }, + "scope": 285, + "src": "1540:174:2", + "stateMutability": "pure", + "superFunction": null, + "visibility": "internal" + } + ], + "scope": 286, + "src": "119:1597:2" + } + ], + "src": "0:1717:2" + }, + "compiler": { + "name": "solc", + "version": "0.4.24+commit.e67f0147.Emscripten.clang" + }, + "networks": { + "1": { + "events": {}, + "links": {}, + "address": "0xecedbacdfa1513a2deaa82f96d9fac7fd1ec5675", + "transactionHash": "0x9c73a5b500bbf3eaef8fd16e5cfc2f6ba62346234a503dc85c361db58fb49be5" + }, + "4447": { + "events": {}, + "links": {}, + "address": "0x345ca3e014aaf5dca488057592ee47305d9b3e10", + "transactionHash": "0x319e27f7f8ce73369eabccceacea43b503b39c28e88c3cd960c76579e4f21c3d" + } + }, + "schemaVersion": "2.0.1", + "updatedAt": "2018-10-24T17:02:25.488Z" +} \ No newline at end of file diff --git a/deployed/mainnet-v1.0.1/TokenIOAuthority.json b/deployed/mainnet-v1.0.1/TokenIOAuthority.json new file mode 100644 index 0000000..6135eae --- /dev/null +++ b/deployed/mainnet-v1.0.1/TokenIOAuthority.json @@ -0,0 +1,5072 @@ +{ + "contractName": "TokenIOAuthority", + "abi": [ + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "allowOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "removeOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "", + "type": "address" + } + ], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "name": "_storageContract", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "AllowOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "RevokeOwnership", + "type": "event" + }, + { + "constant": false, + "inputs": [ + { + "name": "firmName", + "type": "string" + }, + { + "name": "_authorized", + "type": "bool" + } + ], + "name": "setRegisteredFirm", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "firmName", + "type": "string" + }, + { + "name": "authority", + "type": "address" + }, + { + "name": "_authorized", + "type": "bool" + } + ], + "name": "setRegisteredAuthority", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "authority", + "type": "address" + } + ], + "name": "getFirmFromAuthority", + "outputs": [ + { + "name": "firm", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "firmName", + "type": "string" + } + ], + "name": "isRegisteredFirm", + "outputs": [ + { + "name": "status", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "firmName", + "type": "string" + }, + { + "name": "authority", + "type": "address" + } + ], + "name": "isRegisteredToFirm", + "outputs": [ + { + "name": "registered", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "authority", + "type": "address" + } + ], + "name": "isRegisteredAuthority", + "outputs": [ + { + "name": "registered", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "feeContract", + "type": "address" + } + ], + "name": "setMasterFeeContract", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051602080611d64833981016040908152905133600090815260208190529182208054600160ff19918216811783558054600160a060020a031916600160a060020a039094169390931783558154169091179055611cee90819061007690396000f3006080604052600436106100ae5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663339282b781146100b3578063339e2c45146100e857806341ade6b71461014c5780634bbc142c146101a9578063666a3427146101ca578063666e1b39146101eb578063acca2c241461020c578063ee5493b6146102a2578063f03529c3146102fb578063f2fde38b1461031c578063f3f969a01461033d575b600080fd5b3480156100bf57600080fd5b506100d4600160a060020a03600435166103a6565b604080519115158252519081900360200190f35b3480156100f457600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100d494369492936024939284019190819084018382808284375094975050509235600160a060020a031693506103bf92505050565b34801561015857600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100d49436949293602493928401919081908401838280828437509497505050509135151592506103da915050565b3480156101b557600080fd5b506100d4600160a060020a036004351661056c565b3480156101d657600080fd5b506100d4600160a060020a0360043516610628565b3480156101f757600080fd5b506100d4600160a060020a03600435166106e1565b34801561021857600080fd5b5061022d600160a060020a03600435166106f6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561026757818101518382015260200161024f565b50505050905090810190601f1680156102945780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102ae57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100d49436949293602493928401919081908401838280828437509497506107099650505050505050565b34801561030757600080fd5b506100d4600160a060020a036004351661071c565b34801561032857600080fd5b506100d4600160a060020a0360043516610842565b34801561034957600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100d494369492936024939284019190819084018382808284375094975050600160a060020a0385351695505050505060200135151561097c565b60006103b960018363ffffffff610aac16565b92915050565b60006103d36001848463ffffffff610c7216565b9392505050565b336000818152602081905260408120549091849160ff168061040957506104096001838363ffffffff610c7216565b15156104ab576040805160e560020a62461bcd02815260206004820152604660248201527f4572726f723a205472616e73616374696f6e2073656e64657220646f6573206e60448201527f6f742068617665207065726d697373696f6e20666f722074686973206f70657260648201527f6174696f6e210000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6104bd6001868663ffffffff610e2716565b151561055f576040805160e560020a62461bcd02815260206004820152605260248201527f4572726f723a204661696c656420746f207265676973746572206669726d207760448201527f6974682073746f7261676520636f6e74726163742120506c656173652063686560648201527f636b20796f757220617267756d656e74732e0000000000000000000000000000608482015290519081900360a40190fd5b600192505b505092915050565b3360009081526020819052604081205460ff1615156105d7576040805160e560020a62461bcd0281526020600482015260396024820152600080516020611ca38339815191526044820152600080516020611c63833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b3360009081526020819052604081205460ff161515610693576040805160e560020a62461bcd0281526020600482015260396024820152600080516020611ca38339815191526044820152600080516020611c63833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b60606103b960018363ffffffff61106a16565b60006103b960018363ffffffff61122f16565b3360009081526020819052604081205460ff161515610787576040805160e560020a62461bcd0281526020600482015260396024820152600080516020611ca38339815191526044820152600080516020611c63833981519152606482015290519081900360840190fd5b61079860018363ffffffff6112ef16565b151561083a576040805160e560020a62461bcd02815260206004820152606060248201527f4572726f723a20556e61626c6520746f20736574206d6173746572206665652060448201527f636f6e74726163742e20506c6561736520656e737572652066656520636f6e7460648201527f72616374206861732074686520636f727265637420706172616d65746572732e608482015290519081900360a40190fd5b506001919050565b3360009081526020819052604081205460ff1615156108ad576040805160e560020a62461bcd0281526020600482015260396024820152600080516020611ca38339815191526044820152600080516020611c63833981519152606482015290519081900360840190fd5b600160a060020a038216151561090d576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b336000818152602081905260408120549091859160ff16806109ab57506109ab6001838363ffffffff610c7216565b1515610a4d576040805160e560020a62461bcd02815260206004820152604660248201527f4572726f723a205472616e73616374696f6e2073656e64657220646f6573206e60448201527f6f742068617665207065726d697373696f6e20666f722074686973206f70657260648201527f6174696f6e210000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b610a60600187878763ffffffff6114e316565b1515610aa05760405160e560020a62461bcd0281526004018080602001828103825260b2815260200180611bb160b2913960c00191505060405180910390fd5b50600195945050505050565b600080610ac284610abd8686611a39565b61106a565b610acc8585611a39565b60405160200180807f726567697374657265642e617574686f7269747900000000000000000000000081525060140183805190602001908083835b60208310610b265780518252601f199092019160209182019101610b07565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610bb15780518252601f199092019160209182019101610b92565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547f7ae1cfca000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a039094169550637ae1cfca945060248083019491935090918290030181600087803b158015610c3e57600080fd5b505af1158015610c52573d6000803e3d6000fd5b505050506040513d6020811015610c6857600080fd5b5051949350505050565b60008083610c808685611a39565b60405160200180807f726567697374657265642e617574686f7269747900000000000000000000000081525060140183805190602001908083835b60208310610cda5780518252601f199092019160209182019101610cbb565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610d655780518252601f199092019160209182019101610d46565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f7ae1cfca000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a039094169550637ae1cfca945060248083019491935090918290030181600087803b158015610df257600080fd5b505af1158015610e06573d6000803e3d6000fd5b505050506040513d6020811015610e1c57600080fd5b505195945050505050565b6000808360405160200180807f726567697374657265642e6669726d0000000000000000000000000000000000815250600f0182805190602001908083835b60208310610e855780518252601f199092019160209182019101610e66565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310610ee85780518252601f199092019160209182019101610ec9565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547fabfdcced000000000000000000000000000000000000000000000000000000008452600484018290528a151560248501529451909750600160a060020a03909416955063abfdcced945060448083019491935090918290030181600087803b158015610f7d57600080fd5b505af1158015610f91573d6000803e3d6000fd5b505050506040513d6020811015610fa757600080fd5b5051151561105f576040805160e560020a62461bcd0281526020600482015260696024820152600080516020611c8383398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b506001949350505050565b606060006110788484611a39565b60405160200180807f726567697374657265642e617574686f726974792e6669726d0000000000000081525060190182600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b6020831061110f5780518252601f1990920191602091820191016110f0565b5181516020939093036101000a60001901801990911692169190911790526040805191909301819003812089547f986e791a000000000000000000000000000000000000000000000000000000008352600483018290529351909650600160a060020a03909316945063986e791a9350602480820193600093509182900301818387803b15801561119f57600080fd5b505af11580156111b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156111dc57600080fd5b8101908080516401000000008111156111f457600080fd5b8201602081018481111561120757600080fd5b815164010000000081118282018710171561122157600080fd5b509098975050505050505050565b6000808260405160200180807f726567697374657265642e6669726d0000000000000000000000000000000000815250600f0182805190602001908083835b6020831061128d5780518252601f19909201916020918201910161126e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405260405180828051906020019080838360208310610bb15780518252601f199092019160209182019101610b92565b60008060405160200180807f6665652e636f6e74726163742e6d61737465720000000000000000000000000081525060130190506040516020818303038152906040526040518082805190602001908083835b602083106113615780518252601f199092019160209182019101611342565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547fca446dd900000000000000000000000000000000000000000000000000000000845260048401829052600160a060020a038b81166024860152955191985094909416955063ca446dd9945060448083019491935090918290030181600087803b1580156113f757600080fd5b505af115801561140b573d6000803e3d6000fd5b505050506040513d602081101561142157600080fd5b505115156114d9576040805160e560020a62461bcd0281526020600482015260686024820152600080516020611c8383398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b5060019392505050565b60008060006114f2878761122f565b151561156e576040805160e560020a62461bcd02815260206004820152602760248201527f4572726f723a20606973737565724669726d60206d757374206265207265676960448201527f7374657265642e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b858560405160200180807f726567697374657265642e617574686f7269747900000000000000000000000081525060140183805190602001908083835b602083106115ca5780518252601f1990920191602091820191016115ab565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106116555780518252601f199092019160209182019101611636565b51815160209384036101000a6000190180199092169116179052604080519290940182900382207f726567697374657265642e617574686f726974792e6669726d0000000000000083830152600160a060020a038c166c010000000000000000000000000260398401528451808403602d018152604d9093019485905282519098509195509293508392850191508083835b602083106117065780518252601f1990920191602091820191016116e7565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208d547fabfdcced000000000000000000000000000000000000000000000000000000008452600484018a90528b151560248501529451909750600160a060020a03909416955063abfdcced945060448083019491935090918290030181600087803b15801561179b57600080fd5b505af11580156117af573d6000803e3d6000fd5b505050506040513d60208110156117c557600080fd5b5051151561187d576040805160e560020a62461bcd0281526020600482015260696024820152600080516020611c8383398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b8654604080517f6e8995500000000000000000000000000000000000000000000000000000000081526004810184815260248201928352895160448301528951600160a060020a0390941693636e8995509386938c9392606490910190602085019080838360005b838110156118fd5781810151838201526020016118e5565b50505050905090810190601f16801561192a5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15801561194a57600080fd5b505af115801561195e573d6000803e3d6000fd5b505050506040513d602081101561197457600080fd5b50511515611a2c576040805160e560020a62461bcd0281526020600482015260696024820152600080516020611c8383398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b5060019695505050505050565b60008060008360405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611ad65780518252601f199092019160209182019101611ab7565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015611b6357600080fd5b505af1158015611b77573d6000803e3d6000fd5b505050506040513d6020811015611b8d57600080fd5b50519050600160a060020a03811615611ba857809250610564565b83925061056456004572726f723a204661696c656420746f20726567697374657220617574686f7269747920666f7220697373756572206669726d20776974682073746f7261676520636f6e74726163742120506c6561736520636865636b20796f757220617267756d656e747320616e6420656e73757265206669726d4e616d652069732072656769737465726564206265666f726520616c6c6f77696e6720616e20617574686f72697479206f662073616964206669726d20616c6c6f7765642062792074686520636f6e74726163742e000000000000004572726f723a20556e61626c6520746f207365742073746f726167652076616c4572726f723a205472616e73616374696f6e2073656e646572206973206e6f74a165627a7a72305820fa3d401565ba9aee21d4ad2cc160a5a4817ea05319b14711e05302e69d24bf2b0029", + "deployedBytecode": "0x6080604052600436106100ae5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663339282b781146100b3578063339e2c45146100e857806341ade6b71461014c5780634bbc142c146101a9578063666a3427146101ca578063666e1b39146101eb578063acca2c241461020c578063ee5493b6146102a2578063f03529c3146102fb578063f2fde38b1461031c578063f3f969a01461033d575b600080fd5b3480156100bf57600080fd5b506100d4600160a060020a03600435166103a6565b604080519115158252519081900360200190f35b3480156100f457600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100d494369492936024939284019190819084018382808284375094975050509235600160a060020a031693506103bf92505050565b34801561015857600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100d49436949293602493928401919081908401838280828437509497505050509135151592506103da915050565b3480156101b557600080fd5b506100d4600160a060020a036004351661056c565b3480156101d657600080fd5b506100d4600160a060020a0360043516610628565b3480156101f757600080fd5b506100d4600160a060020a03600435166106e1565b34801561021857600080fd5b5061022d600160a060020a03600435166106f6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561026757818101518382015260200161024f565b50505050905090810190601f1680156102945780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102ae57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100d49436949293602493928401919081908401838280828437509497506107099650505050505050565b34801561030757600080fd5b506100d4600160a060020a036004351661071c565b34801561032857600080fd5b506100d4600160a060020a0360043516610842565b34801561034957600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100d494369492936024939284019190819084018382808284375094975050600160a060020a0385351695505050505060200135151561097c565b60006103b960018363ffffffff610aac16565b92915050565b60006103d36001848463ffffffff610c7216565b9392505050565b336000818152602081905260408120549091849160ff168061040957506104096001838363ffffffff610c7216565b15156104ab576040805160e560020a62461bcd02815260206004820152604660248201527f4572726f723a205472616e73616374696f6e2073656e64657220646f6573206e60448201527f6f742068617665207065726d697373696f6e20666f722074686973206f70657260648201527f6174696f6e210000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6104bd6001868663ffffffff610e2716565b151561055f576040805160e560020a62461bcd02815260206004820152605260248201527f4572726f723a204661696c656420746f207265676973746572206669726d207760448201527f6974682073746f7261676520636f6e74726163742120506c656173652063686560648201527f636b20796f757220617267756d656e74732e0000000000000000000000000000608482015290519081900360a40190fd5b600192505b505092915050565b3360009081526020819052604081205460ff1615156105d7576040805160e560020a62461bcd0281526020600482015260396024820152600080516020611ca38339815191526044820152600080516020611c63833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b3360009081526020819052604081205460ff161515610693576040805160e560020a62461bcd0281526020600482015260396024820152600080516020611ca38339815191526044820152600080516020611c63833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b60606103b960018363ffffffff61106a16565b60006103b960018363ffffffff61122f16565b3360009081526020819052604081205460ff161515610787576040805160e560020a62461bcd0281526020600482015260396024820152600080516020611ca38339815191526044820152600080516020611c63833981519152606482015290519081900360840190fd5b61079860018363ffffffff6112ef16565b151561083a576040805160e560020a62461bcd02815260206004820152606060248201527f4572726f723a20556e61626c6520746f20736574206d6173746572206665652060448201527f636f6e74726163742e20506c6561736520656e737572652066656520636f6e7460648201527f72616374206861732074686520636f727265637420706172616d65746572732e608482015290519081900360a40190fd5b506001919050565b3360009081526020819052604081205460ff1615156108ad576040805160e560020a62461bcd0281526020600482015260396024820152600080516020611ca38339815191526044820152600080516020611c63833981519152606482015290519081900360840190fd5b600160a060020a038216151561090d576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b336000818152602081905260408120549091859160ff16806109ab57506109ab6001838363ffffffff610c7216565b1515610a4d576040805160e560020a62461bcd02815260206004820152604660248201527f4572726f723a205472616e73616374696f6e2073656e64657220646f6573206e60448201527f6f742068617665207065726d697373696f6e20666f722074686973206f70657260648201527f6174696f6e210000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b610a60600187878763ffffffff6114e316565b1515610aa05760405160e560020a62461bcd0281526004018080602001828103825260b2815260200180611bb160b2913960c00191505060405180910390fd5b50600195945050505050565b600080610ac284610abd8686611a39565b61106a565b610acc8585611a39565b60405160200180807f726567697374657265642e617574686f7269747900000000000000000000000081525060140183805190602001908083835b60208310610b265780518252601f199092019160209182019101610b07565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610bb15780518252601f199092019160209182019101610b92565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547f7ae1cfca000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a039094169550637ae1cfca945060248083019491935090918290030181600087803b158015610c3e57600080fd5b505af1158015610c52573d6000803e3d6000fd5b505050506040513d6020811015610c6857600080fd5b5051949350505050565b60008083610c808685611a39565b60405160200180807f726567697374657265642e617574686f7269747900000000000000000000000081525060140183805190602001908083835b60208310610cda5780518252601f199092019160209182019101610cbb565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610d655780518252601f199092019160209182019101610d46565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f7ae1cfca000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a039094169550637ae1cfca945060248083019491935090918290030181600087803b158015610df257600080fd5b505af1158015610e06573d6000803e3d6000fd5b505050506040513d6020811015610e1c57600080fd5b505195945050505050565b6000808360405160200180807f726567697374657265642e6669726d0000000000000000000000000000000000815250600f0182805190602001908083835b60208310610e855780518252601f199092019160209182019101610e66565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310610ee85780518252601f199092019160209182019101610ec9565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547fabfdcced000000000000000000000000000000000000000000000000000000008452600484018290528a151560248501529451909750600160a060020a03909416955063abfdcced945060448083019491935090918290030181600087803b158015610f7d57600080fd5b505af1158015610f91573d6000803e3d6000fd5b505050506040513d6020811015610fa757600080fd5b5051151561105f576040805160e560020a62461bcd0281526020600482015260696024820152600080516020611c8383398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b506001949350505050565b606060006110788484611a39565b60405160200180807f726567697374657265642e617574686f726974792e6669726d0000000000000081525060190182600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b6020831061110f5780518252601f1990920191602091820191016110f0565b5181516020939093036101000a60001901801990911692169190911790526040805191909301819003812089547f986e791a000000000000000000000000000000000000000000000000000000008352600483018290529351909650600160a060020a03909316945063986e791a9350602480820193600093509182900301818387803b15801561119f57600080fd5b505af11580156111b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156111dc57600080fd5b8101908080516401000000008111156111f457600080fd5b8201602081018481111561120757600080fd5b815164010000000081118282018710171561122157600080fd5b509098975050505050505050565b6000808260405160200180807f726567697374657265642e6669726d0000000000000000000000000000000000815250600f0182805190602001908083835b6020831061128d5780518252601f19909201916020918201910161126e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405260405180828051906020019080838360208310610bb15780518252601f199092019160209182019101610b92565b60008060405160200180807f6665652e636f6e74726163742e6d61737465720000000000000000000000000081525060130190506040516020818303038152906040526040518082805190602001908083835b602083106113615780518252601f199092019160209182019101611342565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547fca446dd900000000000000000000000000000000000000000000000000000000845260048401829052600160a060020a038b81166024860152955191985094909416955063ca446dd9945060448083019491935090918290030181600087803b1580156113f757600080fd5b505af115801561140b573d6000803e3d6000fd5b505050506040513d602081101561142157600080fd5b505115156114d9576040805160e560020a62461bcd0281526020600482015260686024820152600080516020611c8383398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b5060019392505050565b60008060006114f2878761122f565b151561156e576040805160e560020a62461bcd02815260206004820152602760248201527f4572726f723a20606973737565724669726d60206d757374206265207265676960448201527f7374657265642e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b858560405160200180807f726567697374657265642e617574686f7269747900000000000000000000000081525060140183805190602001908083835b602083106115ca5780518252601f1990920191602091820191016115ab565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106116555780518252601f199092019160209182019101611636565b51815160209384036101000a6000190180199092169116179052604080519290940182900382207f726567697374657265642e617574686f726974792e6669726d0000000000000083830152600160a060020a038c166c010000000000000000000000000260398401528451808403602d018152604d9093019485905282519098509195509293508392850191508083835b602083106117065780518252601f1990920191602091820191016116e7565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208d547fabfdcced000000000000000000000000000000000000000000000000000000008452600484018a90528b151560248501529451909750600160a060020a03909416955063abfdcced945060448083019491935090918290030181600087803b15801561179b57600080fd5b505af11580156117af573d6000803e3d6000fd5b505050506040513d60208110156117c557600080fd5b5051151561187d576040805160e560020a62461bcd0281526020600482015260696024820152600080516020611c8383398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b8654604080517f6e8995500000000000000000000000000000000000000000000000000000000081526004810184815260248201928352895160448301528951600160a060020a0390941693636e8995509386938c9392606490910190602085019080838360005b838110156118fd5781810151838201526020016118e5565b50505050905090810190601f16801561192a5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15801561194a57600080fd5b505af115801561195e573d6000803e3d6000fd5b505050506040513d602081101561197457600080fd5b50511515611a2c576040805160e560020a62461bcd0281526020600482015260696024820152600080516020611c8383398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b5060019695505050505050565b60008060008360405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611ad65780518252601f199092019160209182019101611ab7565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015611b6357600080fd5b505af1158015611b77573d6000803e3d6000fd5b505050506040513d6020811015611b8d57600080fd5b50519050600160a060020a03811615611ba857809250610564565b83925061056456004572726f723a204661696c656420746f20726567697374657220617574686f7269747920666f7220697373756572206669726d20776974682073746f7261676520636f6e74726163742120506c6561736520636865636b20796f757220617267756d656e747320616e6420656e73757265206669726d4e616d652069732072656769737465726564206265666f726520616c6c6f77696e6720616e20617574686f72697479206f662073616964206669726d20616c6c6f7765642062792074686520636f6e74726163742e000000000000004572726f723a20556e61626c6520746f207365742073746f726167652076616c4572726f723a205472616e73616374696f6e2073656e646572206973206e6f74a165627a7a72305820fa3d401565ba9aee21d4ad2cc160a5a4817ea05319b14711e05302e69d24bf2b0029", + "sourceMap": "871:4829:3:-;;;1214:515;8:9:-1;5:2;;;30:1;27;20:12;5:2;1214:515:3;;;;;;;;;;;;;;;;1117:10:1;1111:5;:17;;;1214:515:3;1111:17:1;;;;;;:24;;1131:4;-1:-1:-1;;1111:24:1;;;;;;;1592:46:3;;-1:-1:-1;;;;;;1592:46:3;-1:-1:-1;;;;;1592:46:3;;;;;;;;;1698:24;;;;;;;;871:4829;;;;;;;;", + "deployedSourceMap": "871:4829:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4581:198;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4581:198:3;-1:-1:-1;;;;;4581:198:3;;;;;;;;;;;;;;;;;;;;;;;4150:217;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4150:217:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4150:217:3;;-1:-1:-1;;;4150:217:3;;-1:-1:-1;;;;;4150:217:3;;-1:-1:-1;4150:217:3;;-1:-1:-1;;;4150:217:3;1969:384;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1969:384:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1969:384:3;;-1:-1:-1;;;;1969:384:3;;;;;-1:-1:-1;1969:384:3;;-1:-1:-1;;1969:384:3;2127:185:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2127:185:1;-1:-1:-1;;;;;2127:185:1;;;;;2571:188;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2571:188:1;-1:-1:-1;;;;;2571:188:1;;;;;725:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;725:37:1;-1:-1:-1;;;;;725:37:1;;;;;3384:142:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3384:142:3;-1:-1:-1;;;;;3384:142:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3384:142:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3698:184;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3698:184:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3698:184:3;;-1:-1:-1;3698:184:3;;-1:-1:-1;;;;;;;3698:184:3;4998:351;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4998:351:3;-1:-1:-1;;;;;4998:351:3;;;;;1589:291:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1589:291:1;-1:-1:-1;;;;;1589:291:1;;;;;2677:529:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2677:529:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2677:529:3;;-1:-1:-1;;;;;;;2677:529:3;;;;-1:-1:-1;;;;;2677:529:3;;;;;;;4581:198;4652:15;4736:36;:3;4762:9;4736:36;:25;:36;:::i;:::-;4729:43;4581:198;-1:-1:-1;;4581:198:3:o;4150:217::-;4235:15;4317:43;:3;4340:8;4350:9;4317:43;:22;:43;:::i;:::-;4310:50;4150:217;-1:-1:-1;;;4150:217:3:o;1969:384::-;2062:10;2083:12;5522:16;;;;;;;;;;;2083:12;;2052:8;;5522:16;;;:63;;-1:-1:-1;5542:43:3;:3;5565:8;5575:9;5542:43;:22;:43;:::i;:::-;5514:165;;;;;;;-1:-1:-1;;;;;5514:165:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2175:44;:3;2197:8;2207:11;2175:44;:21;:44;:::i;:::-;2156:169;;;;;;;-1:-1:-1;;;;;2156:169:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2342:4;2335:11;;5689:1;1969:384;;;;;;:::o;2127:185:1:-;1261:10;2201:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;2221:21:1;;:5;:21;;;;;;;;;;;:28;;-1:-1:-1;;2221:28:1;2245:4;2221:28;;;2260:30;;;2221:5;2260:30;-1:-1:-1;2303:4:1;2127:185;;;:::o;2571:188::-;1261:10;2646:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;2666:21:1;;2690:5;2666:21;;;;;;;;;;;:29;;-1:-1:-1;;2666:29:1;;;2706:31;;;2690:5;2706:31;-1:-1:-1;2750:4:1;2571:188;;;:::o;725:37::-;;;;;;;;;;;;;;;;:::o;3384:142:3:-;3454:11;3484:35;:3;3509:9;3484:35;:24;:35;:::i;3698:184::-;3762:11;3845:30;:3;3866:8;3845:30;:20;:30;:::i;4998:351::-;1261:10:1;5075:12:3;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;5162:37:3;:3;5187:11;5162:37;:24;:37;:::i;:::-;5143:176;;;;;;;-1:-1:-1;;;;;5143:176:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5336:4:3;4998:351;;;:::o;1589:291:1:-;1261:10;1660:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;1688:22:1;;;;1680:66;;;;;-1:-1:-1;;;;;1680:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1757:42;;-1:-1:-1;;;;;1757:42:1;;;1778:10;;1757:42;;;;;-1:-1:-1;;;;;;1805:15:1;:5;:15;;;;;;;;;;;:22;;1823:4;-1:-1:-1;;1805:22:1;;;;;;;;1839:10;1833:17;;;;;;:25;;;;;;;1823:4;1589:291::o;2677:529:3:-;2794:10;2815:12;5522:16;;;;;;;;;;;2815:12;;2784:8;;5522:16;;;:63;;-1:-1:-1;5542:43:3;:3;5565:8;5575:9;5542:43;:22;:43;:::i;:::-;5514:165;;;;;;;-1:-1:-1;;;;;5514:165:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2916:60;:3;2943:8;2953:9;2964:11;2916:60;:26;:60;:::i;:::-;2897:281;;;;;;-1:-1:-1;;;;;2897:281:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3195:4:3;;2677:529;-1:-1:-1;;;;;2677:529:3:o;50230:346:8:-;50329:15;50352:10;50416:71;50437:4;50443:43;50463:4;50469:16;50443:19;:43::i;:::-;50416:20;:71::i;:::-;50489:43;50509:4;50515:16;50489:19;:43::i;:::-;50375:158;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;50375:158:8;;;;;;;-1:-1:-1;;;;;50375:158:8;-1:-1:-1;;;;;50375:158:8;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;50375:158:8;;;50365:169;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;50365:169:8;;;;;;;;;;;;50547:12;;:24;;;;;;;;;;;50365:169;;-1:-1:-1;;;;;;50547:12:8;;;;-1:-1:-1;50547:20:8;;-1:-1:-1;50547:24:8;;;;;263:2:-1;;-1:-1;50547:24:8;;;;;;;-1:-1:-1;50547:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;50547:24:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;50547:24:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;50547:24:8;;50230:346;-1:-1:-1;;;;50230:346:8:o;49569:301::-;49684:15;49707:10;49771;49783:43;49803:4;49809:16;49783:19;:43::i;:::-;49730:97;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;49730:97:8;;;;;;;-1:-1:-1;;;;;49730:97:8;-1:-1:-1;;;;;49730:97:8;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;49730:97:8;;;49720:108;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;49720:108:8;;;;;;;;;;;;49841:12;;:24;;;;;;;;;;;49720:108;;-1:-1:-1;;;;;;49841:12:8;;;;-1:-1:-1;49841:20:8;;-1:-1:-1;49841:24:8;;;;;263:2:-1;;-1:-1;49841:24:8;;;;;;;-1:-1:-1;49841:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;49841:24:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;49841:24:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49841:24:8;;49569:301;-1:-1:-1;;;;;49569:301:8:o;46101:387::-;46199:12;46219:10;46278;46242:47;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;46242:47:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;46242:47:8;;;46232:58;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;46232:58:8;;;;;;;;;;;;46311:12;;:34;;;;;;;;;;;;;;;;;;46232:58;;-1:-1:-1;;;;;;46311:12:8;;;;-1:-1:-1;46311:20:8;;-1:-1:-1;46311:34:8;;;;;263:2:-1;;-1:-1;46311:34:8;;;;;;;-1:-1:-1;46311:12:8;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;46311:34:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;46311:34:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;46311:34:8;46296:170;;;;;;;-1:-1:-1;;;;;46296:170:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;46296:170:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46479:4:8;;46101:387;-1:-1:-1;;;;46101:387:8:o;48371:281::-;48469:17;48494:10;48563:43;48583:4;48589:16;48563:19;:43::i;:::-;48517:90;;;;;;;;;;;;;-1:-1:-1;;;;;48517:90:8;-1:-1:-1;;;;;48517:90:8;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;48517:90:8;;;48507:101;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;48507:101:8;;;;;;;;;;;;48621:12;;:26;;;;;;;;;;;48507:101;;-1:-1:-1;;;;;;48621:12:8;;;;-1:-1:-1;48621:22:8;;-1:-1:-1;48621:26:8;;;;;-1:-1:-1;;;48621:26:8;;;;;;-1:-1:-1;48621:12:8;:26;;;5:2:-1;;;;30:1;27;20:12;5:2;48621:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48621:26:8;;;;;;39:16:-1;36:1;17:17;2:54;101:4;48621:26:8;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;48621:26:8;;;;;;20:11:-1;15:3;12:20;9:2;;;45:1;42;35:12;9:2;64:21;;126:4;117:14;;142:31;;;139:2;;;186:1;183;176:12;139:2;218:10;;268:11;251:29;;293:43;;;290:58;-1:-1;239:118;236:2;;;370:1;367;360:12;236:2;-1:-1;48621:26:8;;48371:281;-1:-1:-1;;;;;;;;48371:281:8:o;48946:223::-;49033:15;49056:10;49115;49079:47;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;49079:47:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;49079:47:8;;;49069:58;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;25248:382:8;25340:12;25360:10;25383:39;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;25383:39:8;;;25373:50;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;25373:50:8;;;;;;;;;;;;25444:12;;:44;;;;;;;;;-1:-1:-1;;;;;25444:44:8;;;;;;;;;25373:50;;-1:-1:-1;25444:12:8;;;;;-1:-1:-1;25444:23:8;;-1:-1:-1;25444:44:8;;;;;263:2:-1;;-1:-1;25444:44:8;;;;;;;-1:-1:-1;25444:12:8;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;25444:44:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25444:44:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25444:44:8;25429:179;;;;;;;-1:-1:-1;;;;;25429:179:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25429:179:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25621:4:8;;25248:382;-1:-1:-1;;;25248:382:8:o;47178:822::-;47307:12;47433;47535;47342:34;47359:4;47365:10;47342:16;:34::i;:::-;47327:99;;;;;;;-1:-1:-1;;;;;47327:99:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47499:10;47511:16;47458:70;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;47458:70:8;;;;;;;-1:-1:-1;;;;;47458:70:8;-1:-1:-1;;;;;47458:70:8;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;47458:70:8;;;47448:81;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;47448:81:8;;;;;;;;;;;;47560:63;;;;;-1:-1:-1;;;;;47560:63:8;;;;;;;;;;26:21:-1;;;22:32;;6:49;;47560:63:8;;;;;;;;47550:74;;47448:81;;-1:-1:-1;47560:63:8;;-1:-1:-1;47560:63:8;;-1:-1:-1;47560:63:8;;47550:74;;;-1:-1:-1;47550:74:8;47560:63;47550:74;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;47550:74:8;;;;;;;;;;;;47646:12;;:36;;;;;;;;;;;;;;;;;;47550:74;;-1:-1:-1;;;;;;47646:12:8;;;;-1:-1:-1;47646:20:8;;-1:-1:-1;47646:36:8;;;;;263:2:-1;;-1:-1;47646:36:8;;;;;;;-1:-1:-1;47646:12:8;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;47646:36:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47646:36:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;47646:36:8;47631:167;;;;;;;-1:-1:-1;;;;;47631:167:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;47631:167:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47820:12;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47820:12:8;;;;:22;;47843:4;;47849:10;;47820:40;;;;;;;;;;;;;:12;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;47820:40:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47820:40:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47820:40:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;47820:40:8;47805:171;;;;;;;-1:-1:-1;;;;;47805:171:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;47805:171:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47991:4:8;;47178:822;-1:-1:-1;;;;;;47178:822:8:o;16400:357::-;16488:25;16521:10;16594:23;16579:7;16544:43;;;;;;;;;;;;;-1:-1:-1;;;;;16544:43:8;-1:-1:-1;;;;;16544:43:8;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16544:43:8;;;16534:54;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;16534:54:8;;;;;;;;;;;;16620:12;;:27;;;;;;;;;;;16534:54;;-1:-1:-1;;;;;;16620:12:8;;;;-1:-1:-1;16620:23:8;;-1:-1:-1;16620:27:8;;;;;263:2:-1;;-1:-1;16620:27:8;;;;;;;-1:-1:-1;16620:12:8;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;16620:27:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16620:27:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16620:27:8;;-1:-1:-1;;;;;;16657:22:8;;;16653:100;;16696:15;16689:22;;;;16653:100;16739:7;16732:14;;;", + "source": "pragma solidity 0.4.24;\n\n/*\nCOPYRIGHT 2018 Token, Inc.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\n\n/**\n@title TokenIOAuthority - Authority Smart Contract for Token, Inc.\n\n@author Ryan Tate , Sean Pollock \n\n@notice Contract uses generalized storage contract, `TokenIOStorage`, for\nupgradeability of interface contract.\n*/\n\nimport \"./Ownable.sol\";\nimport \"./TokenIOStorage.sol\";\nimport \"./TokenIOLib.sol\";\n\ncontract TokenIOAuthority is Ownable {\n\n /// @dev Set reference to TokenIOLib interface which proxies to TokenIOStorage\n using TokenIOLib for TokenIOLib.Data;\n TokenIOLib.Data lib;\n\n /**\n * @notice Constructor method for Authority contract\n * @param _storageContract Ethereum Address of TokenIOStorage contract\n */\n constructor(address _storageContract) public {\n /*\n * @notice Set the storage contract for the interface\n * @dev This contract will be unable to use the storage constract until\n * @dev contract address is authorized with the storage contract\n * @dev Once authorized, you can setRegisteredFirm and setRegisteredAuthority\n */\n lib.Storage = TokenIOStorage(_storageContract);\n\n /// @dev set owner to contract initiator\n owner[msg.sender] = true;\n }\n\n /**\n * @notice Registers a firm as authorized true/false\n * @param firmName Name of firm\n * @param _authorized Authorization status\n * @return {\"success\" : \"Returns true if lib.setRegisteredFirm succeeds\"}\n */\n function setRegisteredFirm(string firmName, bool _authorized) public onlyAuthority(firmName, msg.sender) returns (bool success) {\n /// @notice set firm registration status\n require(\n lib.setRegisteredFirm(firmName, _authorized),\n \"Error: Failed to register firm with storage contract! Please check your arguments.\"\n );\n return true;\n }\n\n /**\n * @notice Registers an authority asoociated with the given firm as true/false\n * @param firmName Name of firm\n * @param authority Address of authority account\n * @param _authorized Authorization status\n * @return {\"success\" : \"Returns true if lib.setRegisteredAuthority succeeds\"}\n */\n function setRegisteredAuthority(string firmName, address authority, bool _authorized) public onlyAuthority(firmName, msg.sender) returns (bool success) {\n /// @notice set authority of firm to given status\n require(\n lib.setRegisteredAuthority(firmName, authority, _authorized),\n \"Error: Failed to register authority for issuer firm with storage contract! Please check your arguments and ensure firmName is registered before allowing an authority of said firm\"\n );\n return true;\n }\n\n /**\n * @notice Gets firm asoociated with an authority address\n * @param authority Address of authority account\n * @return {\"firm\" : \"name of firm\"}\n */\n function getFirmFromAuthority(address authority) public view returns (string firm) {\n return lib.getFirmFromAuthority(authority);\n }\n\n /**\n * @notice Gets status of firm registration\n * @param firmName Name of firm\n * @return {\"status\" : \"Returns status of firm registration\"}\n */\n function isRegisteredFirm(string firmName) public view returns (bool status) {\n /// @notice check firm's registration status\n return lib.isRegisteredFirm(firmName);\n }\n\n /**\n * @notice Checks if an authority account is registered to a given firm\n * @param firmName Name of firm\n * @param authority Address of authority account\n * @return {\"registered\" : \"Returns status of account registration to firm\"}\n */\n function isRegisteredToFirm(string firmName, address authority) public view returns (bool registered) {\n /// @notice check if registered to firm\n return lib.isRegisteredToFirm(firmName, authority);\n }\n\n /**\n * @notice Gets status of authority registration\n * @param authority Address of authority account\n * @return { \"registered\" : \"Returns true if account is a registered authority\" }\n */\n function isRegisteredAuthority(address authority) public view returns (bool registered) {\n /// @notice check if registered authority\n return lib.isRegisteredAuthority(authority);\n }\n\n /**\n * @notice Sets contract which specifies fee parameters\n * @param feeContract Address of the fee contract\n * @return { \"success\" : \"Returns true if lib.setMasterFeeContract succeeds\" }\n */\n function setMasterFeeContract(address feeContract) public onlyOwner returns (bool success) {\n /// @notice set master fee contract\n require(\n lib.setMasterFeeContract(feeContract),\n \"Error: Unable to set master fee contract. Please ensure fee contract has the correct parameters.\"\n );\n return true;\n }\n\n\n modifier onlyAuthority(string firmName, address authority) {\n /// @notice throws if not an owner authority or not registered to the given firm\n require(owner[authority] || lib.isRegisteredToFirm(firmName, authority),\n \"Error: Transaction sender does not have permission for this operation!\"\n );\n _;\n }\n\n}\n", + "sourcePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOAuthority.sol", + "ast": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOAuthority.sol", + "exportedSymbols": { + "TokenIOAuthority": [ + 470 + ] + }, + "id": 471, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 287, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:3" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 288, + "nodeType": "ImportDirective", + "scope": 471, + "sourceUnit": 185, + "src": "788:23:3", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 289, + "nodeType": "ImportDirective", + "scope": 471, + "sourceUnit": 5226, + "src": "812:30:3", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 290, + "nodeType": "ImportDirective", + "scope": 471, + "sourceUnit": 4607, + "src": "843:26:3", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 291, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "900:7:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 292, + "nodeType": "InheritanceSpecifier", + "src": "900:7:3" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 470, + "linearizedBaseContracts": [ + 470, + 184 + ], + "name": "TokenIOAuthority", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 295, + "libraryName": { + "contractScope": null, + "id": 293, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4606, + "src": "1004:10:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4606", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "998:37:3", + "typeName": { + "contractScope": null, + "id": 294, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1019:15:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 297, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 470, + "src": "1040:19:3", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 296, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1040:15:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 317, + "nodeType": "Block", + "src": "1259:470:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 308, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 302, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "1592:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 304, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1629, + "src": "1592:11:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 306, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 299, + "src": "1621:16:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 305, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5225, + "src": "1606:14:3", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5225_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 307, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1606:32:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1592:46:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "id": 309, + "nodeType": "ExpressionStatement", + "src": "1592:46:3" + }, + { + "expression": { + "argumentTypes": null, + "id": 315, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 310, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1698:5:3", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 313, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 311, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "1704:3:3", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 312, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1704:10:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1698:17:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 314, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1718:4:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1698:24:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 316, + "nodeType": "ExpressionStatement", + "src": "1698:24:3" + } + ] + }, + "documentation": "@notice Constructor method for Authority contract\n@param _storageContract Ethereum Address of TokenIOStorage contract", + "id": 318, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 300, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 299, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 318, + "src": "1226:24:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 298, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1226:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1225:26:3" + }, + "payable": false, + "returnParameters": { + "id": 301, + "nodeType": "ParameterList", + "parameters": [], + "src": "1259:0:3" + }, + "scope": 470, + "src": "1214:515:3", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 343, + "nodeType": "Block", + "src": "2097:256:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 335, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 320, + "src": "2197:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 336, + "name": "_authorized", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 322, + "src": "2207:11:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "expression": { + "argumentTypes": null, + "id": 333, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "2175:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 334, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setRegisteredFirm", + "nodeType": "MemberAccess", + "referencedDeclaration": 3764, + "src": "2175:21:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_bool_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,bool) returns (bool)" + } + }, + "id": 337, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2175:44:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a204661696c656420746f207265676973746572206669726d20776974682073746f7261676520636f6e74726163742120506c6561736520636865636b20796f757220617267756d656e74732e", + "id": 338, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2231:84:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7c061aadab049d8f25969f3d079d42a1e8f36ec72210e2d32fa2967857012c0f", + "typeString": "literal_string \"Error: Failed to register firm with storage contract! Please check your arguments.\"" + }, + "value": "Error: Failed to register firm with storage contract! Please check your arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7c061aadab049d8f25969f3d079d42a1e8f36ec72210e2d32fa2967857012c0f", + "typeString": "literal_string \"Error: Failed to register firm with storage contract! Please check your arguments.\"" + } + ], + "id": 332, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2156:7:3", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 339, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2156:169:3", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 340, + "nodeType": "ExpressionStatement", + "src": "2156:169:3" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 341, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2342:4:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 331, + "id": 342, + "nodeType": "Return", + "src": "2335:11:3" + } + ] + }, + "documentation": "@notice Registers a firm as authorized true/false\n@param firmName Name of firm\n@param _authorized Authorization status\n@return {\"success\" : \"Returns true if lib.setRegisteredFirm succeeds\"}", + "id": 344, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 325, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 320, + "src": "2052:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 326, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "2062:3:3", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 327, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2062:10:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 328, + "modifierName": { + "argumentTypes": null, + "id": 324, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 469, + "src": "2038:13:3", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "2038:35:3" + } + ], + "name": "setRegisteredFirm", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 323, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 320, + "name": "firmName", + "nodeType": "VariableDeclaration", + "scope": 344, + "src": "1996:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 319, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1996:6:3", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 322, + "name": "_authorized", + "nodeType": "VariableDeclaration", + "scope": 344, + "src": "2013:16:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 321, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2013:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1995:35:3" + }, + "payable": false, + "returnParameters": { + "id": 331, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 330, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 344, + "src": "2083:12:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 329, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2083:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2082:14:3" + }, + "scope": 470, + "src": "1969:384:3", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 372, + "nodeType": "Block", + "src": "2829:377:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 363, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 346, + "src": "2943:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 364, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 348, + "src": "2953:9:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 365, + "name": "_authorized", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 350, + "src": "2964:11:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "expression": { + "argumentTypes": null, + "id": 361, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "2916:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 362, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setRegisteredAuthority", + "nodeType": "MemberAccess", + "referencedDeclaration": 3829, + "src": "2916:26:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_bool_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,bool) returns (bool)" + } + }, + "id": 366, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2916:60:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a204661696c656420746f20726567697374657220617574686f7269747920666f7220697373756572206669726d20776974682073746f7261676520636f6e74726163742120506c6561736520636865636b20796f757220617267756d656e747320616e6420656e73757265206669726d4e616d652069732072656769737465726564206265666f726520616c6c6f77696e6720616e20617574686f72697479206f662073616964206669726d", + "id": 367, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2988:180:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_2d4a4b60f49ee08372af5e34c3f2336392554fd91a2dbaa0c7da248171f215ec", + "typeString": "literal_string \"Error: Failed to register authority for issuer firm with storage contract! Please check your arguments and ensure firmName is registered before allowing an authority of said firm\"" + }, + "value": "Error: Failed to register authority for issuer firm with storage contract! Please check your arguments and ensure firmName is registered before allowing an authority of said firm" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_2d4a4b60f49ee08372af5e34c3f2336392554fd91a2dbaa0c7da248171f215ec", + "typeString": "literal_string \"Error: Failed to register authority for issuer firm with storage contract! Please check your arguments and ensure firmName is registered before allowing an authority of said firm\"" + } + ], + "id": 360, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2897:7:3", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 368, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2897:281:3", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 369, + "nodeType": "ExpressionStatement", + "src": "2897:281:3" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 370, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3195:4:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 359, + "id": 371, + "nodeType": "Return", + "src": "3188:11:3" + } + ] + }, + "documentation": "@notice Registers an authority asoociated with the given firm as true/false\n@param firmName Name of firm\n@param authority Address of authority account\n@param _authorized Authorization status\n@return {\"success\" : \"Returns true if lib.setRegisteredAuthority succeeds\"}", + "id": 373, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 353, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 346, + "src": "2784:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 354, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "2794:3:3", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 355, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2794:10:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 356, + "modifierName": { + "argumentTypes": null, + "id": 352, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 469, + "src": "2770:13:3", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "2770:35:3" + } + ], + "name": "setRegisteredAuthority", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 351, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 346, + "name": "firmName", + "nodeType": "VariableDeclaration", + "scope": 373, + "src": "2709:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 345, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2709:6:3", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 348, + "name": "authority", + "nodeType": "VariableDeclaration", + "scope": 373, + "src": "2726:17:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 347, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2726:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 350, + "name": "_authorized", + "nodeType": "VariableDeclaration", + "scope": 373, + "src": "2745:16:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 349, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2745:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2708:54:3" + }, + "payable": false, + "returnParameters": { + "id": 359, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 358, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 373, + "src": "2815:12:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 357, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2815:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2814:14:3" + }, + "scope": 470, + "src": "2677:529:3", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 385, + "nodeType": "Block", + "src": "3467:59:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 382, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 375, + "src": "3509:9:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 380, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "3484:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 381, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFirmFromAuthority", + "nodeType": "MemberAccess", + "referencedDeclaration": 3858, + "src": "3484:24:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 383, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3484:35:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 379, + "id": 384, + "nodeType": "Return", + "src": "3477:42:3" + } + ] + }, + "documentation": "@notice Gets firm asoociated with an authority address\n@param authority Address of authority account\n@return {\"firm\" : \"name of firm\"}", + "id": 386, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getFirmFromAuthority", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 376, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 375, + "name": "authority", + "nodeType": "VariableDeclaration", + "scope": 386, + "src": "3414:17:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 374, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3414:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3413:19:3" + }, + "payable": false, + "returnParameters": { + "id": 379, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 378, + "name": "firm", + "nodeType": "VariableDeclaration", + "scope": 386, + "src": "3454:11:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 377, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3454:6:3", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3453:13:3" + }, + "scope": 470, + "src": "3384:142:3", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 398, + "nodeType": "Block", + "src": "3775:107:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 395, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 388, + "src": "3866:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 393, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "3845:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 394, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "isRegisteredFirm", + "nodeType": "MemberAccess", + "referencedDeclaration": 3884, + "src": "3845:20:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) view returns (bool)" + } + }, + "id": 396, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3845:30:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 392, + "id": 397, + "nodeType": "Return", + "src": "3838:37:3" + } + ] + }, + "documentation": "@notice Gets status of firm registration\n@param firmName Name of firm\n@return {\"status\" : \"Returns status of firm registration\"}", + "id": 399, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "isRegisteredFirm", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 389, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 388, + "name": "firmName", + "nodeType": "VariableDeclaration", + "scope": 399, + "src": "3724:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 387, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3724:6:3", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3723:17:3" + }, + "payable": false, + "returnParameters": { + "id": 392, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 391, + "name": "status", + "nodeType": "VariableDeclaration", + "scope": 399, + "src": "3762:11:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 390, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3762:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3761:13:3" + }, + "scope": 470, + "src": "3698:184:3", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 414, + "nodeType": "Block", + "src": "4252:115:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 410, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 401, + "src": "4340:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 411, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 403, + "src": "4350:9:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 408, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "4317:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 409, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "isRegisteredToFirm", + "nodeType": "MemberAccess", + "referencedDeclaration": 3916, + "src": "4317:22:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address) view returns (bool)" + } + }, + "id": 412, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4317:43:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 407, + "id": 413, + "nodeType": "Return", + "src": "4310:50:3" + } + ] + }, + "documentation": "@notice Checks if an authority account is registered to a given firm\n@param firmName Name of firm\n@param authority Address of authority account\n@return {\"registered\" : \"Returns status of account registration to firm\"}", + "id": 415, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "isRegisteredToFirm", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 404, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 401, + "name": "firmName", + "nodeType": "VariableDeclaration", + "scope": 415, + "src": "4178:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 400, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "4178:6:3", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 403, + "name": "authority", + "nodeType": "VariableDeclaration", + "scope": 415, + "src": "4195:17:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 402, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4195:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4177:36:3" + }, + "payable": false, + "returnParameters": { + "id": 407, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 406, + "name": "registered", + "nodeType": "VariableDeclaration", + "scope": 415, + "src": "4235:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 405, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4235:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4234:17:3" + }, + "scope": 470, + "src": "4150:217:3", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 427, + "nodeType": "Block", + "src": "4669:110:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 424, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 417, + "src": "4762:9:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 422, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "4736:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 423, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "isRegisteredAuthority", + "nodeType": "MemberAccess", + "referencedDeclaration": 3952, + "src": "4736:25:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bool)" + } + }, + "id": 425, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4736:36:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 421, + "id": 426, + "nodeType": "Return", + "src": "4729:43:3" + } + ] + }, + "documentation": "@notice Gets status of authority registration\n@param authority Address of authority account\n@return { \"registered\" : \"Returns true if account is a registered authority\" }", + "id": 428, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "isRegisteredAuthority", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 418, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 417, + "name": "authority", + "nodeType": "VariableDeclaration", + "scope": 428, + "src": "4612:17:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 416, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4612:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4611:19:3" + }, + "payable": false, + "returnParameters": { + "id": 421, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 420, + "name": "registered", + "nodeType": "VariableDeclaration", + "scope": 428, + "src": "4652:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 419, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4652:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4651:17:3" + }, + "scope": 470, + "src": "4581:198:3", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 447, + "nodeType": "Block", + "src": "5089:260:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 440, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 430, + "src": "5187:11:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 438, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "5162:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 439, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setMasterFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2657, + "src": "5162:24:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) returns (bool)" + } + }, + "id": 441, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5162:37:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20736574206d61737465722066656520636f6e74726163742e20506c6561736520656e737572652066656520636f6e7472616374206861732074686520636f727265637420706172616d65746572732e", + "id": 442, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5211:98:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_a96b771d97a968a04d199c5b6408cd38e4f78c25aa05fad6c1579ba20e33b4e4", + "typeString": "literal_string \"Error: Unable to set master fee contract. Please ensure fee contract has the correct parameters.\"" + }, + "value": "Error: Unable to set master fee contract. Please ensure fee contract has the correct parameters." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_a96b771d97a968a04d199c5b6408cd38e4f78c25aa05fad6c1579ba20e33b4e4", + "typeString": "literal_string \"Error: Unable to set master fee contract. Please ensure fee contract has the correct parameters.\"" + } + ], + "id": 437, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "5143:7:3", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 443, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5143:176:3", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 444, + "nodeType": "ExpressionStatement", + "src": "5143:176:3" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 445, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5336:4:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 436, + "id": 446, + "nodeType": "Return", + "src": "5329:11:3" + } + ] + }, + "documentation": "@notice Sets contract which specifies fee parameters\n@param feeContract Address of the fee contract\n@return { \"success\" : \"Returns true if lib.setMasterFeeContract succeeds\" }", + "id": 448, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 433, + "modifierName": { + "argumentTypes": null, + "id": 432, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "5056:9:3", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "5056:9:3" + } + ], + "name": "setMasterFeeContract", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 431, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 430, + "name": "feeContract", + "nodeType": "VariableDeclaration", + "scope": 448, + "src": "5028:19:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 429, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5028:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5027:21:3" + }, + "payable": false, + "returnParameters": { + "id": 436, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 435, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 448, + "src": "5075:12:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 434, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5075:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5074:14:3" + }, + "scope": 470, + "src": "4998:351:3", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 468, + "nodeType": "Block", + "src": "5415:282:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 463, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 455, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "5522:5:3", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 457, + "indexExpression": { + "argumentTypes": null, + "id": 456, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 452, + "src": "5528:9:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5522:16:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 460, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 450, + "src": "5565:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 461, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 452, + "src": "5575:9:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 458, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "5542:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 459, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "isRegisteredToFirm", + "nodeType": "MemberAccess", + "referencedDeclaration": 3916, + "src": "5542:22:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address) view returns (bool)" + } + }, + "id": 462, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5542:43:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5522:63:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a205472616e73616374696f6e2073656e64657220646f6573206e6f742068617665207065726d697373696f6e20666f722074686973206f7065726174696f6e21", + "id": 464, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5597:72:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d3def153e2e51aa28ae18a72fd9db16026b538556464ddd7af6de088c3965fad", + "typeString": "literal_string \"Error: Transaction sender does not have permission for this operation!\"" + }, + "value": "Error: Transaction sender does not have permission for this operation!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d3def153e2e51aa28ae18a72fd9db16026b538556464ddd7af6de088c3965fad", + "typeString": "literal_string \"Error: Transaction sender does not have permission for this operation!\"" + } + ], + "id": 454, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "5514:7:3", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 465, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5514:165:3", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 466, + "nodeType": "ExpressionStatement", + "src": "5514:165:3" + }, + { + "id": 467, + "nodeType": "PlaceholderStatement", + "src": "5689:1:3" + } + ] + }, + "documentation": null, + "id": 469, + "name": "onlyAuthority", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 453, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 450, + "name": "firmName", + "nodeType": "VariableDeclaration", + "scope": 469, + "src": "5379:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 449, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "5379:6:3", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 452, + "name": "authority", + "nodeType": "VariableDeclaration", + "scope": 469, + "src": "5396:17:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 451, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5396:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5378:36:3" + }, + "src": "5356:341:3", + "visibility": "internal" + } + ], + "scope": 471, + "src": "871:4829:3" + } + ], + "src": "0:5701:3" + }, + "legacyAST": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOAuthority.sol", + "exportedSymbols": { + "TokenIOAuthority": [ + 470 + ] + }, + "id": 471, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 287, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:3" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 288, + "nodeType": "ImportDirective", + "scope": 471, + "sourceUnit": 185, + "src": "788:23:3", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 289, + "nodeType": "ImportDirective", + "scope": 471, + "sourceUnit": 5226, + "src": "812:30:3", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 290, + "nodeType": "ImportDirective", + "scope": 471, + "sourceUnit": 4607, + "src": "843:26:3", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 291, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "900:7:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 292, + "nodeType": "InheritanceSpecifier", + "src": "900:7:3" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 470, + "linearizedBaseContracts": [ + 470, + 184 + ], + "name": "TokenIOAuthority", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 295, + "libraryName": { + "contractScope": null, + "id": 293, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4606, + "src": "1004:10:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4606", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "998:37:3", + "typeName": { + "contractScope": null, + "id": 294, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1019:15:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 297, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 470, + "src": "1040:19:3", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 296, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1040:15:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 317, + "nodeType": "Block", + "src": "1259:470:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 308, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 302, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "1592:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 304, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1629, + "src": "1592:11:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 306, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 299, + "src": "1621:16:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 305, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5225, + "src": "1606:14:3", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5225_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 307, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1606:32:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1592:46:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "id": 309, + "nodeType": "ExpressionStatement", + "src": "1592:46:3" + }, + { + "expression": { + "argumentTypes": null, + "id": 315, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 310, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1698:5:3", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 313, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 311, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "1704:3:3", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 312, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1704:10:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1698:17:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 314, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1718:4:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1698:24:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 316, + "nodeType": "ExpressionStatement", + "src": "1698:24:3" + } + ] + }, + "documentation": "@notice Constructor method for Authority contract\n@param _storageContract Ethereum Address of TokenIOStorage contract", + "id": 318, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 300, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 299, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 318, + "src": "1226:24:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 298, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1226:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1225:26:3" + }, + "payable": false, + "returnParameters": { + "id": 301, + "nodeType": "ParameterList", + "parameters": [], + "src": "1259:0:3" + }, + "scope": 470, + "src": "1214:515:3", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 343, + "nodeType": "Block", + "src": "2097:256:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 335, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 320, + "src": "2197:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 336, + "name": "_authorized", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 322, + "src": "2207:11:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "expression": { + "argumentTypes": null, + "id": 333, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "2175:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 334, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setRegisteredFirm", + "nodeType": "MemberAccess", + "referencedDeclaration": 3764, + "src": "2175:21:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_bool_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,bool) returns (bool)" + } + }, + "id": 337, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2175:44:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a204661696c656420746f207265676973746572206669726d20776974682073746f7261676520636f6e74726163742120506c6561736520636865636b20796f757220617267756d656e74732e", + "id": 338, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2231:84:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7c061aadab049d8f25969f3d079d42a1e8f36ec72210e2d32fa2967857012c0f", + "typeString": "literal_string \"Error: Failed to register firm with storage contract! Please check your arguments.\"" + }, + "value": "Error: Failed to register firm with storage contract! Please check your arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7c061aadab049d8f25969f3d079d42a1e8f36ec72210e2d32fa2967857012c0f", + "typeString": "literal_string \"Error: Failed to register firm with storage contract! Please check your arguments.\"" + } + ], + "id": 332, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2156:7:3", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 339, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2156:169:3", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 340, + "nodeType": "ExpressionStatement", + "src": "2156:169:3" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 341, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2342:4:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 331, + "id": 342, + "nodeType": "Return", + "src": "2335:11:3" + } + ] + }, + "documentation": "@notice Registers a firm as authorized true/false\n@param firmName Name of firm\n@param _authorized Authorization status\n@return {\"success\" : \"Returns true if lib.setRegisteredFirm succeeds\"}", + "id": 344, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 325, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 320, + "src": "2052:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 326, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "2062:3:3", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 327, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2062:10:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 328, + "modifierName": { + "argumentTypes": null, + "id": 324, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 469, + "src": "2038:13:3", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "2038:35:3" + } + ], + "name": "setRegisteredFirm", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 323, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 320, + "name": "firmName", + "nodeType": "VariableDeclaration", + "scope": 344, + "src": "1996:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 319, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1996:6:3", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 322, + "name": "_authorized", + "nodeType": "VariableDeclaration", + "scope": 344, + "src": "2013:16:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 321, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2013:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1995:35:3" + }, + "payable": false, + "returnParameters": { + "id": 331, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 330, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 344, + "src": "2083:12:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 329, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2083:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2082:14:3" + }, + "scope": 470, + "src": "1969:384:3", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 372, + "nodeType": "Block", + "src": "2829:377:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 363, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 346, + "src": "2943:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 364, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 348, + "src": "2953:9:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 365, + "name": "_authorized", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 350, + "src": "2964:11:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "expression": { + "argumentTypes": null, + "id": 361, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "2916:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 362, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setRegisteredAuthority", + "nodeType": "MemberAccess", + "referencedDeclaration": 3829, + "src": "2916:26:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_bool_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,bool) returns (bool)" + } + }, + "id": 366, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2916:60:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a204661696c656420746f20726567697374657220617574686f7269747920666f7220697373756572206669726d20776974682073746f7261676520636f6e74726163742120506c6561736520636865636b20796f757220617267756d656e747320616e6420656e73757265206669726d4e616d652069732072656769737465726564206265666f726520616c6c6f77696e6720616e20617574686f72697479206f662073616964206669726d", + "id": 367, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2988:180:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_2d4a4b60f49ee08372af5e34c3f2336392554fd91a2dbaa0c7da248171f215ec", + "typeString": "literal_string \"Error: Failed to register authority for issuer firm with storage contract! Please check your arguments and ensure firmName is registered before allowing an authority of said firm\"" + }, + "value": "Error: Failed to register authority for issuer firm with storage contract! Please check your arguments and ensure firmName is registered before allowing an authority of said firm" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_2d4a4b60f49ee08372af5e34c3f2336392554fd91a2dbaa0c7da248171f215ec", + "typeString": "literal_string \"Error: Failed to register authority for issuer firm with storage contract! Please check your arguments and ensure firmName is registered before allowing an authority of said firm\"" + } + ], + "id": 360, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2897:7:3", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 368, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2897:281:3", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 369, + "nodeType": "ExpressionStatement", + "src": "2897:281:3" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 370, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3195:4:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 359, + "id": 371, + "nodeType": "Return", + "src": "3188:11:3" + } + ] + }, + "documentation": "@notice Registers an authority asoociated with the given firm as true/false\n@param firmName Name of firm\n@param authority Address of authority account\n@param _authorized Authorization status\n@return {\"success\" : \"Returns true if lib.setRegisteredAuthority succeeds\"}", + "id": 373, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 353, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 346, + "src": "2784:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 354, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "2794:3:3", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 355, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2794:10:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 356, + "modifierName": { + "argumentTypes": null, + "id": 352, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 469, + "src": "2770:13:3", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "2770:35:3" + } + ], + "name": "setRegisteredAuthority", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 351, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 346, + "name": "firmName", + "nodeType": "VariableDeclaration", + "scope": 373, + "src": "2709:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 345, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2709:6:3", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 348, + "name": "authority", + "nodeType": "VariableDeclaration", + "scope": 373, + "src": "2726:17:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 347, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2726:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 350, + "name": "_authorized", + "nodeType": "VariableDeclaration", + "scope": 373, + "src": "2745:16:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 349, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2745:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2708:54:3" + }, + "payable": false, + "returnParameters": { + "id": 359, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 358, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 373, + "src": "2815:12:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 357, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2815:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2814:14:3" + }, + "scope": 470, + "src": "2677:529:3", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 385, + "nodeType": "Block", + "src": "3467:59:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 382, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 375, + "src": "3509:9:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 380, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "3484:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 381, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFirmFromAuthority", + "nodeType": "MemberAccess", + "referencedDeclaration": 3858, + "src": "3484:24:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 383, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3484:35:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 379, + "id": 384, + "nodeType": "Return", + "src": "3477:42:3" + } + ] + }, + "documentation": "@notice Gets firm asoociated with an authority address\n@param authority Address of authority account\n@return {\"firm\" : \"name of firm\"}", + "id": 386, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getFirmFromAuthority", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 376, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 375, + "name": "authority", + "nodeType": "VariableDeclaration", + "scope": 386, + "src": "3414:17:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 374, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3414:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3413:19:3" + }, + "payable": false, + "returnParameters": { + "id": 379, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 378, + "name": "firm", + "nodeType": "VariableDeclaration", + "scope": 386, + "src": "3454:11:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 377, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3454:6:3", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3453:13:3" + }, + "scope": 470, + "src": "3384:142:3", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 398, + "nodeType": "Block", + "src": "3775:107:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 395, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 388, + "src": "3866:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 393, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "3845:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 394, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "isRegisteredFirm", + "nodeType": "MemberAccess", + "referencedDeclaration": 3884, + "src": "3845:20:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) view returns (bool)" + } + }, + "id": 396, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3845:30:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 392, + "id": 397, + "nodeType": "Return", + "src": "3838:37:3" + } + ] + }, + "documentation": "@notice Gets status of firm registration\n@param firmName Name of firm\n@return {\"status\" : \"Returns status of firm registration\"}", + "id": 399, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "isRegisteredFirm", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 389, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 388, + "name": "firmName", + "nodeType": "VariableDeclaration", + "scope": 399, + "src": "3724:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 387, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3724:6:3", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3723:17:3" + }, + "payable": false, + "returnParameters": { + "id": 392, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 391, + "name": "status", + "nodeType": "VariableDeclaration", + "scope": 399, + "src": "3762:11:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 390, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3762:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3761:13:3" + }, + "scope": 470, + "src": "3698:184:3", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 414, + "nodeType": "Block", + "src": "4252:115:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 410, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 401, + "src": "4340:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 411, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 403, + "src": "4350:9:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 408, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "4317:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 409, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "isRegisteredToFirm", + "nodeType": "MemberAccess", + "referencedDeclaration": 3916, + "src": "4317:22:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address) view returns (bool)" + } + }, + "id": 412, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4317:43:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 407, + "id": 413, + "nodeType": "Return", + "src": "4310:50:3" + } + ] + }, + "documentation": "@notice Checks if an authority account is registered to a given firm\n@param firmName Name of firm\n@param authority Address of authority account\n@return {\"registered\" : \"Returns status of account registration to firm\"}", + "id": 415, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "isRegisteredToFirm", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 404, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 401, + "name": "firmName", + "nodeType": "VariableDeclaration", + "scope": 415, + "src": "4178:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 400, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "4178:6:3", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 403, + "name": "authority", + "nodeType": "VariableDeclaration", + "scope": 415, + "src": "4195:17:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 402, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4195:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4177:36:3" + }, + "payable": false, + "returnParameters": { + "id": 407, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 406, + "name": "registered", + "nodeType": "VariableDeclaration", + "scope": 415, + "src": "4235:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 405, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4235:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4234:17:3" + }, + "scope": 470, + "src": "4150:217:3", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 427, + "nodeType": "Block", + "src": "4669:110:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 424, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 417, + "src": "4762:9:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 422, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "4736:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 423, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "isRegisteredAuthority", + "nodeType": "MemberAccess", + "referencedDeclaration": 3952, + "src": "4736:25:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bool)" + } + }, + "id": 425, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4736:36:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 421, + "id": 426, + "nodeType": "Return", + "src": "4729:43:3" + } + ] + }, + "documentation": "@notice Gets status of authority registration\n@param authority Address of authority account\n@return { \"registered\" : \"Returns true if account is a registered authority\" }", + "id": 428, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "isRegisteredAuthority", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 418, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 417, + "name": "authority", + "nodeType": "VariableDeclaration", + "scope": 428, + "src": "4612:17:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 416, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4612:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4611:19:3" + }, + "payable": false, + "returnParameters": { + "id": 421, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 420, + "name": "registered", + "nodeType": "VariableDeclaration", + "scope": 428, + "src": "4652:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 419, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4652:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4651:17:3" + }, + "scope": 470, + "src": "4581:198:3", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 447, + "nodeType": "Block", + "src": "5089:260:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 440, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 430, + "src": "5187:11:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 438, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "5162:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 439, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setMasterFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2657, + "src": "5162:24:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) returns (bool)" + } + }, + "id": 441, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5162:37:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20736574206d61737465722066656520636f6e74726163742e20506c6561736520656e737572652066656520636f6e7472616374206861732074686520636f727265637420706172616d65746572732e", + "id": 442, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5211:98:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_a96b771d97a968a04d199c5b6408cd38e4f78c25aa05fad6c1579ba20e33b4e4", + "typeString": "literal_string \"Error: Unable to set master fee contract. Please ensure fee contract has the correct parameters.\"" + }, + "value": "Error: Unable to set master fee contract. Please ensure fee contract has the correct parameters." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_a96b771d97a968a04d199c5b6408cd38e4f78c25aa05fad6c1579ba20e33b4e4", + "typeString": "literal_string \"Error: Unable to set master fee contract. Please ensure fee contract has the correct parameters.\"" + } + ], + "id": 437, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "5143:7:3", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 443, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5143:176:3", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 444, + "nodeType": "ExpressionStatement", + "src": "5143:176:3" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 445, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5336:4:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 436, + "id": 446, + "nodeType": "Return", + "src": "5329:11:3" + } + ] + }, + "documentation": "@notice Sets contract which specifies fee parameters\n@param feeContract Address of the fee contract\n@return { \"success\" : \"Returns true if lib.setMasterFeeContract succeeds\" }", + "id": 448, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 433, + "modifierName": { + "argumentTypes": null, + "id": 432, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "5056:9:3", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "5056:9:3" + } + ], + "name": "setMasterFeeContract", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 431, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 430, + "name": "feeContract", + "nodeType": "VariableDeclaration", + "scope": 448, + "src": "5028:19:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 429, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5028:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5027:21:3" + }, + "payable": false, + "returnParameters": { + "id": 436, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 435, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 448, + "src": "5075:12:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 434, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5075:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5074:14:3" + }, + "scope": 470, + "src": "4998:351:3", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 468, + "nodeType": "Block", + "src": "5415:282:3", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 463, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 455, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "5522:5:3", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 457, + "indexExpression": { + "argumentTypes": null, + "id": 456, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 452, + "src": "5528:9:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5522:16:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 460, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 450, + "src": "5565:8:3", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 461, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 452, + "src": "5575:9:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 458, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 297, + "src": "5542:3:3", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 459, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "isRegisteredToFirm", + "nodeType": "MemberAccess", + "referencedDeclaration": 3916, + "src": "5542:22:3", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address) view returns (bool)" + } + }, + "id": 462, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5542:43:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5522:63:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a205472616e73616374696f6e2073656e64657220646f6573206e6f742068617665207065726d697373696f6e20666f722074686973206f7065726174696f6e21", + "id": 464, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5597:72:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d3def153e2e51aa28ae18a72fd9db16026b538556464ddd7af6de088c3965fad", + "typeString": "literal_string \"Error: Transaction sender does not have permission for this operation!\"" + }, + "value": "Error: Transaction sender does not have permission for this operation!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d3def153e2e51aa28ae18a72fd9db16026b538556464ddd7af6de088c3965fad", + "typeString": "literal_string \"Error: Transaction sender does not have permission for this operation!\"" + } + ], + "id": 454, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "5514:7:3", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 465, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5514:165:3", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 466, + "nodeType": "ExpressionStatement", + "src": "5514:165:3" + }, + { + "id": 467, + "nodeType": "PlaceholderStatement", + "src": "5689:1:3" + } + ] + }, + "documentation": null, + "id": 469, + "name": "onlyAuthority", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 453, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 450, + "name": "firmName", + "nodeType": "VariableDeclaration", + "scope": 469, + "src": "5379:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 449, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "5379:6:3", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 452, + "name": "authority", + "nodeType": "VariableDeclaration", + "scope": 469, + "src": "5396:17:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 451, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5396:7:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5378:36:3" + }, + "src": "5356:341:3", + "visibility": "internal" + } + ], + "scope": 471, + "src": "871:4829:3" + } + ], + "src": "0:5701:3" + }, + "compiler": { + "name": "solc", + "version": "0.4.24+commit.e67f0147.Emscripten.clang" + }, + "networks": { + "1": { + "events": {}, + "links": {}, + "address": "0x84348c89f20b303ef5139a99a7f8f4618a644a82", + "transactionHash": "0xc61d00626194dc673696915f656d66e8a9b4841964fcdac91231c06e92fd74f0" + }, + "4447": { + "events": {}, + "links": {}, + "address": "0x75c35c980c0d37ef46df04d31a140b65503c0eed", + "transactionHash": "0xf63de1a9bcc8d9155965010f3567a3b624451b3c768233ec733fed39a6eb209c" + } + }, + "schemaVersion": "2.0.1", + "updatedAt": "2018-10-24T17:17:57.557Z" +} \ No newline at end of file diff --git a/deployed/mainnet-v1.0.1/TokenIOCurrencyAuthority.json b/deployed/mainnet-v1.0.1/TokenIOCurrencyAuthority.json new file mode 100644 index 0000000..9d366f5 --- /dev/null +++ b/deployed/mainnet-v1.0.1/TokenIOCurrencyAuthority.json @@ -0,0 +1,12494 @@ +{ + "contractName": "TokenIOCurrencyAuthority", + "abi": [ + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "allowOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "removeOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "", + "type": "address" + } + ], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "name": "_storageContract", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "AllowOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "RevokeOwnership", + "type": "event" + }, + { + "constant": true, + "inputs": [ + { + "name": "currency", + "type": "string" + }, + { + "name": "account", + "type": "address" + } + ], + "name": "getTokenBalance", + "outputs": [ + { + "name": "balance", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "currency", + "type": "string" + } + ], + "name": "getTokenSupply", + "outputs": [ + { + "name": "supply", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "account", + "type": "address" + }, + { + "name": "isAllowed", + "type": "bool" + }, + { + "name": "issuerFirm", + "type": "string" + } + ], + "name": "freezeAccount", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "account", + "type": "address" + }, + { + "name": "isApproved", + "type": "bool" + }, + { + "name": "limit", + "type": "uint256" + }, + { + "name": "issuerFirm", + "type": "string" + } + ], + "name": "approveKYC", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "currency", + "type": "string" + }, + { + "name": "account", + "type": "address" + }, + { + "name": "amount", + "type": "uint256" + }, + { + "name": "limit", + "type": "uint256" + }, + { + "name": "issuerFirm", + "type": "string" + } + ], + "name": "approveKYCAndDeposit", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "account", + "type": "address" + }, + { + "name": "limit", + "type": "uint256" + }, + { + "name": "issuerFirm", + "type": "string" + } + ], + "name": "setAccountSpendingLimit", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "account", + "type": "address" + } + ], + "name": "getAccountSpendingRemaining", + "outputs": [ + { + "name": "spendingRemaining", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "account", + "type": "address" + } + ], + "name": "getAccountSpendingLimit", + "outputs": [ + { + "name": "spendingLimit", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "currency", + "type": "string" + }, + { + "name": "bpsRate", + "type": "uint256" + }, + { + "name": "issuerFirm", + "type": "string" + } + ], + "name": "setFxBpsRate", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "currency", + "type": "string" + }, + { + "name": "fxAmount", + "type": "uint256" + } + ], + "name": "getFxUSDAmount", + "outputs": [ + { + "name": "usdAmount", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "originalAccount", + "type": "address" + }, + { + "name": "updatedAccount", + "type": "address" + }, + { + "name": "issuerFirm", + "type": "string" + } + ], + "name": "approveForwardedAccount", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "currency", + "type": "string" + }, + { + "name": "account", + "type": "address" + }, + { + "name": "amount", + "type": "uint256" + }, + { + "name": "issuerFirm", + "type": "string" + } + ], + "name": "deposit", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "currency", + "type": "string" + }, + { + "name": "account", + "type": "address" + }, + { + "name": "amount", + "type": "uint256" + }, + { + "name": "issuerFirm", + "type": "string" + } + ], + "name": "withdraw", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b506040516020806141d4833981016040908152905133600090815260208190529182208054600160ff19918216811783558054600160a060020a031916600160a060020a03909416939093178355815416909117905561415e90819061007690396000f3006080604052600436106100d75763ffffffff60e060020a60003504166328e53bb281146100dc57806329db8ec4146101a25780633cdb9762146101d5578063448900141461023957806346e06634146102d65780634bbc142c146103445780635d586bfd1461036557806361e7662b14610412578063666a342714610433578063666e1b391461045457806379662bd5146104755780638a8f1f2514610522578063a0776a591461058b578063e354a3f2146105e4578063e6562fe11461064f578063f2de12fc146106be578063f2fde38b14610719575b600080fd5b3480156100e857600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261018e94369492936024939284019190819084018382808284375050604080516020601f60608a01358b0180359182018390048302840183018552818452989b600160a060020a038b35169b838c01359b958601359a91995097506080909401955091935091820191819084018382808284375094975061073a9650505050505050565b604080519115158252519081900360200190f35b3480156101ae57600080fd5b506101c3600160a060020a0360043516610b8f565b60408051918252519081900360200190f35b3480156101e157600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101c394369492936024939284019190819084018382808284375094975050509235600160a060020a03169350610ba892505050565b34801561024557600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261018e94369492936024939284019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b8a359b909a909994019750919550918201935091508190840183828082843750949750610bc39650505050505050565b3480156102e257600080fd5b50604080516020601f60643560048181013592830184900484028501840190955281845261018e94600160a060020a0381351694602480351515956044359536956084949301918190840183828082843750949750610cf19650505050505050565b34801561035057600080fd5b5061018e600160a060020a036004351661108f565b34801561037157600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261018e94369492936024939284019190819084018382808284375050604080516020888301358a018035601f8101839004830284018301909452838352979a8935600160a060020a03169a8a8301359a9199909850606090910196509194509081019250819084018382808284375094975061116f9650505050505050565b34801561041e57600080fd5b506101c3600160a060020a0360043516611293565b34801561043f57600080fd5b5061018e600160a060020a03600435166112a6565b34801561046057600080fd5b5061018e600160a060020a0360043516611383565b34801561048157600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261018e94369492936024939284019190819084018382808284375050604080516020888301358a018035601f8101839004830284018301909452838352979a8935600160a060020a03169a8a8301359a919990985060609091019650919450908101925081908401838280828437509497506113989650505050505050565b34801561052e57600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261018e948235600160a060020a031694602480359536959460649492019190819084018382808284375094975061145a9650505050505050565b34801561059757600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101c39436949293602493928401919081908401838280828437509497506115a29650505050505050565b3480156105f057600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261018e948235600160a060020a031694602480351515953695946064949201919081908401838280828437509497506115b59650505050505050565b34801561065b57600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261018e948235600160a060020a03908116956024803590921695369594606494929301919081908401838280828437509497506116d89650505050505050565b3480156106ca57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101c394369492936024939284019190819084018382808284375094975050933594506118209350505050565b34801561072557600080fd5b5061018e600160a060020a0360043516611834565b600081336107506001838363ffffffff61199216565b15156107a8576040805160e560020a62461bcd02815260206004820152603a6024820152600080516020613fed833981519152604482015260008051602061408d833981519152606482015290519081900360840190fd5b6107bb600188818763ffffffff611b3e16565b151561085d576040805160e560020a62461bcd02815260206004820152605b60248201527f4572726f723a20556e61626c6520746f20617070726f7665206163636f756e7460448201527f2e20506c6561736520636865636b206973737565724669726d20616e6420666960648201527f726d20617574686f726974792061726520726567697374657265640000000000608482015290519081900360a40190fd5b610870600188818763ffffffff611e0b16565b1515610912576040805160e560020a62461bcd02815260206004820152605e60248201527f4572726f723a20556e61626c6520746f20736574206163636f756e742073746160448201527f7475732e20506c6561736520636865636b206973737565724669726d20616e6460648201527f206669726d20617574686f726974792061726520726567697374657265640000608482015290519081900360a40190fd5b61092660018989898863ffffffff61209016565b15156109c8576040805160e560020a62461bcd02815260206004820152605960248201527f4572726f723a20556e61626c6520746f206465706f7369742066756e64732e2060448201527f506c6561736520636865636b206973737565724669726d20616e64206669726d60648201527f20617574686f7269747920617265207265676973746572656400000000000000608482015290519081900360a40190fd5b6109da6001888763ffffffff61290d16565b1515610aa2576040805160e560020a62461bcd02815260206004820152607260248201527f4572726f723a20556e61626c6520746f2073657420696e697469616c2073706560448201527f6e64696e67206c696d697420666f72206163636f756e742e20506c656173652060648201527f636865636b206973737565724669726d20616e64206669726d20617574686f7260848201527f697479206172652072656769737465726564000000000000000000000000000060a482015290519081900360c40190fd5b610ab960018862015180420163ffffffff612b2016565b1515610b81576040805160e560020a62461bcd02815260206004820152606b60248201527f4572726f723a20556e61626c6520746f20736574207370656e64696e6720706560448201527f72696f6420666f72206163636f756e742e20506c6561736520636865636b206960648201527f73737565724669726d20616e64206669726d20617574686f726974792061726560848201527f207265676973746572656400000000000000000000000000000000000000000060a482015290519081900360c40190fd5b506001979650505050505050565b6000610ba260018363ffffffff612bb116565b92915050565b6000610bbc6001848463ffffffff612bd616565b9392505050565b60008133610bd96001838363ffffffff61199216565b1515610c31576040805160e560020a62461bcd02815260206004820152603a6024820152600080516020613fed833981519152604482015260008051602061408d833981519152606482015290519081900360840190fd5b610c436001878763ffffffff612d3716565b1515610ce5576040805160e560020a62461bcd02815260206004820152605560248201527f4572726f723a20556e61626c6520746f2073657420465820555344206261736960448201527f7320706f696e747320726174652e20506c6561736520656e737572652069737360648201527f7565724669726d20697320617574686f72697a65640000000000000000000000608482015290519081900360a40190fd5b50600195945050505050565b60008133610d076001838363ffffffff61199216565b1515610d5f576040805160e560020a62461bcd02815260206004820152603a6024820152600080516020613fed833981519152604482015260008051602061408d833981519152606482015290519081900360840190fd5b610d72600188888763ffffffff611b3e16565b1515610e14576040805160e560020a62461bcd02815260206004820152605b60248201527f4572726f723a20556e61626c6520746f20617070726f7665206163636f756e7460448201527f2e20506c6561736520636865636b206973737565724669726d20616e6420666960648201527f726d20617574686f726974792061726520726567697374657265640000000000608482015290519081900360a40190fd5b610e27600188888763ffffffff611e0b16565b1515610ec9576040805160e560020a62461bcd02815260206004820152605e60248201527f4572726f723a20556e61626c6520746f20736574206163636f756e742073746160448201527f7475732e20506c6561736520636865636b206973737565724669726d20616e6460648201527f206669726d20617574686f726974792061726520726567697374657265640000608482015290519081900360a40190fd5b610edb6001888763ffffffff61290d16565b1515610fa3576040805160e560020a62461bcd02815260206004820152607260248201527f4572726f723a20556e61626c6520746f2073657420696e697469616c2073706560448201527f6e64696e67206c696d697420666f72206163636f756e742e20506c656173652060648201527f636865636b206973737565724669726d20616e64206669726d20617574686f7260848201527f697479206172652072656769737465726564000000000000000000000000000060a482015290519081900360c40190fd5b610fba60018862015180420163ffffffff612b2016565b1515611082576040805160e560020a62461bcd02815260206004820152606b60248201527f4572726f723a20556e61626c6520746f20736574207370656e64696e6720706560448201527f72696f6420666f72206163636f756e742e20506c6561736520636865636b206960648201527f73737565724669726d20616e64206669726d20617574686f726974792061726560848201527f207265676973746572656400000000000000000000000000000000000000000060a482015290519081900360c40190fd5b5060019695505050505050565b3360009081526020819052604081205460ff16151561111e576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b600081336111856001838363ffffffff61199216565b15156111dd576040805160e560020a62461bcd02815260206004820152603a6024820152600080516020613fed833981519152604482015260008051602061408d833981519152606482015290519081900360840190fd5b6111f160018888888863ffffffff61209016565b1515611082576040805160e560020a62461bcd02815260206004820152605960248201527f4572726f723a20556e61626c6520746f206465706f7369742066756e64732e2060448201527f506c6561736520636865636b206973737565724669726d20616e64206669726d60648201527f20617574686f7269747920617265207265676973746572656400000000000000608482015290519081900360a40190fd5b6000610ba260018363ffffffff612f3416565b3360009081526020819052604081205460ff161515611335576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b600081336113ae6001838363ffffffff61199216565b1515611406576040805160e560020a62461bcd02815260206004820152603a6024820152600080516020613fed833981519152604482015260008051602061408d833981519152606482015290519081900360840190fd5b61141a60018888888863ffffffff61307316565b15156110825760405160e560020a62461bcd0281526004018080602001828103825260868152602001806140ad6086913960a00191505060405180910390fd5b600081336114706001838363ffffffff61199216565b15156114c8576040805160e560020a62461bcd02815260206004820152603a6024820152600080516020613fed833981519152604482015260008051602061408d833981519152606482015290519081900360840190fd5b6114da6001878763ffffffff61290d16565b1515610ce5576040805160e560020a62461bcd02815260206004820152607260248201527f4572726f723a20556e61626c6520746f2073657420696e697469616c2073706560448201527f6e64696e67206c696d697420666f72206163636f756e742e20506c656173652060648201527f636865636b206973737565724669726d20616e64206669726d20617574686f7260848201527f697479206172652072656769737465726564000000000000000000000000000060a482015290519081900360c40190fd5b6000610ba260018363ffffffff61384316565b600081336115cb6001838363ffffffff61199216565b1515611623576040805160e560020a62461bcd02815260206004820152603a6024820152600080516020613fed833981519152604482015260008051602061408d833981519152606482015290519081900360840190fd5b611636600187878763ffffffff611e0b16565b1515610ce5576040805160e560020a62461bcd02815260206004820152605a60248201527f4572726f723a20556e61626c6520746f20667265657a65206163636f756e742e60448201527f20506c6561736520636865636b206973737565724669726d20616e642066697260648201527f6d20617574686f72697479206172652072656769737465726564000000000000608482015290519081900360a40190fd5b600081336116ee6001838363ffffffff61199216565b1515611746576040805160e560020a62461bcd02815260206004820152603a6024820152600080516020613fed833981519152604482015260008051602061408d833981519152606482015290519081900360840190fd5b6117586001878763ffffffff61390316565b1515610ce5576040805160e560020a62461bcd02815260206004820152606d60248201527f4572726f723a20556e61626c6520746f2073657420666f72776172646564206160448201527f64647265737320666f72206163636f756e742e20506c6561736520636865636b60648201527f206973737565724669726d20616e64206669726d20617574686f72697479206160848201527f726520726567697374657265640000000000000000000000000000000000000060a482015290519081900360c40190fd5b6000610bbc6001848463ffffffff613a2b16565b3360009081526020819052604081205460ff1615156118c3576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a0382161515611923576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b600080836119a08685613acf565b60405160200180807f726567697374657265642e617574686f7269747900000000000000000000000081525060140183805190602001908083835b602083106119fa5780518252601f1990920191602091820191016119db565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310611a7c5780518252601f199092019160209182019101611a5d565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f7ae1cfca000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a039094169550637ae1cfca945060248083019491935090918290030181600087803b158015611b0957600080fd5b505af1158015611b1d573d6000803e3d6000fd5b505050506040513d6020811015611b3357600080fd5b505195945050505050565b600080611b4b8686613acf565b60405160200180807f6163636f756e742e6b7963000000000000000000000000000000000000000000815250600b0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611bd95780518252601f199092019160209182019101611bba565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208c547fabfdcced000000000000000000000000000000000000000000000000000000008452600484018290528b151560248501529451909750600160a060020a03909416955063abfdcced945060448083019491935090918290030181600087803b158015611c6e57600080fd5b505af1158015611c82573d6000803e3d6000fd5b505050506040513d6020811015611c9857600080fd5b50511515611d50576040805160e560020a62461bcd028152602060048201526068602482015260008051602061404d83398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b84600160a060020a03167fab56f1457128531bea5d39a6dbdbcdc655f2b2959bd7ee369f6461581aa6444d8585604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611dc4578181015183820152602001611dac565b50505050905090810190601f168015611df15780820380516001836020036101000a031916815260200191505b50935050505060405180910390a250600195945050505050565b600080611e188686613acf565b60405160200180807f6163636f756e742e616c6c6f7765640000000000000000000000000000000000815250600f0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611ea65780518252601f199092019160209182019101611e87565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208c547fabfdcced000000000000000000000000000000000000000000000000000000008452600484018290528b151560248501529451909750600160a060020a03909416955063abfdcced945060448083019491935090918290030181600087803b158015611f3b57600080fd5b505af1158015611f4f573d6000803e3d6000fd5b505050506040513d6020811015611f6557600080fd5b5051151561201d576040805160e560020a62461bcd028152602060048201526068602482015260008051602061404d83398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b84600160a060020a03167f1d71109398f40d30b03a3640657b60db5013a5e75026c3db99007b43bede166585856040518083151515158152602001806020018281038252838181518152602001915080519060200190808383600083811015611dc4578181015183820152602001611dac565b600080600080876120a18a89613acf565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b602083106120fb5780518252601f1990920191602091820191016120dc565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b6020831061217d5780518252601f19909201916020918201910161215e565b51815160001960209485036101000a019081169019919091161790526040519390910183900383207f746f6b656e2e69737375656400000000000000000000000000000000000000008483019081528e519199508e96508b955093602c019250908501908083835b602083106122045780518252601f1990920191602091820191016121e5565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b6020831061224c5780518252601f19909201916020918201910161222d565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b602083106122b05780518252601f199092019160209182019101612291565b51815160209384036101000a60001901801990921691161790526040519190930181900381207f746f6b656e2e737570706c7900000000000000000000000000000000000000008285019081528e519198508e96509450602c90910192850191508083835b602083106123345780518252601f199092019160209182019101612315565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083106123975780518252601f199092019160209182019101612378565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208f5460e060020a63bd02d0f5028452600484018b90529451909750600160a060020a03909416955063e2a4853a9450889361245293508c92879263bd02d0f5926024808401938290030181600087803b15801561241a57600080fd5b505af115801561242e573d6000803e3d6000fd5b505050506040513d602081101561244457600080fd5b50519063ffffffff613c4116565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b15801561249a57600080fd5b505af11580156124ae573d6000803e3d6000fd5b505050506040513d60208110156124c457600080fd5b50511515612546576040805160e560020a62461bcd028152602060048201526069602482015260008051602061404d833981519152604482015260008051602061402d833981519152606482015260008051602061400d833981519152608482015260008051602061406d83398151915260a482015290519081900360c40190fd5b88546040805160e060020a63bd02d0f5028152600481018590529051600160a060020a039092169163e2a4853a9185916125a5918b91869163bd02d0f59160248083019260209291908290030181600087803b15801561241a57600080fd5b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b1580156125ed57600080fd5b505af1158015612601573d6000803e3d6000fd5b505050506040513d602081101561261757600080fd5b50511515612699576040805160e560020a62461bcd028152602060048201526069602482015260008051602061404d833981519152604482015260008051602061402d833981519152606482015260008051602061400d833981519152608482015260008051602061406d83398151915260a482015290519081900360c40190fd5b88546040805160e060020a63bd02d0f5028152600481018490529051600160a060020a039092169163e2a4853a9184916126f8918b91869163bd02d0f59160248083019260209291908290030181600087803b15801561241a57600080fd5b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b15801561274057600080fd5b505af1158015612754573d6000803e3d6000fd5b505050506040513d602081101561276a57600080fd5b505115156127ec576040805160e560020a62461bcd028152602060048201526069602482015260008051602061404d833981519152604482015260008051602061402d833981519152606482015260008051602061400d833981519152608482015260008051602061406d83398151915260a482015290519081900360c40190fd5b86600160a060020a03167fb20a35859ac659f96b757a0975ff35141c00728783cc1b222c2fc323ed8a34ea898888604051808060200184815260200180602001838103835286818151815260200191508051906020019080838360005b83811015612861578181015183820152602001612849565b50505050905090810190601f16801561288e5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156128c15781810151838201526020016128a9565b50505050905090810190601f1680156128ee5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a250600198975050505050505050565b6000808360405160200180807f6163636f756e742e7370656e64696e672e6c696d69740000000000000000000081525060160182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b6020831061299f5780518252601f199092019160209182019101612980565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547fe2a4853a00000000000000000000000000000000000000000000000000000000845260048401829052602484018b90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b158015612a3357600080fd5b505af1158015612a47573d6000803e3d6000fd5b505050506040513d6020811015612a5d57600080fd5b50511515612b15576040805160e560020a62461bcd028152602060048201526068602482015260008051602061404d83398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b506001949350505050565b6000808360405160200180807f6c696d69742e7370656e64696e672e706572696f64000000000000000000000081525060150182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083836020831061299f5780518252601f199092019160209182019101612980565b6000610bbc612bc08484613cc4565b612bca8585612f34565b9063ffffffff613d6616565b60008083612be48685613acf565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b60208310612c3e5780518252601f199092019160209182019101612c1f565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310612cc05780518252601f199092019160209182019101612ca1565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b158015611b0957600080fd5b6000808360405160200180807f66782e7573642e72617465000000000000000000000000000000000000000000815250600b0182805190602001908083835b60208310612d955780518252601f199092019160209182019101612d76565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310612df85780518252601f199092019160209182019101612dd9565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547fe2a4853a00000000000000000000000000000000000000000000000000000000845260048401829052602484018b90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b158015612e8c57600080fd5b505af1158015612ea0573d6000803e3d6000fd5b505050506040513d6020811015612eb657600080fd5b50511515612b15576040805160e560020a62461bcd02815260206004820152603060248201527f4572726f723a20556e61626c6520746f20757064617465206163636f756e742060448201527f7370656e64696e6720706572696f642e00000000000000000000000000000000606482015290519081900360840190fd5b6000808260405160200180807f6163636f756e742e7370656e64696e672e6c696d69740000000000000000000081525060160182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310612fc65780518252601f199092019160209182019101612fa7565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b15801561303d57600080fd5b505af1158015613051573d6000803e3d6000fd5b505050506040513d602081101561306757600080fd5b505191505b5092915050565b600080600080876130848a89613acf565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b602083106130de5780518252601f1990920191602091820191016130bf565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106131605780518252601f199092019160209182019101613141565b51815160001960209485036101000a019081169019919091161790526040519390910183900383207f746f6b656e2e69737375656400000000000000000000000000000000000000008483019081528e519199508e96508b955093602c019250908501908083835b602083106131e75780518252601f1990920191602091820191016131c8565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b6020831061322f5780518252601f199092019160209182019101613210565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b602083106132935780518252601f199092019160209182019101613274565b51815160209384036101000a60001901801990921691161790526040519190930181900381207f746f6b656e2e737570706c7900000000000000000000000000000000000000008285019081528e519198508e96509450602c90910192850191508083835b602083106133175780518252601f1990920191602091820191016132f8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b6020831061337a5780518252601f19909201916020918201910161335b565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208f5460e060020a63bd02d0f5028452600484018b90529451909750600160a060020a03909416955063e2a4853a9450889361343593508c92879263bd02d0f5926024808401938290030181600087803b1580156133fd57600080fd5b505af1158015613411573d6000803e3d6000fd5b505050506040513d602081101561342757600080fd5b50519063ffffffff613d6616565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b15801561347d57600080fd5b505af1158015613491573d6000803e3d6000fd5b505050506040513d60208110156134a757600080fd5b50511515613529576040805160e560020a62461bcd028152602060048201526069602482015260008051602061404d833981519152604482015260008051602061402d833981519152606482015260008051602061400d833981519152608482015260008051602061406d83398151915260a482015290519081900360c40190fd5b88546040805160e060020a63bd02d0f5028152600481018590529051600160a060020a039092169163e2a4853a918591613588918b91869163bd02d0f59160248083019260209291908290030181600087803b1580156133fd57600080fd5b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b1580156135d057600080fd5b505af11580156135e4573d6000803e3d6000fd5b505050506040513d60208110156135fa57600080fd5b5051151561367c576040805160e560020a62461bcd028152602060048201526069602482015260008051602061404d833981519152604482015260008051602061402d833981519152606482015260008051602061400d833981519152608482015260008051602061406d83398151915260a482015290519081900360c40190fd5b88546040805160e060020a63bd02d0f5028152600481018490529051600160a060020a039092169163e2a4853a9184916136db918b91869163bd02d0f59160248083019260209291908290030181600087803b1580156133fd57600080fd5b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b15801561372357600080fd5b505af1158015613737573d6000803e3d6000fd5b505050506040513d602081101561374d57600080fd5b505115156137cf576040805160e560020a62461bcd028152602060048201526069602482015260008051602061404d833981519152604482015260008051602061402d833981519152606482015260008051602061400d833981519152608482015260008051602061406d83398151915260a482015290519081900360c40190fd5b86600160a060020a03167fbe0071d3ab0eb6dc7f33a38ba50120d775cd62fa123f3b59c193caf48e44bb4c8988886040518080602001848152602001806020018381038352868181518152602001915080519060200190808383600083811015612861578181015183820152602001612849565b6000808260405160200180807f746f6b656e2e737570706c790000000000000000000000000000000000000000815250600c0182805190602001908083835b602083106138a15780518252601f199092019160209182019101613882565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405260405180828051906020019080838360208310612fc65780518252601f199092019160209182019101612fa7565b6000808260405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106139955780518252601f199092019160209182019101613976565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547fca446dd900000000000000000000000000000000000000000000000000000000845260048401829052600160a060020a038c81166024860152955191985094909416955063ca446dd9945060448083019491935090918290030181600087803b158015612a3357600080fd5b600080600080613a70876040805190810160405280600481526020017f5553447800000000000000000000000000000000000000000000000000000000815250613deb565b9250613a7c8787613deb565b9150613ac482600a0a613aac85600a0a613ab8612710613aac613a9f8e8e613e48565b8c9063ffffffff613ea516565b9063ffffffff613f4416565b9063ffffffff613ea516565b979650505050505050565b60008060008360405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310613b635780518252601f199092019160209182019101613b44565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015613bf057600080fd5b505af1158015613c04573d6000803e3d6000fd5b505050506040513d6020811015613c1a57600080fd5b50519050600160a060020a03811615613c3557809250613c39565b8392505b505092915050565b600082820183811015610bbc576040805160e560020a62461bcd02815260206004820152602160248201527f4572726f723a20556e73616665206164646974696f6e206f7065726174696f6e60448201527f2100000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008082613cd28585613f5b565b60405160200180807f6163636f756e742e7370656e64696e672e616d6f756e7400000000000000000081525060170183600160a060020a0316600160a060020a0316606060020a0281526014018281526020019250505060405160208183030381529060405260405180828051906020019080838360208310612fc65780518252601f199092019160209182019101612fa7565b600082821115613de5576040805160e560020a62461bcd028152602060048201526024808201527f4572726f723a20556e73616665207375627472616374696f6e206f706572617460448201527f696f6e2100000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50900390565b6000808260405160200180807f746f6b656e2e646563696d616c73000000000000000000000000000000000000815250600e018280519060200190808383602083106138a15780518252601f199092019160209182019101613882565b6000808260405160200180807f66782e7573642e72617465000000000000000000000000000000000000000000815250600b018280519060200190808383602083106138a15780518252601f199092019160209182019101613882565b600080831515613eb8576000915061306c565b50828202828482811515613ec857fe5b0414610bbc576040805160e560020a62461bcd02815260206004820152602760248201527f4572726f723a20556e73616665206d756c7469706c69636174696f6e206f706560448201527f726174696f6e2100000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000808284811515613f5257fe5b04949350505050565b6000808260405160200180807f6c696d69742e7370656e64696e672e706572696f64000000000000000000000081525060150182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310612fc65780518252601f199092019160209182019101612fa756004572726f723a206973737565724669726d20616e642f6f72206669726d2061756c6c6f776564207065726d697373696f6e7320776974682073746f726167652075652e20506c6561736520656e7375726520636f6e74726163742068617320614572726f723a20556e61626c6520746f207365742073746f726167652076616c636f6e74726163742e000000000000000000000000000000000000000000000074686f7269747920617265206e6f7420726567697374657265640000000000004572726f723a20556e61626c6520746f2077697468647261772066756e64732e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f7269747920617265207265676973746572656420616e642068617665206973737565642066756e647320746861742063616e2062652077697468647261776ea165627a7a72305820202768ce7da49e7741483b78b1396fb680665921eef847f295223e40b6f927070029", + "deployedBytecode": "0x6080604052600436106100d75763ffffffff60e060020a60003504166328e53bb281146100dc57806329db8ec4146101a25780633cdb9762146101d5578063448900141461023957806346e06634146102d65780634bbc142c146103445780635d586bfd1461036557806361e7662b14610412578063666a342714610433578063666e1b391461045457806379662bd5146104755780638a8f1f2514610522578063a0776a591461058b578063e354a3f2146105e4578063e6562fe11461064f578063f2de12fc146106be578063f2fde38b14610719575b600080fd5b3480156100e857600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261018e94369492936024939284019190819084018382808284375050604080516020601f60608a01358b0180359182018390048302840183018552818452989b600160a060020a038b35169b838c01359b958601359a91995097506080909401955091935091820191819084018382808284375094975061073a9650505050505050565b604080519115158252519081900360200190f35b3480156101ae57600080fd5b506101c3600160a060020a0360043516610b8f565b60408051918252519081900360200190f35b3480156101e157600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101c394369492936024939284019190819084018382808284375094975050509235600160a060020a03169350610ba892505050565b34801561024557600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261018e94369492936024939284019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b8a359b909a909994019750919550918201935091508190840183828082843750949750610bc39650505050505050565b3480156102e257600080fd5b50604080516020601f60643560048181013592830184900484028501840190955281845261018e94600160a060020a0381351694602480351515956044359536956084949301918190840183828082843750949750610cf19650505050505050565b34801561035057600080fd5b5061018e600160a060020a036004351661108f565b34801561037157600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261018e94369492936024939284019190819084018382808284375050604080516020888301358a018035601f8101839004830284018301909452838352979a8935600160a060020a03169a8a8301359a9199909850606090910196509194509081019250819084018382808284375094975061116f9650505050505050565b34801561041e57600080fd5b506101c3600160a060020a0360043516611293565b34801561043f57600080fd5b5061018e600160a060020a03600435166112a6565b34801561046057600080fd5b5061018e600160a060020a0360043516611383565b34801561048157600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261018e94369492936024939284019190819084018382808284375050604080516020888301358a018035601f8101839004830284018301909452838352979a8935600160a060020a03169a8a8301359a919990985060609091019650919450908101925081908401838280828437509497506113989650505050505050565b34801561052e57600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261018e948235600160a060020a031694602480359536959460649492019190819084018382808284375094975061145a9650505050505050565b34801561059757600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101c39436949293602493928401919081908401838280828437509497506115a29650505050505050565b3480156105f057600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261018e948235600160a060020a031694602480351515953695946064949201919081908401838280828437509497506115b59650505050505050565b34801561065b57600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261018e948235600160a060020a03908116956024803590921695369594606494929301919081908401838280828437509497506116d89650505050505050565b3480156106ca57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101c394369492936024939284019190819084018382808284375094975050933594506118209350505050565b34801561072557600080fd5b5061018e600160a060020a0360043516611834565b600081336107506001838363ffffffff61199216565b15156107a8576040805160e560020a62461bcd02815260206004820152603a6024820152600080516020613fed833981519152604482015260008051602061408d833981519152606482015290519081900360840190fd5b6107bb600188818763ffffffff611b3e16565b151561085d576040805160e560020a62461bcd02815260206004820152605b60248201527f4572726f723a20556e61626c6520746f20617070726f7665206163636f756e7460448201527f2e20506c6561736520636865636b206973737565724669726d20616e6420666960648201527f726d20617574686f726974792061726520726567697374657265640000000000608482015290519081900360a40190fd5b610870600188818763ffffffff611e0b16565b1515610912576040805160e560020a62461bcd02815260206004820152605e60248201527f4572726f723a20556e61626c6520746f20736574206163636f756e742073746160448201527f7475732e20506c6561736520636865636b206973737565724669726d20616e6460648201527f206669726d20617574686f726974792061726520726567697374657265640000608482015290519081900360a40190fd5b61092660018989898863ffffffff61209016565b15156109c8576040805160e560020a62461bcd02815260206004820152605960248201527f4572726f723a20556e61626c6520746f206465706f7369742066756e64732e2060448201527f506c6561736520636865636b206973737565724669726d20616e64206669726d60648201527f20617574686f7269747920617265207265676973746572656400000000000000608482015290519081900360a40190fd5b6109da6001888763ffffffff61290d16565b1515610aa2576040805160e560020a62461bcd02815260206004820152607260248201527f4572726f723a20556e61626c6520746f2073657420696e697469616c2073706560448201527f6e64696e67206c696d697420666f72206163636f756e742e20506c656173652060648201527f636865636b206973737565724669726d20616e64206669726d20617574686f7260848201527f697479206172652072656769737465726564000000000000000000000000000060a482015290519081900360c40190fd5b610ab960018862015180420163ffffffff612b2016565b1515610b81576040805160e560020a62461bcd02815260206004820152606b60248201527f4572726f723a20556e61626c6520746f20736574207370656e64696e6720706560448201527f72696f6420666f72206163636f756e742e20506c6561736520636865636b206960648201527f73737565724669726d20616e64206669726d20617574686f726974792061726560848201527f207265676973746572656400000000000000000000000000000000000000000060a482015290519081900360c40190fd5b506001979650505050505050565b6000610ba260018363ffffffff612bb116565b92915050565b6000610bbc6001848463ffffffff612bd616565b9392505050565b60008133610bd96001838363ffffffff61199216565b1515610c31576040805160e560020a62461bcd02815260206004820152603a6024820152600080516020613fed833981519152604482015260008051602061408d833981519152606482015290519081900360840190fd5b610c436001878763ffffffff612d3716565b1515610ce5576040805160e560020a62461bcd02815260206004820152605560248201527f4572726f723a20556e61626c6520746f2073657420465820555344206261736960448201527f7320706f696e747320726174652e20506c6561736520656e737572652069737360648201527f7565724669726d20697320617574686f72697a65640000000000000000000000608482015290519081900360a40190fd5b50600195945050505050565b60008133610d076001838363ffffffff61199216565b1515610d5f576040805160e560020a62461bcd02815260206004820152603a6024820152600080516020613fed833981519152604482015260008051602061408d833981519152606482015290519081900360840190fd5b610d72600188888763ffffffff611b3e16565b1515610e14576040805160e560020a62461bcd02815260206004820152605b60248201527f4572726f723a20556e61626c6520746f20617070726f7665206163636f756e7460448201527f2e20506c6561736520636865636b206973737565724669726d20616e6420666960648201527f726d20617574686f726974792061726520726567697374657265640000000000608482015290519081900360a40190fd5b610e27600188888763ffffffff611e0b16565b1515610ec9576040805160e560020a62461bcd02815260206004820152605e60248201527f4572726f723a20556e61626c6520746f20736574206163636f756e742073746160448201527f7475732e20506c6561736520636865636b206973737565724669726d20616e6460648201527f206669726d20617574686f726974792061726520726567697374657265640000608482015290519081900360a40190fd5b610edb6001888763ffffffff61290d16565b1515610fa3576040805160e560020a62461bcd02815260206004820152607260248201527f4572726f723a20556e61626c6520746f2073657420696e697469616c2073706560448201527f6e64696e67206c696d697420666f72206163636f756e742e20506c656173652060648201527f636865636b206973737565724669726d20616e64206669726d20617574686f7260848201527f697479206172652072656769737465726564000000000000000000000000000060a482015290519081900360c40190fd5b610fba60018862015180420163ffffffff612b2016565b1515611082576040805160e560020a62461bcd02815260206004820152606b60248201527f4572726f723a20556e61626c6520746f20736574207370656e64696e6720706560448201527f72696f6420666f72206163636f756e742e20506c6561736520636865636b206960648201527f73737565724669726d20616e64206669726d20617574686f726974792061726560848201527f207265676973746572656400000000000000000000000000000000000000000060a482015290519081900360c40190fd5b5060019695505050505050565b3360009081526020819052604081205460ff16151561111e576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b600081336111856001838363ffffffff61199216565b15156111dd576040805160e560020a62461bcd02815260206004820152603a6024820152600080516020613fed833981519152604482015260008051602061408d833981519152606482015290519081900360840190fd5b6111f160018888888863ffffffff61209016565b1515611082576040805160e560020a62461bcd02815260206004820152605960248201527f4572726f723a20556e61626c6520746f206465706f7369742066756e64732e2060448201527f506c6561736520636865636b206973737565724669726d20616e64206669726d60648201527f20617574686f7269747920617265207265676973746572656400000000000000608482015290519081900360a40190fd5b6000610ba260018363ffffffff612f3416565b3360009081526020819052604081205460ff161515611335576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b600081336113ae6001838363ffffffff61199216565b1515611406576040805160e560020a62461bcd02815260206004820152603a6024820152600080516020613fed833981519152604482015260008051602061408d833981519152606482015290519081900360840190fd5b61141a60018888888863ffffffff61307316565b15156110825760405160e560020a62461bcd0281526004018080602001828103825260868152602001806140ad6086913960a00191505060405180910390fd5b600081336114706001838363ffffffff61199216565b15156114c8576040805160e560020a62461bcd02815260206004820152603a6024820152600080516020613fed833981519152604482015260008051602061408d833981519152606482015290519081900360840190fd5b6114da6001878763ffffffff61290d16565b1515610ce5576040805160e560020a62461bcd02815260206004820152607260248201527f4572726f723a20556e61626c6520746f2073657420696e697469616c2073706560448201527f6e64696e67206c696d697420666f72206163636f756e742e20506c656173652060648201527f636865636b206973737565724669726d20616e64206669726d20617574686f7260848201527f697479206172652072656769737465726564000000000000000000000000000060a482015290519081900360c40190fd5b6000610ba260018363ffffffff61384316565b600081336115cb6001838363ffffffff61199216565b1515611623576040805160e560020a62461bcd02815260206004820152603a6024820152600080516020613fed833981519152604482015260008051602061408d833981519152606482015290519081900360840190fd5b611636600187878763ffffffff611e0b16565b1515610ce5576040805160e560020a62461bcd02815260206004820152605a60248201527f4572726f723a20556e61626c6520746f20667265657a65206163636f756e742e60448201527f20506c6561736520636865636b206973737565724669726d20616e642066697260648201527f6d20617574686f72697479206172652072656769737465726564000000000000608482015290519081900360a40190fd5b600081336116ee6001838363ffffffff61199216565b1515611746576040805160e560020a62461bcd02815260206004820152603a6024820152600080516020613fed833981519152604482015260008051602061408d833981519152606482015290519081900360840190fd5b6117586001878763ffffffff61390316565b1515610ce5576040805160e560020a62461bcd02815260206004820152606d60248201527f4572726f723a20556e61626c6520746f2073657420666f72776172646564206160448201527f64647265737320666f72206163636f756e742e20506c6561736520636865636b60648201527f206973737565724669726d20616e64206669726d20617574686f72697479206160848201527f726520726567697374657265640000000000000000000000000000000000000060a482015290519081900360c40190fd5b6000610bbc6001848463ffffffff613a2b16565b3360009081526020819052604081205460ff1615156118c3576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a0382161515611923576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b600080836119a08685613acf565b60405160200180807f726567697374657265642e617574686f7269747900000000000000000000000081525060140183805190602001908083835b602083106119fa5780518252601f1990920191602091820191016119db565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310611a7c5780518252601f199092019160209182019101611a5d565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f7ae1cfca000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a039094169550637ae1cfca945060248083019491935090918290030181600087803b158015611b0957600080fd5b505af1158015611b1d573d6000803e3d6000fd5b505050506040513d6020811015611b3357600080fd5b505195945050505050565b600080611b4b8686613acf565b60405160200180807f6163636f756e742e6b7963000000000000000000000000000000000000000000815250600b0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611bd95780518252601f199092019160209182019101611bba565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208c547fabfdcced000000000000000000000000000000000000000000000000000000008452600484018290528b151560248501529451909750600160a060020a03909416955063abfdcced945060448083019491935090918290030181600087803b158015611c6e57600080fd5b505af1158015611c82573d6000803e3d6000fd5b505050506040513d6020811015611c9857600080fd5b50511515611d50576040805160e560020a62461bcd028152602060048201526068602482015260008051602061404d83398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b84600160a060020a03167fab56f1457128531bea5d39a6dbdbcdc655f2b2959bd7ee369f6461581aa6444d8585604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611dc4578181015183820152602001611dac565b50505050905090810190601f168015611df15780820380516001836020036101000a031916815260200191505b50935050505060405180910390a250600195945050505050565b600080611e188686613acf565b60405160200180807f6163636f756e742e616c6c6f7765640000000000000000000000000000000000815250600f0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611ea65780518252601f199092019160209182019101611e87565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208c547fabfdcced000000000000000000000000000000000000000000000000000000008452600484018290528b151560248501529451909750600160a060020a03909416955063abfdcced945060448083019491935090918290030181600087803b158015611f3b57600080fd5b505af1158015611f4f573d6000803e3d6000fd5b505050506040513d6020811015611f6557600080fd5b5051151561201d576040805160e560020a62461bcd028152602060048201526068602482015260008051602061404d83398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b84600160a060020a03167f1d71109398f40d30b03a3640657b60db5013a5e75026c3db99007b43bede166585856040518083151515158152602001806020018281038252838181518152602001915080519060200190808383600083811015611dc4578181015183820152602001611dac565b600080600080876120a18a89613acf565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b602083106120fb5780518252601f1990920191602091820191016120dc565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b6020831061217d5780518252601f19909201916020918201910161215e565b51815160001960209485036101000a019081169019919091161790526040519390910183900383207f746f6b656e2e69737375656400000000000000000000000000000000000000008483019081528e519199508e96508b955093602c019250908501908083835b602083106122045780518252601f1990920191602091820191016121e5565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b6020831061224c5780518252601f19909201916020918201910161222d565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b602083106122b05780518252601f199092019160209182019101612291565b51815160209384036101000a60001901801990921691161790526040519190930181900381207f746f6b656e2e737570706c7900000000000000000000000000000000000000008285019081528e519198508e96509450602c90910192850191508083835b602083106123345780518252601f199092019160209182019101612315565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083106123975780518252601f199092019160209182019101612378565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208f5460e060020a63bd02d0f5028452600484018b90529451909750600160a060020a03909416955063e2a4853a9450889361245293508c92879263bd02d0f5926024808401938290030181600087803b15801561241a57600080fd5b505af115801561242e573d6000803e3d6000fd5b505050506040513d602081101561244457600080fd5b50519063ffffffff613c4116565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b15801561249a57600080fd5b505af11580156124ae573d6000803e3d6000fd5b505050506040513d60208110156124c457600080fd5b50511515612546576040805160e560020a62461bcd028152602060048201526069602482015260008051602061404d833981519152604482015260008051602061402d833981519152606482015260008051602061400d833981519152608482015260008051602061406d83398151915260a482015290519081900360c40190fd5b88546040805160e060020a63bd02d0f5028152600481018590529051600160a060020a039092169163e2a4853a9185916125a5918b91869163bd02d0f59160248083019260209291908290030181600087803b15801561241a57600080fd5b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b1580156125ed57600080fd5b505af1158015612601573d6000803e3d6000fd5b505050506040513d602081101561261757600080fd5b50511515612699576040805160e560020a62461bcd028152602060048201526069602482015260008051602061404d833981519152604482015260008051602061402d833981519152606482015260008051602061400d833981519152608482015260008051602061406d83398151915260a482015290519081900360c40190fd5b88546040805160e060020a63bd02d0f5028152600481018490529051600160a060020a039092169163e2a4853a9184916126f8918b91869163bd02d0f59160248083019260209291908290030181600087803b15801561241a57600080fd5b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b15801561274057600080fd5b505af1158015612754573d6000803e3d6000fd5b505050506040513d602081101561276a57600080fd5b505115156127ec576040805160e560020a62461bcd028152602060048201526069602482015260008051602061404d833981519152604482015260008051602061402d833981519152606482015260008051602061400d833981519152608482015260008051602061406d83398151915260a482015290519081900360c40190fd5b86600160a060020a03167fb20a35859ac659f96b757a0975ff35141c00728783cc1b222c2fc323ed8a34ea898888604051808060200184815260200180602001838103835286818151815260200191508051906020019080838360005b83811015612861578181015183820152602001612849565b50505050905090810190601f16801561288e5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156128c15781810151838201526020016128a9565b50505050905090810190601f1680156128ee5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a250600198975050505050505050565b6000808360405160200180807f6163636f756e742e7370656e64696e672e6c696d69740000000000000000000081525060160182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b6020831061299f5780518252601f199092019160209182019101612980565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547fe2a4853a00000000000000000000000000000000000000000000000000000000845260048401829052602484018b90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b158015612a3357600080fd5b505af1158015612a47573d6000803e3d6000fd5b505050506040513d6020811015612a5d57600080fd5b50511515612b15576040805160e560020a62461bcd028152602060048201526068602482015260008051602061404d83398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b506001949350505050565b6000808360405160200180807f6c696d69742e7370656e64696e672e706572696f64000000000000000000000081525060150182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083836020831061299f5780518252601f199092019160209182019101612980565b6000610bbc612bc08484613cc4565b612bca8585612f34565b9063ffffffff613d6616565b60008083612be48685613acf565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b60208310612c3e5780518252601f199092019160209182019101612c1f565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310612cc05780518252601f199092019160209182019101612ca1565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b158015611b0957600080fd5b6000808360405160200180807f66782e7573642e72617465000000000000000000000000000000000000000000815250600b0182805190602001908083835b60208310612d955780518252601f199092019160209182019101612d76565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310612df85780518252601f199092019160209182019101612dd9565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547fe2a4853a00000000000000000000000000000000000000000000000000000000845260048401829052602484018b90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b158015612e8c57600080fd5b505af1158015612ea0573d6000803e3d6000fd5b505050506040513d6020811015612eb657600080fd5b50511515612b15576040805160e560020a62461bcd02815260206004820152603060248201527f4572726f723a20556e61626c6520746f20757064617465206163636f756e742060448201527f7370656e64696e6720706572696f642e00000000000000000000000000000000606482015290519081900360840190fd5b6000808260405160200180807f6163636f756e742e7370656e64696e672e6c696d69740000000000000000000081525060160182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310612fc65780518252601f199092019160209182019101612fa7565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b15801561303d57600080fd5b505af1158015613051573d6000803e3d6000fd5b505050506040513d602081101561306757600080fd5b505191505b5092915050565b600080600080876130848a89613acf565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b602083106130de5780518252601f1990920191602091820191016130bf565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106131605780518252601f199092019160209182019101613141565b51815160001960209485036101000a019081169019919091161790526040519390910183900383207f746f6b656e2e69737375656400000000000000000000000000000000000000008483019081528e519199508e96508b955093602c019250908501908083835b602083106131e75780518252601f1990920191602091820191016131c8565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b6020831061322f5780518252601f199092019160209182019101613210565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b602083106132935780518252601f199092019160209182019101613274565b51815160209384036101000a60001901801990921691161790526040519190930181900381207f746f6b656e2e737570706c7900000000000000000000000000000000000000008285019081528e519198508e96509450602c90910192850191508083835b602083106133175780518252601f1990920191602091820191016132f8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b6020831061337a5780518252601f19909201916020918201910161335b565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208f5460e060020a63bd02d0f5028452600484018b90529451909750600160a060020a03909416955063e2a4853a9450889361343593508c92879263bd02d0f5926024808401938290030181600087803b1580156133fd57600080fd5b505af1158015613411573d6000803e3d6000fd5b505050506040513d602081101561342757600080fd5b50519063ffffffff613d6616565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b15801561347d57600080fd5b505af1158015613491573d6000803e3d6000fd5b505050506040513d60208110156134a757600080fd5b50511515613529576040805160e560020a62461bcd028152602060048201526069602482015260008051602061404d833981519152604482015260008051602061402d833981519152606482015260008051602061400d833981519152608482015260008051602061406d83398151915260a482015290519081900360c40190fd5b88546040805160e060020a63bd02d0f5028152600481018590529051600160a060020a039092169163e2a4853a918591613588918b91869163bd02d0f59160248083019260209291908290030181600087803b1580156133fd57600080fd5b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b1580156135d057600080fd5b505af11580156135e4573d6000803e3d6000fd5b505050506040513d60208110156135fa57600080fd5b5051151561367c576040805160e560020a62461bcd028152602060048201526069602482015260008051602061404d833981519152604482015260008051602061402d833981519152606482015260008051602061400d833981519152608482015260008051602061406d83398151915260a482015290519081900360c40190fd5b88546040805160e060020a63bd02d0f5028152600481018490529051600160a060020a039092169163e2a4853a9184916136db918b91869163bd02d0f59160248083019260209291908290030181600087803b1580156133fd57600080fd5b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b15801561372357600080fd5b505af1158015613737573d6000803e3d6000fd5b505050506040513d602081101561374d57600080fd5b505115156137cf576040805160e560020a62461bcd028152602060048201526069602482015260008051602061404d833981519152604482015260008051602061402d833981519152606482015260008051602061400d833981519152608482015260008051602061406d83398151915260a482015290519081900360c40190fd5b86600160a060020a03167fbe0071d3ab0eb6dc7f33a38ba50120d775cd62fa123f3b59c193caf48e44bb4c8988886040518080602001848152602001806020018381038352868181518152602001915080519060200190808383600083811015612861578181015183820152602001612849565b6000808260405160200180807f746f6b656e2e737570706c790000000000000000000000000000000000000000815250600c0182805190602001908083835b602083106138a15780518252601f199092019160209182019101613882565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405260405180828051906020019080838360208310612fc65780518252601f199092019160209182019101612fa7565b6000808260405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106139955780518252601f199092019160209182019101613976565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547fca446dd900000000000000000000000000000000000000000000000000000000845260048401829052600160a060020a038c81166024860152955191985094909416955063ca446dd9945060448083019491935090918290030181600087803b158015612a3357600080fd5b600080600080613a70876040805190810160405280600481526020017f5553447800000000000000000000000000000000000000000000000000000000815250613deb565b9250613a7c8787613deb565b9150613ac482600a0a613aac85600a0a613ab8612710613aac613a9f8e8e613e48565b8c9063ffffffff613ea516565b9063ffffffff613f4416565b9063ffffffff613ea516565b979650505050505050565b60008060008360405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310613b635780518252601f199092019160209182019101613b44565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015613bf057600080fd5b505af1158015613c04573d6000803e3d6000fd5b505050506040513d6020811015613c1a57600080fd5b50519050600160a060020a03811615613c3557809250613c39565b8392505b505092915050565b600082820183811015610bbc576040805160e560020a62461bcd02815260206004820152602160248201527f4572726f723a20556e73616665206164646974696f6e206f7065726174696f6e60448201527f2100000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008082613cd28585613f5b565b60405160200180807f6163636f756e742e7370656e64696e672e616d6f756e7400000000000000000081525060170183600160a060020a0316600160a060020a0316606060020a0281526014018281526020019250505060405160208183030381529060405260405180828051906020019080838360208310612fc65780518252601f199092019160209182019101612fa7565b600082821115613de5576040805160e560020a62461bcd028152602060048201526024808201527f4572726f723a20556e73616665207375627472616374696f6e206f706572617460448201527f696f6e2100000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50900390565b6000808260405160200180807f746f6b656e2e646563696d616c73000000000000000000000000000000000000815250600e018280519060200190808383602083106138a15780518252601f199092019160209182019101613882565b6000808260405160200180807f66782e7573642e72617465000000000000000000000000000000000000000000815250600b018280519060200190808383602083106138a15780518252601f199092019160209182019101613882565b600080831515613eb8576000915061306c565b50828202828482811515613ec857fe5b0414610bbc576040805160e560020a62461bcd02815260206004820152602760248201527f4572726f723a20556e73616665206d756c7469706c69636174696f6e206f706560448201527f726174696f6e2100000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000808284811515613f5257fe5b04949350505050565b6000808260405160200180807f6c696d69742e7370656e64696e672e706572696f64000000000000000000000081525060150182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310612fc65780518252601f199092019160209182019101612fa756004572726f723a206973737565724669726d20616e642f6f72206669726d2061756c6c6f776564207065726d697373696f6e7320776974682073746f726167652075652e20506c6561736520656e7375726520636f6e74726163742068617320614572726f723a20556e61626c6520746f207365742073746f726167652076616c636f6e74726163742e000000000000000000000000000000000000000000000074686f7269747920617265206e6f7420726567697374657265640000000000004572726f723a20556e61626c6520746f2077697468647261772066756e64732e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f7269747920617265207265676973746572656420616e642068617665206973737565642066756e647320746861742063616e2062652077697468647261776ea165627a7a72305820202768ce7da49e7741483b78b1396fb680665921eef847f295223e40b6f927070029", + "sourceMap": "881:11789:4:-;;;1234:430;8:9:-1;5:2;;;30:1;27;20:12;5:2;1234:430:4;;;;;;;;;;;;;;;;1117:10:1;1111:5;:17;;;1234:430:4;1111:17:1;;;;;;:24;;1131:4;-1:-1:-1;;1111:24:1;;;;;;;1528:46:4;;-1:-1:-1;;;;;;1528:46:4;-1:-1:-1;;;;;1528:46:4;;;;;;;;;1633:24;;;;;;;;881:11789;;;;;;;;", + "deployedSourceMap": "881:11789:4:-;;;;;;;;;-1:-1:-1;;;881:11789:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5134:1383;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5134:1383:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5134:1383:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5134:1383:4;;;;;;;;;;;;;;;;-1:-1:-1;5134:1383:4;-1:-1:-1;5134:1383:4;;;;;-1:-1:-1;5134:1383:4;;-1:-1:-1;5134:1383:4;;;;;;;;;;;;;;-1:-1:-1;5134:1383:4;;-1:-1:-1;5134:1383:4;;-1:-1:-1;;;;;;;5134:1383:4;;;;;;;;;;;;;;;;;;;7513:161;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7513:161:4;-1:-1:-1;;;;;7513:161:4;;;;;;;;;;;;;;;;;;;;;1905:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1905:154:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1905:154:4;;-1:-1:-1;;;1905:154:4;;-1:-1:-1;;;;;1905:154:4;;-1:-1:-1;1905:154:4;;-1:-1:-1;;;1905:154:4;8561:334;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8561:334:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8561:334:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8561:334:4;;-1:-1:-1;8561:334:4;;;;-1:-1:-1;8561:334:4;-1:-1:-1;8561:334:4;;;;;;;;;;-1:-1:-1;8561:334:4;;-1:-1:-1;8561:334:4;;-1:-1:-1;;;;;;;8561:334:4;3508:1172;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3508:1172:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3508:1172:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3508:1172:4;;-1:-1:-1;3508:1172:4;;-1:-1:-1;;;;;;;3508:1172:4;2127:185:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2127:185:1;-1:-1:-1;;;;;2127:185:1;;;;;10549:577:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10549:577:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10549:577:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10549:577:4;;;;;;;;;;;-1:-1:-1;10549:577:4;;;;;-1:-1:-1;10549:577:4;;-1:-1:-1;10549:577:4;;;;-1:-1:-1;10549:577:4;;;;;;;;;;-1:-1:-1;10549:577:4;;-1:-1:-1;10549:577:4;;-1:-1:-1;;;;;;;10549:577:4;7905:149;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7905:149:4;-1:-1:-1;;;;;7905:149:4;;;;;2571:188:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2571:188:1;-1:-1:-1;;;;;2571:188:1;;;;;725:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;725:37:1;-1:-1:-1;;;;;725:37:1;;;;;11526:620:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11526:620:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11526:620:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11526:620:4;;;;;;;;;;;-1:-1:-1;11526:620:4;;;;;-1:-1:-1;11526:620:4;;-1:-1:-1;11526:620:4;;;;-1:-1:-1;11526:620:4;;;;;;;;;;-1:-1:-1;11526:620:4;;-1:-1:-1;11526:620:4;;-1:-1:-1;;;;;;;11526:620:4;6883:377;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6883:377:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6883:377:4;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6883:377:4;;-1:-1:-1;6883:377:4;;-1:-1:-1;;;;;;;6883:377:4;2245:125;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2245:125:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2245:125:4;;-1:-1:-1;2245:125:4;;-1:-1:-1;;;;;;;2245:125:4;2720:450;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2720:450:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2720:450:4;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2720:450:4;;-1:-1:-1;2720:450:4;;-1:-1:-1;;;;;;;2720:450:4;9677:503;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9677:503:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9677:503:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9677:503:4;;-1:-1:-1;9677:503:4;;-1:-1:-1;;;;;;;9677:503:4;9203:153;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9203:153:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9203:153:4;;-1:-1:-1;;9203:153:4;;;-1:-1:-1;9203:153:4;;-1:-1:-1;;;;9203:153:4;1589:291:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1589:291:1;-1:-1:-1;;;;;1589:291:1;;;;;5134:1383:4;5296:12;5263:10;5275;12524:43;:3;5263:10;5275;12524:43;:22;:43;:::i;:::-;12505:144;;;;;;;-1:-1:-1;;;;;12505:144:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12505:144:4;;;;-1:-1:-1;;;;;;;;;;;12505:144:4;;;;;;;;;;;;;;;5430:45;5458:4;5449:7;5458:4;5464:10;5430:45;:18;:45;:::i;:::-;5411:179;;;;;;;-1:-1:-1;;;;;5411:179:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5710:47;5740:4;5731:7;5740:4;5746:10;5710:47;:20;:47;:::i;:::-;5691:184;;;;;;;-1:-1:-1;;;;;5691:184:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5904:50;:3;5916:8;5926:7;5935:6;5943:10;5904:50;:11;:50;:::i;:::-;5885:182;;;;;;;-1:-1:-1;;;;;5885:182:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6096:43;:3;6124:7;6133:5;6096:43;:27;:43;:::i;:::-;6077:200;;;;;;;-1:-1:-1;;;;;6077:200:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6306:52;:3;6335:7;6351:5;6345:3;:11;6306:52;:28;:52;:::i;:::-;6287:202;;;;;;;-1:-1:-1;;;;;6287:202:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6506:4:4;;5134:1383;-1:-1:-1;;;;;;;5134:1383:4:o;7513:161::-;7588:22;7627:40;:3;7659:7;7627:40;:31;:40;:::i;:::-;7620:47;7513:161;-1:-1:-1;;7513:161:4:o;1905:154::-;1985:12;2014:38;:3;2034:8;2044:7;2014:38;:19;:38;:::i;:::-;2007:45;1905:154;-1:-1:-1;;;1905:154:4:o;8561:334::-;8687:12;8654:10;8666;12524:43;:3;8654:10;8666;12524:43;:22;:43;:::i;:::-;12505:144;;;;;;;-1:-1:-1;;;;;12505:144:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12505:144:4;;;;-1:-1:-1;;;;;;;;;;;12505:144:4;;;;;;;;;;;;;;;8726:38;:3;8746:8;8756:7;8726:38;:19;:38;:::i;:::-;8709:160;;;;;;;-1:-1:-1;;;;;8709:160:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8884:4:4;;8561:334;-1:-1:-1;;;;;8561:334:4:o;3508:1172::-;3647:12;3614:10;3626;12524:43;:3;3614:10;3626;12524:43;:22;:43;:::i;:::-;12505:144;;;;;;;-1:-1:-1;;;;;12505:144:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12505:144:4;;;;-1:-1:-1;;;;;;;;;;;12505:144:4;;;;;;;;;;;;;;;3779:51;:3;3798:7;3807:10;3819;3779:51;:18;:51;:::i;:::-;3760:185;;;;;;;-1:-1:-1;;;;;3760:185:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4059:53;:3;4080:7;4089:10;4101;4059:53;:20;:53;:::i;:::-;4040:190;;;;;;;-1:-1:-1;;;;;4040:190:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4259:43;:3;4287:7;4296:5;4259:43;:27;:43;:::i;:::-;4240:200;;;;;;;-1:-1:-1;;;;;4240:200:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4469:52;:3;4498:7;4514:5;4508:3;:11;4469:52;:28;:52;:::i;:::-;4450:202;;;;;;;-1:-1:-1;;;;;4450:202:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4669:4:4;;3508:1172;-1:-1:-1;;;;;;3508:1172:4:o;2127:185:1:-;1261:10;2201:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2221:21:1;;:5;:21;;;;;;;;;;;:28;;-1:-1:-1;;2221:28:1;2245:4;2221:28;;;2260:30;;;2221:5;2260:30;-1:-1:-1;2303:4:1;2127:185;;;:::o;10549:577:4:-;10686:12;10653:10;10665;12524:43;:3;10653:10;10665;12524:43;:22;:43;:::i;:::-;12505:144;;;;;;;-1:-1:-1;;;;;12505:144:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12505:144:4;;;;-1:-1:-1;;;;;;;;;;;12505:144:4;;;;;;;;;;;;;;;10935:50;:3;10947:8;10957:7;10966:6;10974:10;10935:50;:11;:50;:::i;:::-;10916:182;;;;;;;-1:-1:-1;;;;;10916:182:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7905:149;7976:18;8011:36;:3;8039:7;8011:36;:27;:36;:::i;2571:188:1:-;1261:10;2646:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2666:21:1;;2690:5;2666:21;;;;;;;;;;;:29;;-1:-1:-1;;2666:29:1;;;2706:31;;;2690:5;2706:31;-1:-1:-1;2750:4:1;2571:188;;;:::o;725:37::-;;;;;;;;;;;;;;;;:::o;11526:620:4:-;11664:12;11631:10;11643;12524:43;:3;11631:10;11643;12524:43;:22;:43;:::i;:::-;12505:144;;;;;;;-1:-1:-1;;;;;12505:144:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12505:144:4;;;;-1:-1:-1;;;;;;;;;;;12505:144:4;;;;;;;;;;;;;;;11909:51;:3;11922:8;11932:7;11941:6;11949:10;11909:51;:12;:51;:::i;:::-;11890:228;;;;;;-1:-1:-1;;;;;11890:228:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6883:377;7018:12;6985:10;6997;12524:43;:3;6985:10;6997;12524:43;:22;:43;:::i;:::-;12505:144;;;;;;;-1:-1:-1;;;;;12505:144:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12505:144:4;;;;-1:-1:-1;;;;;;;;;;;12505:144:4;;;;;;;;;;;;;;;7057:43;:3;7085:7;7094:5;7057:43;:27;:43;:::i;:::-;7040:194;;;;;;;-1:-1:-1;;;;;7040:194:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2245:125;2307:11;2335:28;:3;2354:8;2335:28;:18;:28;:::i;2720:450::-;2849:12;2816:10;2828;12524:43;:3;2816:10;2828;12524:43;:22;:43;:::i;:::-;12505:144;;;;;;;-1:-1:-1;;;;;12505:144:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12505:144:4;;;;-1:-1:-1;;;;;;;;;;;12505:144:4;;;;;;;;;;;;;;;2976:52;:3;2997:7;3006:9;3017:10;2976:52;:20;:52;:::i;:::-;2957:185;;;;;;;-1:-1:-1;;;;;2957:185:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9677:503;9832:12;9799:10;9811;12524:43;:3;9799:10;9811;12524:43;:22;:43;:::i;:::-;12505:144;;;;;;;-1:-1:-1;;;;;12505:144:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12505:144:4;;;;-1:-1:-1;;;;;;;;;;;12505:144:4;;;;;;;;;;;;;;;9963:56;:3;9987:15;10004:14;9963:56;:23;:56;:::i;:::-;9944:208;;;;;;;-1:-1:-1;;;;;9944:208:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9203:153;9280:14;9311:38;:3;9330:8;9340;9311:38;:18;:38;:::i;1589:291:1:-;1261:10;1660:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1688:22:1;;;;1680:66;;;;;-1:-1:-1;;;;;1680:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1757:42;;-1:-1:-1;;;;;1757:42:1;;;1778:10;;1757:42;;;;;-1:-1:-1;;;;;;1805:15:1;:5;:15;;;;;;;;;;;:22;;1823:4;-1:-1:-1;;1805:22:1;;;;;;;;1839:10;1833:17;;;;;;:25;;;;;;;1823:4;1589:291::o;49569:301:8:-;49684:15;49707:10;49771;49783:43;49803:4;49809:16;49783:19;:43::i;:::-;49730:97;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;49730:97:8;;;;;;;-1:-1:-1;;;;;49730:97:8;-1:-1:-1;;;;;49730:97:8;-1:-1:-1;;;49730:97:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;49730:97:8;;;49720:108;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;49720:108:8;;;;;;;;;;;;49841:12;;:24;;;;;;;;;;;49720:108;;-1:-1:-1;;;;;;49841:12:8;;;;-1:-1:-1;49841:20:8;;-1:-1:-1;49841:24:8;;;;;263:2:-1;;-1:-1;49841:24:8;;;;;;;-1:-1:-1;49841:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;49841:24:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;49841:24:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49841:24:8;;49569:301;-1:-1:-1;;;;;49569:301:8:o;12985:563::-;13099:12;13121:10;13176:34;13196:4;13202:7;13176:19;:34::i;:::-;13144:67;;;;;;;;;;;;;-1:-1:-1;;;;;13144:67:8;-1:-1:-1;;;;;13144:67:8;-1:-1:-1;;;13144:67:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;13144:67:8;;;13134:78;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;13134:78:8;;;;;;;;;;;;13237:12;;:36;;;;;;;;;;;;;;;;;;13134:78;;-1:-1:-1;;;;;;13237:12:8;;;;-1:-1:-1;13237:20:8;;-1:-1:-1;13237:36:8;;;;;263:2:-1;;-1:-1;13237:36:8;;;;;;;-1:-1:-1;13237:12:8;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;13237:36:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13237:36:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13237:36:8;13220:177;;;;;;;-1:-1:-1;;;;;13220:177:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13220:177:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13492:7;-1:-1:-1;;;;;13480:44:8;;13501:10;13513;13480:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;13480:44:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13539:4:8;;12985:563;-1:-1:-1;;;;;12985:563:8:o;14214:548::-;14329:12;14349:10;14408:34;14428:4;14434:7;14408:19;:34::i;:::-;14372:71;;;;;;;;;;;;;-1:-1:-1;;;;;14372:71:8;-1:-1:-1;;;;;14372:71:8;-1:-1:-1;;;14372:71:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14372:71:8;;;14362:82;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;14362:82:8;;;;;;;;;;;;14465:12;;:35;;;;;;;;;;;;;;;;;;14362:82;;-1:-1:-1;;;;;;14465:12:8;;;;-1:-1:-1;14465:20:8;;-1:-1:-1;14465:35:8;;;;;263:2:-1;;-1:-1;14465:35:8;;;;;;;-1:-1:-1;14465:12:8;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;14465:35:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14465:35:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14465:35:8;14450:170;;;;;;;-1:-1:-1;;;;;14450:170:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14450:170:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14709:7;-1:-1:-1;;;;;14695:45:8;;14718:9;14729:10;14695:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;42570:1077:8;42690:12;42710;42821;42907;42769:8;42779:34;42799:4;42805:7;42779:19;:34::i;:::-;42735:79;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;42735:79:8;;;;;;;-1:-1:-1;;;;;42735:79:8;-1:-1:-1;;;;;42735:79:8;-1:-1:-1;;;42735:79:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;42735:79:8;;;42725:90;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;-1:-1;;263:2;259:12;;;254:3;250:22;246:30;340:21;;;311:9;;295:26;;;;377:20;365:33;;42725:90:8;;;;;;;;;;;42846:54;;;;;;;;;42725:90;;-1:-1:-1;42879:8:8;;-1:-1:-1;42889:10:8;;-1:-1:-1;42846:54:8;;;;-1:-1:-1;42846:54:8;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;42846:54:8;;;;;;;;;;-1:-1:-1;42846:54:8;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;42846:54:8;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;42846:54:8;;;42836:65;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;42836:65:8;;;;;;;;;;;42932:42;;;;;;;;;42836:65;;-1:-1:-1;42932:42:8;;-1:-1:-1;42932:42:8;-1:-1:-1;42932:42:8;;;;;;;;-1:-1:-1;42932:42:8;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;42932:42:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;42932:42:8;;;42922:53;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;42922:53:8;;;;;;;;;;;;42991:12;;-1:-1:-1;;;;;43018:26:8;;;;;;;;;;42922:53;;-1:-1:-1;;;;;;42991:12:8;;;;-1:-1:-1;42991:20:8;;-1:-1:-1;43018:26:8;;:38;;-1:-1:-1;43049:6:8;;42991:12;;43018:20;;:26;;;;;;;;;;-1:-1:-1;42991:12:8;43018:26;;;5:2:-1;;;;30:1;27;20:12;5:2;43018:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;43018:26:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;43018:26:8;;:38;:30;:38;:::i;:::-;42991:66;;;;;-1:-1:-1;;;42991:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42991:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;42991:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;42991:66:8;42983:190;;;;;;;-1:-1:-1;;;;;42983:190:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;42983:190:8;;;;-1:-1:-1;;;;;;;;;;;42983:190:8;;;;-1:-1:-1;;;;;;;;;;;42983:190:8;;;;-1:-1:-1;;;;;;;;;;;42983:190:8;;;;;;;;;;;;;;;43187:12;;43214:26;;;-1:-1:-1;;;;;43214:26:8;;;;;;;;;;-1:-1:-1;;;;;43187:12:8;;;;:20;;43208:4;;43214:38;;43245:6;;43187:12;;43214:20;;:26;;;;;;;;;;;;;;43187:12;;43214:26;;;5:2:-1;;;;30:1;27;20:12;43214:38:8;43187:66;;;;;-1:-1:-1;;;43187:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;43187:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;43187:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;43187:66:8;43179:190;;;;;;;-1:-1:-1;;;;;43179:190:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;43179:190:8;;;;-1:-1:-1;;;;;;;;;;;43179:190:8;;;;-1:-1:-1;;;;;;;;;;;43179:190:8;;;;-1:-1:-1;;;;;;;;;;;43179:190:8;;;;;;;;;;;;;;;43383:12;;43410:26;;;-1:-1:-1;;;;;43410:26:8;;;;;;;;;;-1:-1:-1;;;;;43383:12:8;;;;:20;;43404:4;;43410:38;;43441:6;;43383:12;;43410:20;;:26;;;;;;;;;;;;;;43383:12;;43410:26;;;5:2:-1;;;;30:1;27;20:12;43410:38:8;43383:66;;;;;-1:-1:-1;;;43383:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;43383:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;43383:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;43383:66:8;43375:190;;;;;;;-1:-1:-1;;;;;43375:190:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;43375:190:8;;;;-1:-1:-1;;;;;;;;;;;43375:190:8;;;;-1:-1:-1;;;;;;;;;;;43375:190:8;;;;-1:-1:-1;;;;;;;;;;;43375:190:8;;;;;;;;;;;;;;;43595:7;-1:-1:-1;;;;;43577:46:8;;43585:8;43604:6;43612:10;43577:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;43577:46:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43577:46:8;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;43577:46:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43637:4:8;;42570:1077;-1:-1:-1;;;;;;;;42570:1077:8:o;58085:377::-;58184:12;58204:10;58270:7;58227:51;;;;;;;;;;;;;-1:-1:-1;;;;;58227:51:8;-1:-1:-1;;;;;58227:51:8;-1:-1:-1;;;58227:51:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;58227:51:8;;;58217:62;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;58217:62:8;;;;;;;;;;;;58293:12;;:31;;;;;;;;;;;;;;;;;58217:62;;-1:-1:-1;;;;;;58293:12:8;;;;-1:-1:-1;58293:20:8;;-1:-1:-1;58293:31:8;;;;;263:2:-1;;-1:-1;58293:31:8;;;;;;;-1:-1:-1;58293:12:8;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;58293:31:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;58293:31:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;58293:31:8;58285:154;;;;;;;-1:-1:-1;;;;;58285:154:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;58285:154:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;58453:4:8;;58085:377;-1:-1:-1;;;;58085:377:8:o;56626:379::-;56727:12;56747:10;56812:7;56770:50;;;;;;;;;;;;;-1:-1:-1;;;;;56770:50:8;-1:-1:-1;;;;;56770:50:8;-1:-1:-1;;;56770:50:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;56770:50:8;;;56760:61;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;62550:218:8;62646:19;62680:83;62723:39;62748:4;62754:7;62723:24;:39::i;:::-;62680:38;62704:4;62710:7;62680:23;:38::i;:::-;:42;:83;:42;:83;:::i;28789:266::-;28890:12;28910:10;28967:8;28977:34;28997:4;29003:7;28977:19;:34::i;:::-;28933:79;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;28933:79:8;;;;;;;-1:-1:-1;;;;;28933:79:8;-1:-1:-1;;;;;28933:79:8;-1:-1:-1;;;28933:79:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;28933:79:8;;;28923:90;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;28923:90:8;;;;;;;;;;;;29026:12;;-1:-1:-1;;;;;29026:24:8;;;;;;;;;;28923:90;;-1:-1:-1;;;;;;29026:12:8;;;;-1:-1:-1;29026:20:8;;-1:-1:-1;29026:24:8;;;;;263:2:-1;;-1:-1;29026:24:8;;;;;;;-1:-1:-1;29026:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;63254:314:8;63347:12;63367:10;63422:8;63390:41;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;63390:41:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;63390:41:8;;;63380:52;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;63380:52:8;;;;;;;;;;;;63453:12;;:33;;;;;;;;;;;;;;;;;63380:52;;-1:-1:-1;;;;;;63453:12:8;;;;-1:-1:-1;63453:20:8;;-1:-1:-1;63453:33:8;;;;;263:2:-1;;-1:-1;63453:33:8;;;;;;;-1:-1:-1;63453:12:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;63453:33:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;63453:33:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;63453:33:8;63438:107;;;;;;;-1:-1:-1;;;;;63438:107:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58783:227;58875:10;58893;58959:7;58916:51;;;;;;;;;;;;;-1:-1:-1;;;;;58916:51:8;-1:-1:-1;;;;;58916:51:8;-1:-1:-1;;;58916:51:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;58916:51:8;;;58906:62;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;58906:62:8;;;;;;;;;;;;58981:12;;-1:-1:-1;;;;;58981:24:8;;;;;;;;;;58906:62;;-1:-1:-1;;;;;;58981:12:8;;;;-1:-1:-1;58981:20:8;;-1:-1:-1;58981:24:8;;;;;263:2:-1;;-1:-1;58981:24:8;;;;;;;-1:-1:-1;58981:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;58981:24:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;58981:24:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;58981:24:8;;-1:-1:-1;58783:227:8;;;;;;:::o;44343:1137::-;44464:12;44484;44595;44719;44543:8;44553:34;44573:4;44579:7;44553:19;:34::i;:::-;44509:79;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;44509:79:8;;;;;;;-1:-1:-1;;;;;44509:79:8;-1:-1:-1;;;;;44509:79:8;-1:-1:-1;;;44509:79:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;44509:79:8;;;44499:90;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;-1:-1;;263:2;259:12;;;254:3;250:22;246:30;340:21;;;311:9;;295:26;;;;377:20;365:33;;44499:90:8;;;;;;;;;;;44620:54;;;;;;;;;44499:90;;-1:-1:-1;44653:8:8;;-1:-1:-1;44663:10:8;;-1:-1:-1;44620:54:8;;;;-1:-1:-1;44620:54:8;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;44620:54:8;;;;;;;;;;-1:-1:-1;44620:54:8;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;44620:54:8;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;44620:54:8;;;44610:65;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;44610:65:8;;;;;;;;;;;44744:42;;;;;;;;;44610:65;;-1:-1:-1;44744:42:8;;-1:-1:-1;44744:42:8;-1:-1:-1;44744:42:8;;;;;;;;-1:-1:-1;44744:42:8;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;44744:42:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;44744:42:8;;;44734:53;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;44734:53:8;;;;;;;;;;;;44809:12;;-1:-1:-1;;;;;44836:26:8;;;;;;;;;;44734:53;;-1:-1:-1;;;;;;44809:12:8;;;;-1:-1:-1;44809:20:8;;-1:-1:-1;44836:26:8;;:38;;-1:-1:-1;44867:6:8;;44809:12;;44836:20;;:26;;;;;;;;;;-1:-1:-1;44809:12:8;44836:26;;;5:2:-1;;;;30:1;27;20:12;5:2;44836:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44836:26:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;44836:26:8;;:38;:30;:38;:::i;:::-;44809:66;;;;;-1:-1:-1;;;44809:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44809:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44809:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;44809:66:8;44794:197;;;;;;;-1:-1:-1;;;;;44794:197:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;44794:197:8;;;;-1:-1:-1;;;;;;;;;;;44794:197:8;;;;-1:-1:-1;;;;;;;;;;;44794:197:8;;;;-1:-1:-1;;;;;;;;;;;44794:197:8;;;;;;;;;;;;;;;45012:12;;45039:26;;;-1:-1:-1;;;;;45039:26:8;;;;;;;;;;-1:-1:-1;;;;;45012:12:8;;;;:20;;45033:4;;45039:38;;45070:6;;45012:12;;45039:20;;:26;;;;;;;;;;;;;;45012:12;;45039:26;;;5:2:-1;;;;30:1;27;20:12;45039:38:8;45012:66;;;;;-1:-1:-1;;;45012:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45012:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45012:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;45012:66:8;44997:197;;;;;;;-1:-1:-1;;;;;44997:197:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;44997:197:8;;;;-1:-1:-1;;;;;;;;;;;44997:197:8;;;;-1:-1:-1;;;;;;;;;;;44997:197:8;;;;-1:-1:-1;;;;;;;;;;;44997:197:8;;;;;;;;;;;;;;;45215:12;;45242:26;;;-1:-1:-1;;;;;45242:26:8;;;;;;;;;;-1:-1:-1;;;;;45215:12:8;;;;:20;;45236:4;;45242:38;;45273:6;;45215:12;;45242:20;;:26;;;;;;;;;;;;;;45215:12;;45242:26;;;5:2:-1;;;;30:1;27;20:12;45242:38:8;45215:66;;;;;-1:-1:-1;;;45215:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45215:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45215:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;45215:66:8;45200:197;;;;;;;-1:-1:-1;;;;;45200:197:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;45200:197:8;;;;-1:-1:-1;;;;;;;;;;;45200:197:8;;;;-1:-1:-1;;;;;;;;;;;45200:197:8;;;;-1:-1:-1;;;;;;;;;;;45200:197:8;;;;;;;;;;;;;;;45428:7;-1:-1:-1;;;;;45409:47:8;;45418:8;45437:6;45445:10;45409:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;27455:210:8;27538:11;27557:10;27613:8;27580:42;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;27580:42:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;27580:42:8;;;27570:53;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;15516:420:8;15633:12;15653:10;15711:16;15676:52;;;;;;;;;;;;;-1:-1:-1;;;;;15676:52:8;-1:-1:-1;;;;;15676:52:8;-1:-1:-1;;;15676:52:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15676:52:8;;;15666:63;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;15666:63:8;;;;;;;;;;;;15750:12;;:44;;;;;;;;;-1:-1:-1;;;;;15750:44:8;;;;;;;;;15666:63;;-1:-1:-1;15750:12:8;;;;;-1:-1:-1;15750:23:8;;-1:-1:-1;15750:44:8;;;;;263:2:-1;;-1:-1;15750:44:8;;;;;;;-1:-1:-1;15750:12:8;:44;;;5:2:-1;;;;30:1;27;20:12;64445:441:8;64543:11;64562:16;64617:15;64741:14;64581:30;64598:4;64581:30;;;;;;;;;;;;;;;;;;:16;:30::i;:::-;64562:49;;64635:32;64652:4;64658:8;64635:16;:32::i;:::-;64617:50;;64758:101;64848:10;64844:2;:14;64759:79;64826:11;64822:2;:15;64760:56;64810:5;64760:45;64773:31;64789:4;64795:8;64773:15;:31::i;:::-;64760:8;;:45;:12;:45;:::i;:::-;:49;:56;:49;:56;:::i;:::-;64759:62;:79;:62;:79;:::i;64758:101::-;64741:118;64445:441;-1:-1:-1;;;;;;;64445:441:8:o;16400:357::-;16488:25;16521:10;16594:23;16579:7;16544:43;;;;;;;;;;;;;-1:-1:-1;;;;;16544:43:8;-1:-1:-1;;;;;16544:43:8;-1:-1:-1;;;16544:43:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16544:43:8;;;16534:54;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;16534:54:8;;;;;;;;;;;;16620:12;;:27;;;;;;;;;;;16534:54;;-1:-1:-1;;;;;;16620:12:8;;;;-1:-1:-1;16620:23:8;;-1:-1:-1;16620:27:8;;;;;263:2:-1;;-1:-1;16620:27:8;;;;;;;-1:-1:-1;16620:12:8;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;16620:27:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16620:27:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16620:27:8;;-1:-1:-1;;;;;;16657:22:8;;;16653:100;;16696:15;16689:22;;;;16653:100;16739:7;16732:14;;16653:100;16400:357;;;;;;:::o;1540:174:2:-;1598:14;1632:5;;;1651:6;;;;1643:52;;;;;-1:-1:-1;;;;;1643:52:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61913:271:8;62006:11;62025:10;62092:7;62101:39;62126:4;62132:7;62101:24;:39::i;:::-;62048:93;;;;;;;;;;;;;-1:-1:-1;;;;;62048:93:8;-1:-1:-1;;;;;62048:93:8;-1:-1:-1;;;62048:93:8;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;62048:93:8;;;62038:104;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;1143:234:2;1201:14;1307:6;;;;1299:55;;;;;-1:-1:-1;;;;;1299:55:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1367:5:2;;;1143:234::o;21583:221:8:-;21668:18;21694:10;21752:8;21717:44;;;;;;;;;;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;63876:211:8;63960:12;63980:10;64035:8;64003:41;;;;;;;;;;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;301:224:2;359:14;;385:6;;381:35;;;408:1;401:8;;;;381:35;-1:-1:-1;433:5:2;;;437:1;433;:5;452;;;;;;;;:10;444:62;;;;;-1:-1:-1;;;;;444:62:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;697:284;755:14;857:9;873:1;869;:5;;;;;;;;;697:284;-1:-1:-1;;;;697:284:2:o;57484:228:8:-;57577:11;57596:10;57661:7;57619:50;;;;;;;;;;;;;-1:-1:-1;;;;;57619:50:8;-1:-1:-1;;;;;57619:50:8;-1:-1:-1;;;57619:50:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;57619:50:8;;;57609:61;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;", + "source": "pragma solidity 0.4.24;\n\nimport \"./Ownable.sol\";\nimport \"./TokenIOStorage.sol\";\nimport \"./TokenIOLib.sol\";\n\n/*\n\nCOPYRIGHT 2018 Token, Inc.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n@title TokenIOCurrencyAuthority - Currency Authority Smart Contract for Token, Inc.\n\n@author Ryan Tate , Sean Pollock \n\n@notice Contract uses generalized storage contract, `TokenIOStorage`, for\nupgradeability of interface contract.\n*/\n\ncontract TokenIOCurrencyAuthority is Ownable {\n\n /// @dev Set reference to TokenIOLib interface which proxies to TokenIOStorage */\n using TokenIOLib for TokenIOLib.Data;\n TokenIOLib.Data lib;\n\n /**\n * @notice Constructor method for CurrencyAuthority contract\n * @param _storageContract Address of TokenIOStorage contract\n */\n constructor(address _storageContract) public {\n /**\n * @notice Set the storage contract for the interface\n * @dev This contract will be unable to use the storage constract until\n * @dev Contract address is authorized with the storage contract\n */\n lib.Storage = TokenIOStorage(_storageContract);\n\n // @dev set owner to contract initiator\n owner[msg.sender] = true;\n }\n\n /**\n * @notice Gets balance of sepcified account for a given currency\n * @param currency Currency symbol 'USDx'\n * @param account Sepcified account address\n * @return { \"balance\": \"Returns account balance\"}\n */\n function getTokenBalance(string currency, address account) public view returns (uint balance) {\n return lib.getTokenBalance(currency, account);\n }\n\n /**\n * @notice Gets total supply of specified currency\n * @param currency Currency symbol 'USDx'\n * @return { \"supply\": \"Returns total supply of currency\"}\n */\n function getTokenSupply(string currency) public view returns (uint supply) {\n return lib.getTokenSupply(currency);\n }\n\n /**\n * @notice Updates account status. false: frozen, true: un-frozen\n * @param account Sepcified account address\n * @param isAllowed Frozen status\n * @param issuerFirm Name of the issuer firm with authority on account holder;\n * @return { \"success\": \"Returns true if successfully called from another contract\"}\n */\n function freezeAccount(address account, bool isAllowed, string issuerFirm) public onlyAuthority(issuerFirm, msg.sender) returns (bool success) {\n // @notice updates account status\n // @dev !!! mutates storage state\n require(\n lib.setAccountStatus(account, isAllowed, issuerFirm),\n \"Error: Unable to freeze account. Please check issuerFirm and firm authority are registered\"\n );\n return true;\n }\n\n /**\n * @notice Sets approval status of specified account\n * @param account Sepcified account address\n * @param isApproved Frozen status\n * @param issuerFirm Name of the issuer firm with authority on account holder;\n * @return { \"success\": \"Returns true if successfully called from another contract\"}\n */\n function approveKYC(address account, bool isApproved, uint limit, string issuerFirm) public onlyAuthority(issuerFirm, msg.sender) returns (bool success) {\n // @notice updates kyc approval status\n // @dev !!! mutates storage state\n require(\n lib.setKYCApproval(account, isApproved, issuerFirm),\n \"Error: Unable to approve account. Please check issuerFirm and firm authority are registered\"\n );\n // @notice updates account statuss\n // @dev !!! mutates storage state\n require(\n lib.setAccountStatus(account, isApproved, issuerFirm),\n \"Error: Unable to set account status. Please check issuerFirm and firm authority are registered\"\n );\n require(\n lib.setAccountSpendingLimit(account, limit),\n \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"\n );\n require(\n lib.setAccountSpendingPeriod(account, (now + 86400)),\n \"Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered\"\n );\n return true;\n }\n\n /**\n * @notice Approves account and deposits specified amount of given currency\n * @param currency Currency symbol of amount to be deposited;\n * @param account Ethereum address of account holder;\n * @param amount Deposit amount for account holder;\n * @param issuerFirm Name of the issuer firm with authority on account holder;\n * @return { \"success\": \"Returns true if successfully called from another contract\"}\n */\n function approveKYCAndDeposit(string currency, address account, uint amount, uint limit, string issuerFirm) public onlyAuthority(issuerFirm, msg.sender) returns (bool success) {\n /// @notice updates kyc approval status\n /// @dev !!! mutates storage state\n require(\n lib.setKYCApproval(account, true, issuerFirm),\n \"Error: Unable to approve account. Please check issuerFirm and firm authority are registered\"\n );\n /// @notice updates kyc approval status\n /// @dev !!! mutates storage state\n require(\n lib.setAccountStatus(account, true, issuerFirm),\n \"Error: Unable to set account status. Please check issuerFirm and firm authority are registered\"\n );\n require(\n lib.deposit(currency, account, amount, issuerFirm),\n \"Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered\"\n );\n require(\n lib.setAccountSpendingLimit(account, limit),\n \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"\n );\n require(\n lib.setAccountSpendingPeriod(account, (now + 86400)),\n \"Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered\"\n );\n return true;\n }\n\n /**\n * @notice Sets the spending limit for a given account\n * @param account Ethereum address of account holder;\n * @param limit Spending limit amount for account;\n * @param issuerFirm Name of the issuer firm with authority on account holder;\n * @return { \"success\": \"Returns true if successfully called from another contract\"}\n */\n function setAccountSpendingLimit(address account, uint limit, string issuerFirm) public onlyAuthority(issuerFirm, msg.sender) returns (bool success) {\n require(\n lib.setAccountSpendingLimit(account, limit),\n \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"\n );\n return true;\n }\n\n /**\n * @notice Returns the periodic remaining spending amount for an account\n * @param account Ethereum address of account holder;\n * @return {\"spendingRemaining\" : \"Returns the remaining spending amount for the account\"}\n */\n function getAccountSpendingRemaining(address account) public view returns (uint spendingRemaining) {\n return lib.getAccountSpendingRemaining(account);\n }\n\n /**\n * @notice Return the spending limit for an account\n * @param account Ethereum address of account holder\n * @return {\"spendingLimit\" : \"Returns the remaining daily spending limit of the account\"}\n */\n function getAccountSpendingLimit(address account) public view returns (uint spendingLimit) {\n return lib.getAccountSpendingLimit(account);\n }\n\n /**\n * @notice Set the foreign currency exchange rate to USD in basis points\n * @dev NOTE: This value should always be relative to USD pair; e.g. JPY/USD, GBP/USD, etc.\n * @param currency The TokenIO currency symbol (e.g. USDx, JPYx, GBPx)\n * @param bpsRate Basis point rate of foreign currency exchange rate to USD\n * @param issuerFirm Firm setting the foreign currency exchange\n * @return { \"success\": \"Returns true if successfully called from another contract\"}\n */\n function setFxBpsRate(string currency, uint bpsRate, string issuerFirm) public onlyAuthority(issuerFirm, msg.sender) returns (bool success) {\n require(\n lib.setFxUSDBPSRate(currency, bpsRate),\n \"Error: Unable to set FX USD basis points rate. Please ensure issuerFirm is authorized\"\n );\n return true;\n }\n\n /**\n * @notice Return the foreign currency USD exchanged amount\n * @param currency The TokenIO currency symbol (e.g. USDx, JPYx, GBPx)\n * @param fxAmount Amount of foreign currency to exchange into USD\n * @return {\"usdAmount\" : \"Returns the foreign currency amount in USD\"}\n */\n function getFxUSDAmount(string currency, uint fxAmount) public view returns (uint usdAmount) {\n return lib.getFxUSDAmount(currency, fxAmount);\n }\n\n /**\n * @notice Updates to new forwarded account\n * @param originalAccount [address]\n * @param updatedAccount [address]\n * @param issuerFirm Name of the issuer firm with authority on account holder;\n * @return { \"success\": \"Returns true if successfully called from another contract\"}\n */\n function approveForwardedAccount(address originalAccount, address updatedAccount, string issuerFirm) public onlyAuthority(issuerFirm, msg.sender) returns (bool success) {\n // @notice updatesa forwarded account\n // @dev !!! mutates storage state\n require(\n lib.setForwardedAccount(originalAccount, updatedAccount),\n \"Error: Unable to set forwarded address for account. Please check issuerFirm and firm authority are registered\"\n );\n return true;\n }\n\n /**\n * @notice Issues a specified account to recipient account of a given currency\n * @param currency [string] currency symbol\n * @param amount [uint] issuance amount\n * @param issuerFirm Name of the issuer firm with authority on account holder;\n * @return { \"success\": \"Returns true if successfully called from another contract\"}\n */\n function deposit(string currency, address account, uint amount, string issuerFirm) public onlyAuthority(issuerFirm, msg.sender) returns (bool success) {\n /* require(\n lib.verifyAccount(account),\n \"Error: Account is not verified!\"\n ); */\n // @notice depositing tokens to account\n // @dev !!! mutates storage state\n require(\n lib.deposit(currency, account, amount, issuerFirm),\n \"Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered\"\n );\n return true;\n }\n\n /**\n * @notice Withdraws a specified amount of tokens of a given currency\n * @param currency Currency symbol\n * @param account Ethereum address of account holder\n * @param amount Issuance amount\n * @param issuerFirm Name of the issuer firm with authority on account holder\n * @return { \"success\": \"Returns true if successfully called from another contract\"}\n */\n function withdraw(string currency, address account, uint amount, string issuerFirm) public onlyAuthority(issuerFirm, msg.sender) returns (bool success) {\n /* require(\n lib.verifyAccount(account),\n \"Error: Account is not verified!\"\n ); */\n // @notice withdrawing from account\n // @dev !!! mutates storage state\n require(\n lib.withdraw(currency, account, amount, issuerFirm),\n \"Error: Unable to withdraw funds. Please check issuerFirm and firm authority are registered and have issued funds that can be withdrawn\"\n );\n return true;\n }\n\n /**\n * @notice Ensure only authorized currency firms and authorities can modify protected methods\n * @dev authority must be registered to an authorized firm to use protected methods\n */\n modifier onlyAuthority(string firmName, address authority) {\n // @notice throws if authority account is not registred to the given firm\n require(\n lib.isRegisteredToFirm(firmName, authority),\n \"Error: issuerFirm and/or firm authority are not registered\"\n );\n _;\n }\n\n}\n", + "sourcePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOCurrencyAuthority.sol", + "ast": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOCurrencyAuthority.sol", + "exportedSymbols": { + "TokenIOCurrencyAuthority": [ + 906 + ] + }, + "id": 907, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 472, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:4" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 473, + "nodeType": "ImportDirective", + "scope": 907, + "sourceUnit": 185, + "src": "25:23:4", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 474, + "nodeType": "ImportDirective", + "scope": 907, + "sourceUnit": 5226, + "src": "49:30:4", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 475, + "nodeType": "ImportDirective", + "scope": 907, + "sourceUnit": 4607, + "src": "80:26:4", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 476, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "918:7:4", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 477, + "nodeType": "InheritanceSpecifier", + "src": "918:7:4" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 906, + "linearizedBaseContracts": [ + 906, + 184 + ], + "name": "TokenIOCurrencyAuthority", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 480, + "libraryName": { + "contractScope": null, + "id": 478, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4606, + "src": "1025:10:4", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4606", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "1019:37:4", + "typeName": { + "contractScope": null, + "id": 479, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1040:15:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 482, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 906, + "src": "1061:19:4", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 481, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1061:15:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 502, + "nodeType": "Block", + "src": "1279:385:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 493, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 487, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "1528:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 489, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1629, + "src": "1528:11:4", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 491, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 484, + "src": "1557:16:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 490, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5225, + "src": "1542:14:4", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5225_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 492, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1542:32:4", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1528:46:4", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "id": 494, + "nodeType": "ExpressionStatement", + "src": "1528:46:4" + }, + { + "expression": { + "argumentTypes": null, + "id": 500, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 495, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1633:5:4", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 498, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 496, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "1639:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 497, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1639:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1633:17:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 499, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1653:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1633:24:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 501, + "nodeType": "ExpressionStatement", + "src": "1633:24:4" + } + ] + }, + "documentation": "@notice Constructor method for CurrencyAuthority contract\n@param _storageContract Address of TokenIOStorage contract", + "id": 503, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 485, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 484, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 503, + "src": "1246:24:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 483, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1246:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1245:26:4" + }, + "payable": false, + "returnParameters": { + "id": 486, + "nodeType": "ParameterList", + "parameters": [], + "src": "1279:0:4" + }, + "scope": 906, + "src": "1234:430:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 518, + "nodeType": "Block", + "src": "1999:60:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 514, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 505, + "src": "2034:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 515, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 507, + "src": "2044:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 512, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "2014:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 513, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenBalance", + "nodeType": "MemberAccess", + "referencedDeclaration": 2816, + "src": "2014:19:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address) view returns (uint256)" + } + }, + "id": 516, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2014:38:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 511, + "id": 517, + "nodeType": "Return", + "src": "2007:45:4" + } + ] + }, + "documentation": "@notice Gets balance of sepcified account for a given currency\n@param currency Currency symbol 'USDx'\n@param account Sepcified account address\n@return { \"balance\": \"Returns account balance\"}", + "id": 519, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getTokenBalance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 508, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 505, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 519, + "src": "1930:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 504, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1930:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 507, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 519, + "src": "1947:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 506, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1947:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1929:34:4" + }, + "payable": false, + "returnParameters": { + "id": 511, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 510, + "name": "balance", + "nodeType": "VariableDeclaration", + "scope": 519, + "src": "1985:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 509, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "1985:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1984:14:4" + }, + "scope": 906, + "src": "1905:154:4", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 531, + "nodeType": "Block", + "src": "2320:50:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 528, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 521, + "src": "2354:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 526, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "2335:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 527, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSupply", + "nodeType": "MemberAccess", + "referencedDeclaration": 2746, + "src": "2335:18:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) view returns (uint256)" + } + }, + "id": 529, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2335:28:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 525, + "id": 530, + "nodeType": "Return", + "src": "2328:35:4" + } + ] + }, + "documentation": "@notice Gets total supply of specified currency\n@param currency Currency symbol 'USDx'\n@return { \"supply\": \"Returns total supply of currency\"}", + "id": 532, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getTokenSupply", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 522, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 521, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 532, + "src": "2269:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 520, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2269:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2268:17:4" + }, + "payable": false, + "returnParameters": { + "id": 525, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 524, + "name": "supply", + "nodeType": "VariableDeclaration", + "scope": 532, + "src": "2307:11:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 523, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2307:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2306:13:4" + }, + "scope": 906, + "src": "2245:125:4", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 560, + "nodeType": "Block", + "src": "2863:307:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 551, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 534, + "src": "2997:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 552, + "name": "isAllowed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 536, + "src": "3006:9:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "id": 553, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 538, + "src": "3017:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 549, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "2976:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 550, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountStatus", + "nodeType": "MemberAccess", + "referencedDeclaration": 2210, + "src": "2976:20:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_bool_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,bool,string memory) returns (bool)" + } + }, + "id": 554, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2976:52:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20667265657a65206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 555, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3040:92:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7f197396b05ade1cce611708853992e455bcadbeffc759d9c87bb519e9c019f7", + "typeString": "literal_string \"Error: Unable to freeze account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to freeze account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7f197396b05ade1cce611708853992e455bcadbeffc759d9c87bb519e9c019f7", + "typeString": "literal_string \"Error: Unable to freeze account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 548, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2957:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 556, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2957:185:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 557, + "nodeType": "ExpressionStatement", + "src": "2957:185:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 558, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3159:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 547, + "id": 559, + "nodeType": "Return", + "src": "3152:11:4" + } + ] + }, + "documentation": "@notice Updates account status. false: frozen, true: un-frozen\n@param account Sepcified account address\n@param isAllowed Frozen status\n@param issuerFirm Name of the issuer firm with authority on account holder;\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 561, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 541, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 538, + "src": "2816:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 542, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "2828:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 543, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2828:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 544, + "modifierName": { + "argumentTypes": null, + "id": 540, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 905, + "src": "2802:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "2802:37:4" + } + ], + "name": "freezeAccount", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 539, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 534, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 561, + "src": "2743:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 533, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2743:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 536, + "name": "isAllowed", + "nodeType": "VariableDeclaration", + "scope": 561, + "src": "2760:14:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 535, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2760:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 538, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 561, + "src": "2776:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 537, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2776:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2742:52:4" + }, + "payable": false, + "returnParameters": { + "id": 547, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 546, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 561, + "src": "2849:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 545, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2849:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2848:14:4" + }, + "scope": 906, + "src": "2720:450:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 622, + "nodeType": "Block", + "src": "3661:1019:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 582, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 563, + "src": "3798:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 583, + "name": "isApproved", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 565, + "src": "3807:10:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "id": 584, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 569, + "src": "3819:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 580, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "3779:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 581, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setKYCApproval", + "nodeType": "MemberAccess", + "referencedDeclaration": 2165, + "src": "3779:18:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_bool_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,bool,string memory) returns (bool)" + } + }, + "id": 585, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3779:51:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20617070726f7665206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 586, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3842:93:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_2adead5f449a6a2ad329ab364a208ed0d211b31aa2a852e47f50e9ff362b00fc", + "typeString": "literal_string \"Error: Unable to approve account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to approve account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_2adead5f449a6a2ad329ab364a208ed0d211b31aa2a852e47f50e9ff362b00fc", + "typeString": "literal_string \"Error: Unable to approve account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 579, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "3760:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 587, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3760:185:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 588, + "nodeType": "ExpressionStatement", + "src": "3760:185:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 592, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 563, + "src": "4080:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 593, + "name": "isApproved", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 565, + "src": "4089:10:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "id": 594, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 569, + "src": "4101:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 590, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "4059:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 591, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountStatus", + "nodeType": "MemberAccess", + "referencedDeclaration": 2210, + "src": "4059:20:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_bool_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,bool,string memory) returns (bool)" + } + }, + "id": 595, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4059:53:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20736574206163636f756e74207374617475732e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 596, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4124:96:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d5b494d954ebc1ea25ff613cbe2af5e5e6dee30f2d294a40b95846fb93c0b75b", + "typeString": "literal_string \"Error: Unable to set account status. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set account status. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d5b494d954ebc1ea25ff613cbe2af5e5e6dee30f2d294a40b95846fb93c0b75b", + "typeString": "literal_string \"Error: Unable to set account status. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 589, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "4040:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 597, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4040:190:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 598, + "nodeType": "ExpressionStatement", + "src": "4040:190:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 602, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 563, + "src": "4287:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 603, + "name": "limit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 567, + "src": "4296:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 600, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "4259:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 601, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountSpendingLimit", + "nodeType": "MemberAccess", + "referencedDeclaration": 4292, + "src": "4259:27:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 604, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4259:43:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420696e697469616c207370656e64696e67206c696d697420666f72206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 605, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4314:116:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_3db3df495834b8a5dacc61243eb5b9d04e4582608388cabb972a238d9e98e4fe", + "typeString": "literal_string \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_3db3df495834b8a5dacc61243eb5b9d04e4582608388cabb972a238d9e98e4fe", + "typeString": "literal_string \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 599, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "4240:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 606, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4240:200:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 607, + "nodeType": "ExpressionStatement", + "src": "4240:200:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 611, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 563, + "src": "4498:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 614, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 612, + "name": "now", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5242, + "src": "4508:3:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "argumentTypes": null, + "hexValue": "3836343030", + "id": 613, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4514:5:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_86400_by_1", + "typeString": "int_const 86400" + }, + "value": "86400" + }, + "src": "4508:11:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 615, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4507:13:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 609, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "4469:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 610, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountSpendingPeriod", + "nodeType": "MemberAccess", + "referencedDeclaration": 4232, + "src": "4469:28:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 616, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4469:52:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20736574207370656e64696e6720706572696f6420666f72206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 617, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4533:109:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f8ea4dffeecef2c14480ec77d7f295f45e20ccebde68ef7164f5662998110ce0", + "typeString": "literal_string \"Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_f8ea4dffeecef2c14480ec77d7f295f45e20ccebde68ef7164f5662998110ce0", + "typeString": "literal_string \"Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 608, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "4450:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 618, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4450:202:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 619, + "nodeType": "ExpressionStatement", + "src": "4450:202:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 620, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4669:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 578, + "id": 621, + "nodeType": "Return", + "src": "4662:11:4" + } + ] + }, + "documentation": "@notice Sets approval status of specified account\n@param account Sepcified account address\n@param isApproved Frozen status\n@param issuerFirm Name of the issuer firm with authority on account holder;\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 623, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 572, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 569, + "src": "3614:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 573, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "3626:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 574, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "3626:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 575, + "modifierName": { + "argumentTypes": null, + "id": 571, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 905, + "src": "3600:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "3600:37:4" + } + ], + "name": "approveKYC", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 570, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 563, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 623, + "src": "3528:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 562, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3528:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 565, + "name": "isApproved", + "nodeType": "VariableDeclaration", + "scope": 623, + "src": "3545:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 564, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3545:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 567, + "name": "limit", + "nodeType": "VariableDeclaration", + "scope": 623, + "src": "3562:10:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 566, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3562:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 569, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 623, + "src": "3574:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 568, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3574:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3527:65:4" + }, + "payable": false, + "returnParameters": { + "id": 578, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 577, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 623, + "src": "3647:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 576, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3647:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3646:14:4" + }, + "scope": 906, + "src": "3508:1172:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 697, + "nodeType": "Block", + "src": "5310:1207:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 646, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 627, + "src": "5449:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "hexValue": "74727565", + "id": 647, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5458:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "argumentTypes": null, + "id": 648, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 633, + "src": "5464:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 644, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "5430:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 645, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setKYCApproval", + "nodeType": "MemberAccess", + "referencedDeclaration": 2165, + "src": "5430:18:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_bool_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,bool,string memory) returns (bool)" + } + }, + "id": 649, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5430:45:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20617070726f7665206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 650, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5487:93:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_2adead5f449a6a2ad329ab364a208ed0d211b31aa2a852e47f50e9ff362b00fc", + "typeString": "literal_string \"Error: Unable to approve account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to approve account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_2adead5f449a6a2ad329ab364a208ed0d211b31aa2a852e47f50e9ff362b00fc", + "typeString": "literal_string \"Error: Unable to approve account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 643, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "5411:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 651, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5411:179:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 652, + "nodeType": "ExpressionStatement", + "src": "5411:179:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 656, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 627, + "src": "5731:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "hexValue": "74727565", + "id": 657, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5740:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "argumentTypes": null, + "id": 658, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 633, + "src": "5746:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 654, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "5710:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 655, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountStatus", + "nodeType": "MemberAccess", + "referencedDeclaration": 2210, + "src": "5710:20:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_bool_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,bool,string memory) returns (bool)" + } + }, + "id": 659, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5710:47:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20736574206163636f756e74207374617475732e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 660, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5769:96:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d5b494d954ebc1ea25ff613cbe2af5e5e6dee30f2d294a40b95846fb93c0b75b", + "typeString": "literal_string \"Error: Unable to set account status. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set account status. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d5b494d954ebc1ea25ff613cbe2af5e5e6dee30f2d294a40b95846fb93c0b75b", + "typeString": "literal_string \"Error: Unable to set account status. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 653, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "5691:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 661, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5691:184:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 662, + "nodeType": "ExpressionStatement", + "src": "5691:184:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 666, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 625, + "src": "5916:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 667, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 627, + "src": "5926:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 668, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 629, + "src": "5935:6:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 669, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 633, + "src": "5943:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 664, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "5904:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 665, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "deposit", + "nodeType": "MemberAccess", + "referencedDeclaration": 3619, + "src": "5904:11:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,uint256,string memory) returns (bool)" + } + }, + "id": 670, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5904:50:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f206465706f7369742066756e64732e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 671, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5966:91:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_05597560a0a09591bd512c7af73fab8ea943a53c0f5353c4fe6fe2cc72d5d3f2", + "typeString": "literal_string \"Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_05597560a0a09591bd512c7af73fab8ea943a53c0f5353c4fe6fe2cc72d5d3f2", + "typeString": "literal_string \"Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 663, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "5885:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 672, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5885:182:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 673, + "nodeType": "ExpressionStatement", + "src": "5885:182:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 677, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 627, + "src": "6124:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 678, + "name": "limit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 631, + "src": "6133:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 675, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "6096:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 676, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountSpendingLimit", + "nodeType": "MemberAccess", + "referencedDeclaration": 4292, + "src": "6096:27:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 679, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6096:43:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420696e697469616c207370656e64696e67206c696d697420666f72206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 680, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6151:116:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_3db3df495834b8a5dacc61243eb5b9d04e4582608388cabb972a238d9e98e4fe", + "typeString": "literal_string \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_3db3df495834b8a5dacc61243eb5b9d04e4582608388cabb972a238d9e98e4fe", + "typeString": "literal_string \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 674, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "6077:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 681, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6077:200:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 682, + "nodeType": "ExpressionStatement", + "src": "6077:200:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 686, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 627, + "src": "6335:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 689, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 687, + "name": "now", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5242, + "src": "6345:3:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "argumentTypes": null, + "hexValue": "3836343030", + "id": 688, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6351:5:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_86400_by_1", + "typeString": "int_const 86400" + }, + "value": "86400" + }, + "src": "6345:11:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 690, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "6344:13:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 684, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "6306:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 685, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountSpendingPeriod", + "nodeType": "MemberAccess", + "referencedDeclaration": 4232, + "src": "6306:28:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 691, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6306:52:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20736574207370656e64696e6720706572696f6420666f72206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 692, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6370:109:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f8ea4dffeecef2c14480ec77d7f295f45e20ccebde68ef7164f5662998110ce0", + "typeString": "literal_string \"Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_f8ea4dffeecef2c14480ec77d7f295f45e20ccebde68ef7164f5662998110ce0", + "typeString": "literal_string \"Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 683, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "6287:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 693, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6287:202:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 694, + "nodeType": "ExpressionStatement", + "src": "6287:202:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 695, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6506:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 642, + "id": 696, + "nodeType": "Return", + "src": "6499:11:4" + } + ] + }, + "documentation": "@notice Approves account and deposits specified amount of given currency\n@param currency Currency symbol of amount to be deposited;\n@param account Ethereum address of account holder;\n@param amount Deposit amount for account holder;\n@param issuerFirm Name of the issuer firm with authority on account holder;\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 698, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 636, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 633, + "src": "5263:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 637, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "5275:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 638, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "5275:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 639, + "modifierName": { + "argumentTypes": null, + "id": 635, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 905, + "src": "5249:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "5249:37:4" + } + ], + "name": "approveKYCAndDeposit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 634, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 625, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 698, + "src": "5164:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 624, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "5164:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 627, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 698, + "src": "5181:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 626, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5181:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 629, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 698, + "src": "5198:11:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 628, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5198:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 631, + "name": "limit", + "nodeType": "VariableDeclaration", + "scope": 698, + "src": "5211:10:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 630, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5211:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 633, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 698, + "src": "5223:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 632, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "5223:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5163:78:4" + }, + "payable": false, + "returnParameters": { + "id": 642, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 641, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 698, + "src": "5296:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 640, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5296:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5295:14:4" + }, + "scope": 906, + "src": "5134:1383:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 725, + "nodeType": "Block", + "src": "7032:228:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 717, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 700, + "src": "7085:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 718, + "name": "limit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 702, + "src": "7094:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 715, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "7057:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 716, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountSpendingLimit", + "nodeType": "MemberAccess", + "referencedDeclaration": 4292, + "src": "7057:27:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 719, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7057:43:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420696e697469616c207370656e64696e67206c696d697420666f72206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 720, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7110:116:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_3db3df495834b8a5dacc61243eb5b9d04e4582608388cabb972a238d9e98e4fe", + "typeString": "literal_string \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_3db3df495834b8a5dacc61243eb5b9d04e4582608388cabb972a238d9e98e4fe", + "typeString": "literal_string \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 714, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "7040:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 721, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7040:194:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 722, + "nodeType": "ExpressionStatement", + "src": "7040:194:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 723, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7249:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 713, + "id": 724, + "nodeType": "Return", + "src": "7242:11:4" + } + ] + }, + "documentation": "@notice Sets the spending limit for a given account\n@param account Ethereum address of account holder;\n@param limit Spending limit amount for account;\n@param issuerFirm Name of the issuer firm with authority on account holder;\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 726, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 707, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 704, + "src": "6985:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 708, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "6997:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 709, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "6997:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 710, + "modifierName": { + "argumentTypes": null, + "id": 706, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 905, + "src": "6971:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "6971:37:4" + } + ], + "name": "setAccountSpendingLimit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 705, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 700, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 726, + "src": "6916:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 699, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6916:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 702, + "name": "limit", + "nodeType": "VariableDeclaration", + "scope": 726, + "src": "6933:10:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 701, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "6933:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 704, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 726, + "src": "6945:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 703, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "6945:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6915:48:4" + }, + "payable": false, + "returnParameters": { + "id": 713, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 712, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 726, + "src": "7018:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 711, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7018:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7017:14:4" + }, + "scope": 906, + "src": "6883:377:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 738, + "nodeType": "Block", + "src": "7612:62:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 735, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 728, + "src": "7659:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 733, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "7627:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 734, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getAccountSpendingRemaining", + "nodeType": "MemberAccess", + "referencedDeclaration": 4492, + "src": "7627:31:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 736, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7627:40:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 732, + "id": 737, + "nodeType": "Return", + "src": "7620:47:4" + } + ] + }, + "documentation": "@notice Returns the periodic remaining spending amount for an account\n@param account Ethereum address of account holder;\n@return {\"spendingRemaining\" : \"Returns the remaining spending amount for the account\"}", + "id": 739, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getAccountSpendingRemaining", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 729, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 728, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 739, + "src": "7550:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 727, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7550:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7549:17:4" + }, + "payable": false, + "returnParameters": { + "id": 732, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 731, + "name": "spendingRemaining", + "nodeType": "VariableDeclaration", + "scope": 739, + "src": "7588:22:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 730, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "7588:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7587:24:4" + }, + "scope": 906, + "src": "7513:161:4", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 751, + "nodeType": "Block", + "src": "7996:58:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 748, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 741, + "src": "8039:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 746, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "8011:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 747, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getAccountSpendingLimit", + "nodeType": "MemberAccess", + "referencedDeclaration": 4318, + "src": "8011:27:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 749, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8011:36:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 745, + "id": 750, + "nodeType": "Return", + "src": "8004:43:4" + } + ] + }, + "documentation": "@notice Return the spending limit for an account\n@param account Ethereum address of account holder\n@return {\"spendingLimit\" : \"Returns the remaining daily spending limit of the account\"}", + "id": 752, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getAccountSpendingLimit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 742, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 741, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 752, + "src": "7938:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 740, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7938:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7937:17:4" + }, + "payable": false, + "returnParameters": { + "id": 745, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 744, + "name": "spendingLimit", + "nodeType": "VariableDeclaration", + "scope": 752, + "src": "7976:18:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 743, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "7976:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7975:20:4" + }, + "scope": 906, + "src": "7905:149:4", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 779, + "nodeType": "Block", + "src": "8701:194:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 771, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 754, + "src": "8746:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 772, + "name": "bpsRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 756, + "src": "8756:7:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 769, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "8726:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 770, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFxUSDBPSRate", + "nodeType": "MemberAccess", + "referencedDeclaration": 4526, + "src": "8726:19:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,uint256) returns (bool)" + } + }, + "id": 773, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8726:38:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742046582055534420626173697320706f696e747320726174652e20506c6561736520656e73757265206973737565724669726d20697320617574686f72697a6564", + "id": 774, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8774:87:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_bb75f554926078abd19b386958c530b812c30dcf00b22d8f88e84ef51c06cb71", + "typeString": "literal_string \"Error: Unable to set FX USD basis points rate. Please ensure issuerFirm is authorized\"" + }, + "value": "Error: Unable to set FX USD basis points rate. Please ensure issuerFirm is authorized" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_bb75f554926078abd19b386958c530b812c30dcf00b22d8f88e84ef51c06cb71", + "typeString": "literal_string \"Error: Unable to set FX USD basis points rate. Please ensure issuerFirm is authorized\"" + } + ], + "id": 768, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "8709:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 775, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8709:160:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 776, + "nodeType": "ExpressionStatement", + "src": "8709:160:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 777, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8884:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 767, + "id": 778, + "nodeType": "Return", + "src": "8877:11:4" + } + ] + }, + "documentation": "@notice Set the foreign currency exchange rate to USD in basis points\n@dev NOTE: This value should always be relative to USD pair; e.g. JPY/USD, GBP/USD, etc.\n@param currency The TokenIO currency symbol (e.g. USDx, JPYx, GBPx)\n@param bpsRate Basis point rate of foreign currency exchange rate to USD\n@param issuerFirm Firm setting the foreign currency exchange\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 780, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 761, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 758, + "src": "8654:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 762, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "8666:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 763, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "8666:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 764, + "modifierName": { + "argumentTypes": null, + "id": 760, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 905, + "src": "8640:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "8640:37:4" + } + ], + "name": "setFxBpsRate", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 759, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 754, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 780, + "src": "8583:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 753, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "8583:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 756, + "name": "bpsRate", + "nodeType": "VariableDeclaration", + "scope": 780, + "src": "8600:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 755, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "8600:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 758, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 780, + "src": "8614:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 757, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "8614:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8582:50:4" + }, + "payable": false, + "returnParameters": { + "id": 767, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 766, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 780, + "src": "8687:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 765, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8687:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8686:14:4" + }, + "scope": 906, + "src": "8561:334:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 795, + "nodeType": "Block", + "src": "9296:60:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 791, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 782, + "src": "9330:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 792, + "name": "fxAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 784, + "src": "9340:8:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 789, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "9311:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 790, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFxUSDAmount", + "nodeType": "MemberAccess", + "referencedDeclaration": 4605, + "src": "9311:18:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,uint256) view returns (uint256)" + } + }, + "id": 793, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9311:38:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 788, + "id": 794, + "nodeType": "Return", + "src": "9304:45:4" + } + ] + }, + "documentation": "@notice Return the foreign currency USD exchanged amount\n@param currency The TokenIO currency symbol (e.g. USDx, JPYx, GBPx)\n@param fxAmount Amount of foreign currency to exchange into USD\n@return {\"usdAmount\" : \"Returns the foreign currency amount in USD\"}", + "id": 796, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getFxUSDAmount", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 785, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 782, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 796, + "src": "9227:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 781, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "9227:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 784, + "name": "fxAmount", + "nodeType": "VariableDeclaration", + "scope": 796, + "src": "9244:13:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 783, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "9244:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9226:32:4" + }, + "payable": false, + "returnParameters": { + "id": 788, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 787, + "name": "usdAmount", + "nodeType": "VariableDeclaration", + "scope": 796, + "src": "9280:14:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 786, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "9280:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9279:16:4" + }, + "scope": 906, + "src": "9203:153:4", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 823, + "nodeType": "Block", + "src": "9846:334:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 815, + "name": "originalAccount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 798, + "src": "9987:15:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 816, + "name": "updatedAccount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 800, + "src": "10004:14:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 813, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "9963:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 814, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setForwardedAccount", + "nodeType": "MemberAccess", + "referencedDeclaration": 2244, + "src": "9963:23:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,address) returns (bool)" + } + }, + "id": 817, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9963:56:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420666f72776172646564206164647265737320666f72206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 818, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10031:111:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_e6961bf7e2117bb8ea6b863d500e7333e3944d065ba6c8fa1114eacec3e93704", + "typeString": "literal_string \"Error: Unable to set forwarded address for account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set forwarded address for account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_e6961bf7e2117bb8ea6b863d500e7333e3944d065ba6c8fa1114eacec3e93704", + "typeString": "literal_string \"Error: Unable to set forwarded address for account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 812, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "9944:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 819, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9944:208:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 820, + "nodeType": "ExpressionStatement", + "src": "9944:208:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 821, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10169:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 811, + "id": 822, + "nodeType": "Return", + "src": "10162:11:4" + } + ] + }, + "documentation": "@notice Updates to new forwarded account\n@param originalAccount [address]\n@param updatedAccount [address]\n@param issuerFirm Name of the issuer firm with authority on account holder;\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 824, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 805, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 802, + "src": "9799:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 806, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "9811:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 807, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "9811:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 808, + "modifierName": { + "argumentTypes": null, + "id": 804, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 905, + "src": "9785:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "9785:37:4" + } + ], + "name": "approveForwardedAccount", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 803, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 798, + "name": "originalAccount", + "nodeType": "VariableDeclaration", + "scope": 824, + "src": "9710:23:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 797, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9710:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 800, + "name": "updatedAccount", + "nodeType": "VariableDeclaration", + "scope": 824, + "src": "9735:22:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 799, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9735:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 802, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 824, + "src": "9759:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 801, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "9759:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9709:68:4" + }, + "payable": false, + "returnParameters": { + "id": 811, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 810, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 824, + "src": "9832:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 809, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "9832:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9831:14:4" + }, + "scope": 906, + "src": "9677:503:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 855, + "nodeType": "Block", + "src": "10700:426:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 845, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 826, + "src": "10947:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 846, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 828, + "src": "10957:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 847, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 830, + "src": "10966:6:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 848, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 832, + "src": "10974:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 843, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "10935:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 844, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "deposit", + "nodeType": "MemberAccess", + "referencedDeclaration": 3619, + "src": "10935:11:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,uint256,string memory) returns (bool)" + } + }, + "id": 849, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10935:50:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f206465706f7369742066756e64732e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 850, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10997:91:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_05597560a0a09591bd512c7af73fab8ea943a53c0f5353c4fe6fe2cc72d5d3f2", + "typeString": "literal_string \"Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_05597560a0a09591bd512c7af73fab8ea943a53c0f5353c4fe6fe2cc72d5d3f2", + "typeString": "literal_string \"Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 842, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "10916:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 851, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10916:182:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 852, + "nodeType": "ExpressionStatement", + "src": "10916:182:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 853, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11115:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 841, + "id": 854, + "nodeType": "Return", + "src": "11108:11:4" + } + ] + }, + "documentation": "@notice Issues a specified account to recipient account of a given currency\n@param currency [string] currency symbol\n@param amount [uint] issuance amount\n@param issuerFirm Name of the issuer firm with authority on account holder;\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 856, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 835, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 832, + "src": "10653:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 836, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "10665:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 837, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "10665:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 838, + "modifierName": { + "argumentTypes": null, + "id": 834, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 905, + "src": "10639:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "10639:37:4" + } + ], + "name": "deposit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 833, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 826, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 856, + "src": "10566:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 825, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "10566:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 828, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 856, + "src": "10583:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 827, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10583:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 830, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 856, + "src": "10600:11:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 829, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "10600:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 832, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 856, + "src": "10613:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 831, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "10613:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "10565:66:4" + }, + "payable": false, + "returnParameters": { + "id": 841, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 840, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 856, + "src": "10686:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 839, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "10686:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "10685:14:4" + }, + "scope": 906, + "src": "10549:577:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 887, + "nodeType": "Block", + "src": "11678:468:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 877, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 858, + "src": "11922:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 878, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 860, + "src": "11932:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 879, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 862, + "src": "11941:6:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 880, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 864, + "src": "11949:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 875, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "11909:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 876, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "withdraw", + "nodeType": "MemberAccess", + "referencedDeclaration": 3730, + "src": "11909:12:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,uint256,string memory) returns (bool)" + } + }, + "id": 881, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11909:51:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2077697468647261772066756e64732e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f7269747920617265207265676973746572656420616e642068617665206973737565642066756e647320746861742063616e2062652077697468647261776e", + "id": 882, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11972:136:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d6e626bbbdfa2315c15e2b539714496598c6d0294b7989222c4553c1a4a17622", + "typeString": "literal_string \"Error: Unable to withdraw funds. Please check issuerFirm and firm authority are registered and have issued funds that can be withdrawn\"" + }, + "value": "Error: Unable to withdraw funds. Please check issuerFirm and firm authority are registered and have issued funds that can be withdrawn" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d6e626bbbdfa2315c15e2b539714496598c6d0294b7989222c4553c1a4a17622", + "typeString": "literal_string \"Error: Unable to withdraw funds. Please check issuerFirm and firm authority are registered and have issued funds that can be withdrawn\"" + } + ], + "id": 874, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "11890:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 883, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11890:228:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 884, + "nodeType": "ExpressionStatement", + "src": "11890:228:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 885, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12135:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 873, + "id": 886, + "nodeType": "Return", + "src": "12128:11:4" + } + ] + }, + "documentation": "@notice Withdraws a specified amount of tokens of a given currency\n@param currency Currency symbol\n@param account Ethereum address of account holder\n@param amount Issuance amount\n@param issuerFirm Name of the issuer firm with authority on account holder\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 888, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 867, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 864, + "src": "11631:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 868, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "11643:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 869, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "11643:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 870, + "modifierName": { + "argumentTypes": null, + "id": 866, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 905, + "src": "11617:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "11617:37:4" + } + ], + "name": "withdraw", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 865, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 858, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 888, + "src": "11544:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 857, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "11544:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 860, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 888, + "src": "11561:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 859, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11561:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 862, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 888, + "src": "11578:11:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 861, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "11578:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 864, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 888, + "src": "11591:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 863, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "11591:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "11543:66:4" + }, + "payable": false, + "returnParameters": { + "id": 873, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 872, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 888, + "src": "11664:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 871, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "11664:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "11663:14:4" + }, + "scope": 906, + "src": "11526:620:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 904, + "nodeType": "Block", + "src": "12413:254:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 897, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 890, + "src": "12547:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 898, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 892, + "src": "12557:9:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 895, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "12524:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 896, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "isRegisteredToFirm", + "nodeType": "MemberAccess", + "referencedDeclaration": 3916, + "src": "12524:22:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address) view returns (bool)" + } + }, + "id": 899, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12524:43:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a206973737565724669726d20616e642f6f72206669726d20617574686f7269747920617265206e6f742072656769737465726564", + "id": 900, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12579:60:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_462b4c77bf54838ec38a464948b1a941796aa7d982a63221057f242b5bb9741d", + "typeString": "literal_string \"Error: issuerFirm and/or firm authority are not registered\"" + }, + "value": "Error: issuerFirm and/or firm authority are not registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_462b4c77bf54838ec38a464948b1a941796aa7d982a63221057f242b5bb9741d", + "typeString": "literal_string \"Error: issuerFirm and/or firm authority are not registered\"" + } + ], + "id": 894, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "12505:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 901, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12505:144:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 902, + "nodeType": "ExpressionStatement", + "src": "12505:144:4" + }, + { + "id": 903, + "nodeType": "PlaceholderStatement", + "src": "12659:1:4" + } + ] + }, + "documentation": "@notice Ensure only authorized currency firms and authorities can modify protected methods\n@dev authority must be registered to an authorized firm to use protected methods", + "id": 905, + "name": "onlyAuthority", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 893, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 890, + "name": "firmName", + "nodeType": "VariableDeclaration", + "scope": 905, + "src": "12377:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 889, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "12377:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 892, + "name": "authority", + "nodeType": "VariableDeclaration", + "scope": 905, + "src": "12394:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 891, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12394:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "12376:36:4" + }, + "src": "12354:313:4", + "visibility": "internal" + } + ], + "scope": 907, + "src": "881:11789:4" + } + ], + "src": "0:12671:4" + }, + "legacyAST": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOCurrencyAuthority.sol", + "exportedSymbols": { + "TokenIOCurrencyAuthority": [ + 906 + ] + }, + "id": 907, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 472, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:4" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 473, + "nodeType": "ImportDirective", + "scope": 907, + "sourceUnit": 185, + "src": "25:23:4", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 474, + "nodeType": "ImportDirective", + "scope": 907, + "sourceUnit": 5226, + "src": "49:30:4", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 475, + "nodeType": "ImportDirective", + "scope": 907, + "sourceUnit": 4607, + "src": "80:26:4", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 476, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "918:7:4", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 477, + "nodeType": "InheritanceSpecifier", + "src": "918:7:4" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 906, + "linearizedBaseContracts": [ + 906, + 184 + ], + "name": "TokenIOCurrencyAuthority", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 480, + "libraryName": { + "contractScope": null, + "id": 478, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4606, + "src": "1025:10:4", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4606", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "1019:37:4", + "typeName": { + "contractScope": null, + "id": 479, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1040:15:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 482, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 906, + "src": "1061:19:4", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 481, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1061:15:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 502, + "nodeType": "Block", + "src": "1279:385:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 493, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 487, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "1528:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 489, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1629, + "src": "1528:11:4", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 491, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 484, + "src": "1557:16:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 490, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5225, + "src": "1542:14:4", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5225_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 492, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1542:32:4", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1528:46:4", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "id": 494, + "nodeType": "ExpressionStatement", + "src": "1528:46:4" + }, + { + "expression": { + "argumentTypes": null, + "id": 500, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 495, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1633:5:4", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 498, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 496, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "1639:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 497, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1639:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1633:17:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 499, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1653:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1633:24:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 501, + "nodeType": "ExpressionStatement", + "src": "1633:24:4" + } + ] + }, + "documentation": "@notice Constructor method for CurrencyAuthority contract\n@param _storageContract Address of TokenIOStorage contract", + "id": 503, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 485, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 484, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 503, + "src": "1246:24:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 483, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1246:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1245:26:4" + }, + "payable": false, + "returnParameters": { + "id": 486, + "nodeType": "ParameterList", + "parameters": [], + "src": "1279:0:4" + }, + "scope": 906, + "src": "1234:430:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 518, + "nodeType": "Block", + "src": "1999:60:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 514, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 505, + "src": "2034:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 515, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 507, + "src": "2044:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 512, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "2014:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 513, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenBalance", + "nodeType": "MemberAccess", + "referencedDeclaration": 2816, + "src": "2014:19:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address) view returns (uint256)" + } + }, + "id": 516, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2014:38:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 511, + "id": 517, + "nodeType": "Return", + "src": "2007:45:4" + } + ] + }, + "documentation": "@notice Gets balance of sepcified account for a given currency\n@param currency Currency symbol 'USDx'\n@param account Sepcified account address\n@return { \"balance\": \"Returns account balance\"}", + "id": 519, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getTokenBalance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 508, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 505, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 519, + "src": "1930:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 504, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1930:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 507, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 519, + "src": "1947:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 506, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1947:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1929:34:4" + }, + "payable": false, + "returnParameters": { + "id": 511, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 510, + "name": "balance", + "nodeType": "VariableDeclaration", + "scope": 519, + "src": "1985:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 509, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "1985:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1984:14:4" + }, + "scope": 906, + "src": "1905:154:4", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 531, + "nodeType": "Block", + "src": "2320:50:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 528, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 521, + "src": "2354:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 526, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "2335:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 527, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSupply", + "nodeType": "MemberAccess", + "referencedDeclaration": 2746, + "src": "2335:18:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) view returns (uint256)" + } + }, + "id": 529, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2335:28:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 525, + "id": 530, + "nodeType": "Return", + "src": "2328:35:4" + } + ] + }, + "documentation": "@notice Gets total supply of specified currency\n@param currency Currency symbol 'USDx'\n@return { \"supply\": \"Returns total supply of currency\"}", + "id": 532, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getTokenSupply", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 522, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 521, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 532, + "src": "2269:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 520, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2269:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2268:17:4" + }, + "payable": false, + "returnParameters": { + "id": 525, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 524, + "name": "supply", + "nodeType": "VariableDeclaration", + "scope": 532, + "src": "2307:11:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 523, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2307:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2306:13:4" + }, + "scope": 906, + "src": "2245:125:4", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 560, + "nodeType": "Block", + "src": "2863:307:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 551, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 534, + "src": "2997:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 552, + "name": "isAllowed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 536, + "src": "3006:9:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "id": 553, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 538, + "src": "3017:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 549, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "2976:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 550, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountStatus", + "nodeType": "MemberAccess", + "referencedDeclaration": 2210, + "src": "2976:20:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_bool_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,bool,string memory) returns (bool)" + } + }, + "id": 554, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2976:52:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20667265657a65206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 555, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3040:92:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7f197396b05ade1cce611708853992e455bcadbeffc759d9c87bb519e9c019f7", + "typeString": "literal_string \"Error: Unable to freeze account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to freeze account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7f197396b05ade1cce611708853992e455bcadbeffc759d9c87bb519e9c019f7", + "typeString": "literal_string \"Error: Unable to freeze account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 548, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2957:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 556, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2957:185:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 557, + "nodeType": "ExpressionStatement", + "src": "2957:185:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 558, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3159:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 547, + "id": 559, + "nodeType": "Return", + "src": "3152:11:4" + } + ] + }, + "documentation": "@notice Updates account status. false: frozen, true: un-frozen\n@param account Sepcified account address\n@param isAllowed Frozen status\n@param issuerFirm Name of the issuer firm with authority on account holder;\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 561, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 541, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 538, + "src": "2816:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 542, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "2828:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 543, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2828:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 544, + "modifierName": { + "argumentTypes": null, + "id": 540, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 905, + "src": "2802:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "2802:37:4" + } + ], + "name": "freezeAccount", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 539, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 534, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 561, + "src": "2743:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 533, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2743:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 536, + "name": "isAllowed", + "nodeType": "VariableDeclaration", + "scope": 561, + "src": "2760:14:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 535, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2760:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 538, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 561, + "src": "2776:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 537, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2776:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2742:52:4" + }, + "payable": false, + "returnParameters": { + "id": 547, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 546, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 561, + "src": "2849:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 545, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2849:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2848:14:4" + }, + "scope": 906, + "src": "2720:450:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 622, + "nodeType": "Block", + "src": "3661:1019:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 582, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 563, + "src": "3798:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 583, + "name": "isApproved", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 565, + "src": "3807:10:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "id": 584, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 569, + "src": "3819:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 580, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "3779:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 581, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setKYCApproval", + "nodeType": "MemberAccess", + "referencedDeclaration": 2165, + "src": "3779:18:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_bool_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,bool,string memory) returns (bool)" + } + }, + "id": 585, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3779:51:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20617070726f7665206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 586, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3842:93:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_2adead5f449a6a2ad329ab364a208ed0d211b31aa2a852e47f50e9ff362b00fc", + "typeString": "literal_string \"Error: Unable to approve account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to approve account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_2adead5f449a6a2ad329ab364a208ed0d211b31aa2a852e47f50e9ff362b00fc", + "typeString": "literal_string \"Error: Unable to approve account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 579, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "3760:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 587, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3760:185:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 588, + "nodeType": "ExpressionStatement", + "src": "3760:185:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 592, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 563, + "src": "4080:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 593, + "name": "isApproved", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 565, + "src": "4089:10:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "id": 594, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 569, + "src": "4101:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 590, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "4059:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 591, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountStatus", + "nodeType": "MemberAccess", + "referencedDeclaration": 2210, + "src": "4059:20:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_bool_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,bool,string memory) returns (bool)" + } + }, + "id": 595, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4059:53:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20736574206163636f756e74207374617475732e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 596, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4124:96:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d5b494d954ebc1ea25ff613cbe2af5e5e6dee30f2d294a40b95846fb93c0b75b", + "typeString": "literal_string \"Error: Unable to set account status. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set account status. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d5b494d954ebc1ea25ff613cbe2af5e5e6dee30f2d294a40b95846fb93c0b75b", + "typeString": "literal_string \"Error: Unable to set account status. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 589, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "4040:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 597, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4040:190:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 598, + "nodeType": "ExpressionStatement", + "src": "4040:190:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 602, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 563, + "src": "4287:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 603, + "name": "limit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 567, + "src": "4296:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 600, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "4259:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 601, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountSpendingLimit", + "nodeType": "MemberAccess", + "referencedDeclaration": 4292, + "src": "4259:27:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 604, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4259:43:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420696e697469616c207370656e64696e67206c696d697420666f72206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 605, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4314:116:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_3db3df495834b8a5dacc61243eb5b9d04e4582608388cabb972a238d9e98e4fe", + "typeString": "literal_string \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_3db3df495834b8a5dacc61243eb5b9d04e4582608388cabb972a238d9e98e4fe", + "typeString": "literal_string \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 599, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "4240:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 606, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4240:200:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 607, + "nodeType": "ExpressionStatement", + "src": "4240:200:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 611, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 563, + "src": "4498:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 614, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 612, + "name": "now", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5242, + "src": "4508:3:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "argumentTypes": null, + "hexValue": "3836343030", + "id": 613, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4514:5:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_86400_by_1", + "typeString": "int_const 86400" + }, + "value": "86400" + }, + "src": "4508:11:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 615, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4507:13:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 609, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "4469:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 610, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountSpendingPeriod", + "nodeType": "MemberAccess", + "referencedDeclaration": 4232, + "src": "4469:28:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 616, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4469:52:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20736574207370656e64696e6720706572696f6420666f72206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 617, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4533:109:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f8ea4dffeecef2c14480ec77d7f295f45e20ccebde68ef7164f5662998110ce0", + "typeString": "literal_string \"Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_f8ea4dffeecef2c14480ec77d7f295f45e20ccebde68ef7164f5662998110ce0", + "typeString": "literal_string \"Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 608, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "4450:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 618, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4450:202:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 619, + "nodeType": "ExpressionStatement", + "src": "4450:202:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 620, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4669:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 578, + "id": 621, + "nodeType": "Return", + "src": "4662:11:4" + } + ] + }, + "documentation": "@notice Sets approval status of specified account\n@param account Sepcified account address\n@param isApproved Frozen status\n@param issuerFirm Name of the issuer firm with authority on account holder;\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 623, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 572, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 569, + "src": "3614:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 573, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "3626:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 574, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "3626:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 575, + "modifierName": { + "argumentTypes": null, + "id": 571, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 905, + "src": "3600:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "3600:37:4" + } + ], + "name": "approveKYC", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 570, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 563, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 623, + "src": "3528:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 562, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3528:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 565, + "name": "isApproved", + "nodeType": "VariableDeclaration", + "scope": 623, + "src": "3545:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 564, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3545:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 567, + "name": "limit", + "nodeType": "VariableDeclaration", + "scope": 623, + "src": "3562:10:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 566, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3562:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 569, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 623, + "src": "3574:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 568, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3574:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3527:65:4" + }, + "payable": false, + "returnParameters": { + "id": 578, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 577, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 623, + "src": "3647:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 576, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3647:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3646:14:4" + }, + "scope": 906, + "src": "3508:1172:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 697, + "nodeType": "Block", + "src": "5310:1207:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 646, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 627, + "src": "5449:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "hexValue": "74727565", + "id": 647, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5458:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "argumentTypes": null, + "id": 648, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 633, + "src": "5464:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 644, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "5430:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 645, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setKYCApproval", + "nodeType": "MemberAccess", + "referencedDeclaration": 2165, + "src": "5430:18:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_bool_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,bool,string memory) returns (bool)" + } + }, + "id": 649, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5430:45:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20617070726f7665206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 650, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5487:93:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_2adead5f449a6a2ad329ab364a208ed0d211b31aa2a852e47f50e9ff362b00fc", + "typeString": "literal_string \"Error: Unable to approve account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to approve account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_2adead5f449a6a2ad329ab364a208ed0d211b31aa2a852e47f50e9ff362b00fc", + "typeString": "literal_string \"Error: Unable to approve account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 643, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "5411:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 651, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5411:179:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 652, + "nodeType": "ExpressionStatement", + "src": "5411:179:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 656, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 627, + "src": "5731:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "hexValue": "74727565", + "id": 657, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5740:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "argumentTypes": null, + "id": 658, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 633, + "src": "5746:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 654, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "5710:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 655, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountStatus", + "nodeType": "MemberAccess", + "referencedDeclaration": 2210, + "src": "5710:20:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_bool_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,bool,string memory) returns (bool)" + } + }, + "id": 659, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5710:47:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20736574206163636f756e74207374617475732e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 660, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5769:96:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d5b494d954ebc1ea25ff613cbe2af5e5e6dee30f2d294a40b95846fb93c0b75b", + "typeString": "literal_string \"Error: Unable to set account status. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set account status. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d5b494d954ebc1ea25ff613cbe2af5e5e6dee30f2d294a40b95846fb93c0b75b", + "typeString": "literal_string \"Error: Unable to set account status. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 653, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "5691:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 661, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5691:184:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 662, + "nodeType": "ExpressionStatement", + "src": "5691:184:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 666, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 625, + "src": "5916:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 667, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 627, + "src": "5926:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 668, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 629, + "src": "5935:6:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 669, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 633, + "src": "5943:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 664, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "5904:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 665, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "deposit", + "nodeType": "MemberAccess", + "referencedDeclaration": 3619, + "src": "5904:11:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,uint256,string memory) returns (bool)" + } + }, + "id": 670, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5904:50:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f206465706f7369742066756e64732e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 671, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5966:91:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_05597560a0a09591bd512c7af73fab8ea943a53c0f5353c4fe6fe2cc72d5d3f2", + "typeString": "literal_string \"Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_05597560a0a09591bd512c7af73fab8ea943a53c0f5353c4fe6fe2cc72d5d3f2", + "typeString": "literal_string \"Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 663, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "5885:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 672, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5885:182:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 673, + "nodeType": "ExpressionStatement", + "src": "5885:182:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 677, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 627, + "src": "6124:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 678, + "name": "limit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 631, + "src": "6133:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 675, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "6096:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 676, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountSpendingLimit", + "nodeType": "MemberAccess", + "referencedDeclaration": 4292, + "src": "6096:27:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 679, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6096:43:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420696e697469616c207370656e64696e67206c696d697420666f72206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 680, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6151:116:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_3db3df495834b8a5dacc61243eb5b9d04e4582608388cabb972a238d9e98e4fe", + "typeString": "literal_string \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_3db3df495834b8a5dacc61243eb5b9d04e4582608388cabb972a238d9e98e4fe", + "typeString": "literal_string \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 674, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "6077:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 681, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6077:200:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 682, + "nodeType": "ExpressionStatement", + "src": "6077:200:4" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 686, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 627, + "src": "6335:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 689, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 687, + "name": "now", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5242, + "src": "6345:3:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "argumentTypes": null, + "hexValue": "3836343030", + "id": 688, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6351:5:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_86400_by_1", + "typeString": "int_const 86400" + }, + "value": "86400" + }, + "src": "6345:11:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 690, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "6344:13:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 684, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "6306:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 685, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountSpendingPeriod", + "nodeType": "MemberAccess", + "referencedDeclaration": 4232, + "src": "6306:28:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 691, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6306:52:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20736574207370656e64696e6720706572696f6420666f72206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 692, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6370:109:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f8ea4dffeecef2c14480ec77d7f295f45e20ccebde68ef7164f5662998110ce0", + "typeString": "literal_string \"Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_f8ea4dffeecef2c14480ec77d7f295f45e20ccebde68ef7164f5662998110ce0", + "typeString": "literal_string \"Error: Unable to set spending period for account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 683, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "6287:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 693, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6287:202:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 694, + "nodeType": "ExpressionStatement", + "src": "6287:202:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 695, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6506:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 642, + "id": 696, + "nodeType": "Return", + "src": "6499:11:4" + } + ] + }, + "documentation": "@notice Approves account and deposits specified amount of given currency\n@param currency Currency symbol of amount to be deposited;\n@param account Ethereum address of account holder;\n@param amount Deposit amount for account holder;\n@param issuerFirm Name of the issuer firm with authority on account holder;\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 698, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 636, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 633, + "src": "5263:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 637, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "5275:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 638, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "5275:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 639, + "modifierName": { + "argumentTypes": null, + "id": 635, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 905, + "src": "5249:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "5249:37:4" + } + ], + "name": "approveKYCAndDeposit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 634, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 625, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 698, + "src": "5164:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 624, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "5164:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 627, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 698, + "src": "5181:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 626, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5181:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 629, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 698, + "src": "5198:11:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 628, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5198:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 631, + "name": "limit", + "nodeType": "VariableDeclaration", + "scope": 698, + "src": "5211:10:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 630, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5211:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 633, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 698, + "src": "5223:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 632, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "5223:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5163:78:4" + }, + "payable": false, + "returnParameters": { + "id": 642, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 641, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 698, + "src": "5296:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 640, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5296:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5295:14:4" + }, + "scope": 906, + "src": "5134:1383:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 725, + "nodeType": "Block", + "src": "7032:228:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 717, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 700, + "src": "7085:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 718, + "name": "limit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 702, + "src": "7094:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 715, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "7057:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 716, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountSpendingLimit", + "nodeType": "MemberAccess", + "referencedDeclaration": 4292, + "src": "7057:27:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 719, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7057:43:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420696e697469616c207370656e64696e67206c696d697420666f72206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 720, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7110:116:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_3db3df495834b8a5dacc61243eb5b9d04e4582608388cabb972a238d9e98e4fe", + "typeString": "literal_string \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_3db3df495834b8a5dacc61243eb5b9d04e4582608388cabb972a238d9e98e4fe", + "typeString": "literal_string \"Error: Unable to set initial spending limit for account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 714, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "7040:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 721, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7040:194:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 722, + "nodeType": "ExpressionStatement", + "src": "7040:194:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 723, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7249:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 713, + "id": 724, + "nodeType": "Return", + "src": "7242:11:4" + } + ] + }, + "documentation": "@notice Sets the spending limit for a given account\n@param account Ethereum address of account holder;\n@param limit Spending limit amount for account;\n@param issuerFirm Name of the issuer firm with authority on account holder;\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 726, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 707, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 704, + "src": "6985:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 708, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "6997:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 709, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "6997:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 710, + "modifierName": { + "argumentTypes": null, + "id": 706, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 905, + "src": "6971:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "6971:37:4" + } + ], + "name": "setAccountSpendingLimit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 705, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 700, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 726, + "src": "6916:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 699, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6916:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 702, + "name": "limit", + "nodeType": "VariableDeclaration", + "scope": 726, + "src": "6933:10:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 701, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "6933:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 704, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 726, + "src": "6945:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 703, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "6945:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6915:48:4" + }, + "payable": false, + "returnParameters": { + "id": 713, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 712, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 726, + "src": "7018:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 711, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7018:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7017:14:4" + }, + "scope": 906, + "src": "6883:377:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 738, + "nodeType": "Block", + "src": "7612:62:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 735, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 728, + "src": "7659:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 733, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "7627:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 734, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getAccountSpendingRemaining", + "nodeType": "MemberAccess", + "referencedDeclaration": 4492, + "src": "7627:31:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 736, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7627:40:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 732, + "id": 737, + "nodeType": "Return", + "src": "7620:47:4" + } + ] + }, + "documentation": "@notice Returns the periodic remaining spending amount for an account\n@param account Ethereum address of account holder;\n@return {\"spendingRemaining\" : \"Returns the remaining spending amount for the account\"}", + "id": 739, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getAccountSpendingRemaining", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 729, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 728, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 739, + "src": "7550:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 727, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7550:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7549:17:4" + }, + "payable": false, + "returnParameters": { + "id": 732, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 731, + "name": "spendingRemaining", + "nodeType": "VariableDeclaration", + "scope": 739, + "src": "7588:22:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 730, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "7588:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7587:24:4" + }, + "scope": 906, + "src": "7513:161:4", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 751, + "nodeType": "Block", + "src": "7996:58:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 748, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 741, + "src": "8039:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 746, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "8011:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 747, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getAccountSpendingLimit", + "nodeType": "MemberAccess", + "referencedDeclaration": 4318, + "src": "8011:27:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 749, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8011:36:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 745, + "id": 750, + "nodeType": "Return", + "src": "8004:43:4" + } + ] + }, + "documentation": "@notice Return the spending limit for an account\n@param account Ethereum address of account holder\n@return {\"spendingLimit\" : \"Returns the remaining daily spending limit of the account\"}", + "id": 752, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getAccountSpendingLimit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 742, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 741, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 752, + "src": "7938:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 740, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7938:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7937:17:4" + }, + "payable": false, + "returnParameters": { + "id": 745, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 744, + "name": "spendingLimit", + "nodeType": "VariableDeclaration", + "scope": 752, + "src": "7976:18:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 743, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "7976:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7975:20:4" + }, + "scope": 906, + "src": "7905:149:4", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 779, + "nodeType": "Block", + "src": "8701:194:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 771, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 754, + "src": "8746:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 772, + "name": "bpsRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 756, + "src": "8756:7:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 769, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "8726:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 770, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFxUSDBPSRate", + "nodeType": "MemberAccess", + "referencedDeclaration": 4526, + "src": "8726:19:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,uint256) returns (bool)" + } + }, + "id": 773, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8726:38:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742046582055534420626173697320706f696e747320726174652e20506c6561736520656e73757265206973737565724669726d20697320617574686f72697a6564", + "id": 774, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8774:87:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_bb75f554926078abd19b386958c530b812c30dcf00b22d8f88e84ef51c06cb71", + "typeString": "literal_string \"Error: Unable to set FX USD basis points rate. Please ensure issuerFirm is authorized\"" + }, + "value": "Error: Unable to set FX USD basis points rate. Please ensure issuerFirm is authorized" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_bb75f554926078abd19b386958c530b812c30dcf00b22d8f88e84ef51c06cb71", + "typeString": "literal_string \"Error: Unable to set FX USD basis points rate. Please ensure issuerFirm is authorized\"" + } + ], + "id": 768, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "8709:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 775, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8709:160:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 776, + "nodeType": "ExpressionStatement", + "src": "8709:160:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 777, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8884:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 767, + "id": 778, + "nodeType": "Return", + "src": "8877:11:4" + } + ] + }, + "documentation": "@notice Set the foreign currency exchange rate to USD in basis points\n@dev NOTE: This value should always be relative to USD pair; e.g. JPY/USD, GBP/USD, etc.\n@param currency The TokenIO currency symbol (e.g. USDx, JPYx, GBPx)\n@param bpsRate Basis point rate of foreign currency exchange rate to USD\n@param issuerFirm Firm setting the foreign currency exchange\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 780, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 761, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 758, + "src": "8654:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 762, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "8666:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 763, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "8666:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 764, + "modifierName": { + "argumentTypes": null, + "id": 760, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 905, + "src": "8640:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "8640:37:4" + } + ], + "name": "setFxBpsRate", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 759, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 754, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 780, + "src": "8583:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 753, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "8583:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 756, + "name": "bpsRate", + "nodeType": "VariableDeclaration", + "scope": 780, + "src": "8600:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 755, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "8600:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 758, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 780, + "src": "8614:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 757, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "8614:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8582:50:4" + }, + "payable": false, + "returnParameters": { + "id": 767, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 766, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 780, + "src": "8687:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 765, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8687:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8686:14:4" + }, + "scope": 906, + "src": "8561:334:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 795, + "nodeType": "Block", + "src": "9296:60:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 791, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 782, + "src": "9330:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 792, + "name": "fxAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 784, + "src": "9340:8:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 789, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "9311:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 790, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFxUSDAmount", + "nodeType": "MemberAccess", + "referencedDeclaration": 4605, + "src": "9311:18:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,uint256) view returns (uint256)" + } + }, + "id": 793, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9311:38:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 788, + "id": 794, + "nodeType": "Return", + "src": "9304:45:4" + } + ] + }, + "documentation": "@notice Return the foreign currency USD exchanged amount\n@param currency The TokenIO currency symbol (e.g. USDx, JPYx, GBPx)\n@param fxAmount Amount of foreign currency to exchange into USD\n@return {\"usdAmount\" : \"Returns the foreign currency amount in USD\"}", + "id": 796, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getFxUSDAmount", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 785, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 782, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 796, + "src": "9227:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 781, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "9227:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 784, + "name": "fxAmount", + "nodeType": "VariableDeclaration", + "scope": 796, + "src": "9244:13:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 783, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "9244:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9226:32:4" + }, + "payable": false, + "returnParameters": { + "id": 788, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 787, + "name": "usdAmount", + "nodeType": "VariableDeclaration", + "scope": 796, + "src": "9280:14:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 786, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "9280:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9279:16:4" + }, + "scope": 906, + "src": "9203:153:4", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 823, + "nodeType": "Block", + "src": "9846:334:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 815, + "name": "originalAccount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 798, + "src": "9987:15:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 816, + "name": "updatedAccount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 800, + "src": "10004:14:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 813, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "9963:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 814, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setForwardedAccount", + "nodeType": "MemberAccess", + "referencedDeclaration": 2244, + "src": "9963:23:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,address) returns (bool)" + } + }, + "id": 817, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9963:56:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420666f72776172646564206164647265737320666f72206163636f756e742e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 818, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10031:111:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_e6961bf7e2117bb8ea6b863d500e7333e3944d065ba6c8fa1114eacec3e93704", + "typeString": "literal_string \"Error: Unable to set forwarded address for account. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to set forwarded address for account. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_e6961bf7e2117bb8ea6b863d500e7333e3944d065ba6c8fa1114eacec3e93704", + "typeString": "literal_string \"Error: Unable to set forwarded address for account. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 812, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "9944:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 819, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9944:208:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 820, + "nodeType": "ExpressionStatement", + "src": "9944:208:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 821, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10169:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 811, + "id": 822, + "nodeType": "Return", + "src": "10162:11:4" + } + ] + }, + "documentation": "@notice Updates to new forwarded account\n@param originalAccount [address]\n@param updatedAccount [address]\n@param issuerFirm Name of the issuer firm with authority on account holder;\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 824, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 805, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 802, + "src": "9799:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 806, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "9811:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 807, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "9811:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 808, + "modifierName": { + "argumentTypes": null, + "id": 804, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 905, + "src": "9785:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "9785:37:4" + } + ], + "name": "approveForwardedAccount", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 803, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 798, + "name": "originalAccount", + "nodeType": "VariableDeclaration", + "scope": 824, + "src": "9710:23:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 797, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9710:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 800, + "name": "updatedAccount", + "nodeType": "VariableDeclaration", + "scope": 824, + "src": "9735:22:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 799, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9735:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 802, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 824, + "src": "9759:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 801, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "9759:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9709:68:4" + }, + "payable": false, + "returnParameters": { + "id": 811, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 810, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 824, + "src": "9832:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 809, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "9832:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9831:14:4" + }, + "scope": 906, + "src": "9677:503:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 855, + "nodeType": "Block", + "src": "10700:426:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 845, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 826, + "src": "10947:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 846, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 828, + "src": "10957:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 847, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 830, + "src": "10966:6:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 848, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 832, + "src": "10974:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 843, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "10935:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 844, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "deposit", + "nodeType": "MemberAccess", + "referencedDeclaration": 3619, + "src": "10935:11:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,uint256,string memory) returns (bool)" + } + }, + "id": 849, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10935:50:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f206465706f7369742066756e64732e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f72697479206172652072656769737465726564", + "id": 850, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10997:91:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_05597560a0a09591bd512c7af73fab8ea943a53c0f5353c4fe6fe2cc72d5d3f2", + "typeString": "literal_string \"Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered\"" + }, + "value": "Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_05597560a0a09591bd512c7af73fab8ea943a53c0f5353c4fe6fe2cc72d5d3f2", + "typeString": "literal_string \"Error: Unable to deposit funds. Please check issuerFirm and firm authority are registered\"" + } + ], + "id": 842, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "10916:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 851, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10916:182:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 852, + "nodeType": "ExpressionStatement", + "src": "10916:182:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 853, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11115:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 841, + "id": 854, + "nodeType": "Return", + "src": "11108:11:4" + } + ] + }, + "documentation": "@notice Issues a specified account to recipient account of a given currency\n@param currency [string] currency symbol\n@param amount [uint] issuance amount\n@param issuerFirm Name of the issuer firm with authority on account holder;\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 856, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 835, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 832, + "src": "10653:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 836, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "10665:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 837, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "10665:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 838, + "modifierName": { + "argumentTypes": null, + "id": 834, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 905, + "src": "10639:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "10639:37:4" + } + ], + "name": "deposit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 833, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 826, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 856, + "src": "10566:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 825, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "10566:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 828, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 856, + "src": "10583:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 827, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10583:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 830, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 856, + "src": "10600:11:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 829, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "10600:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 832, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 856, + "src": "10613:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 831, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "10613:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "10565:66:4" + }, + "payable": false, + "returnParameters": { + "id": 841, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 840, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 856, + "src": "10686:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 839, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "10686:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "10685:14:4" + }, + "scope": 906, + "src": "10549:577:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 887, + "nodeType": "Block", + "src": "11678:468:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 877, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 858, + "src": "11922:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 878, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 860, + "src": "11932:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 879, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 862, + "src": "11941:6:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 880, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 864, + "src": "11949:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 875, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "11909:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 876, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "withdraw", + "nodeType": "MemberAccess", + "referencedDeclaration": 3730, + "src": "11909:12:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,uint256,string memory) returns (bool)" + } + }, + "id": 881, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11909:51:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2077697468647261772066756e64732e20506c6561736520636865636b206973737565724669726d20616e64206669726d20617574686f7269747920617265207265676973746572656420616e642068617665206973737565642066756e647320746861742063616e2062652077697468647261776e", + "id": 882, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11972:136:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d6e626bbbdfa2315c15e2b539714496598c6d0294b7989222c4553c1a4a17622", + "typeString": "literal_string \"Error: Unable to withdraw funds. Please check issuerFirm and firm authority are registered and have issued funds that can be withdrawn\"" + }, + "value": "Error: Unable to withdraw funds. Please check issuerFirm and firm authority are registered and have issued funds that can be withdrawn" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d6e626bbbdfa2315c15e2b539714496598c6d0294b7989222c4553c1a4a17622", + "typeString": "literal_string \"Error: Unable to withdraw funds. Please check issuerFirm and firm authority are registered and have issued funds that can be withdrawn\"" + } + ], + "id": 874, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "11890:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 883, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11890:228:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 884, + "nodeType": "ExpressionStatement", + "src": "11890:228:4" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 885, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12135:4:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 873, + "id": 886, + "nodeType": "Return", + "src": "12128:11:4" + } + ] + }, + "documentation": "@notice Withdraws a specified amount of tokens of a given currency\n@param currency Currency symbol\n@param account Ethereum address of account holder\n@param amount Issuance amount\n@param issuerFirm Name of the issuer firm with authority on account holder\n@return { \"success\": \"Returns true if successfully called from another contract\"}", + "id": 888, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 867, + "name": "issuerFirm", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 864, + "src": "11631:10:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 868, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "11643:3:4", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 869, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "11643:10:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 870, + "modifierName": { + "argumentTypes": null, + "id": 866, + "name": "onlyAuthority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 905, + "src": "11617:13:4", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_string_memory_ptr_$_t_address_$", + "typeString": "modifier (string memory,address)" + } + }, + "nodeType": "ModifierInvocation", + "src": "11617:37:4" + } + ], + "name": "withdraw", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 865, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 858, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 888, + "src": "11544:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 857, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "11544:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 860, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 888, + "src": "11561:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 859, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11561:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 862, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 888, + "src": "11578:11:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 861, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "11578:4:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 864, + "name": "issuerFirm", + "nodeType": "VariableDeclaration", + "scope": 888, + "src": "11591:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 863, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "11591:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "11543:66:4" + }, + "payable": false, + "returnParameters": { + "id": 873, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 872, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 888, + "src": "11664:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 871, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "11664:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "11663:14:4" + }, + "scope": 906, + "src": "11526:620:4", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 904, + "nodeType": "Block", + "src": "12413:254:4", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 897, + "name": "firmName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 890, + "src": "12547:8:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 898, + "name": "authority", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 892, + "src": "12557:9:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 895, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "12524:3:4", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 896, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "isRegisteredToFirm", + "nodeType": "MemberAccess", + "referencedDeclaration": 3916, + "src": "12524:22:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address) view returns (bool)" + } + }, + "id": 899, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12524:43:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a206973737565724669726d20616e642f6f72206669726d20617574686f7269747920617265206e6f742072656769737465726564", + "id": 900, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12579:60:4", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_462b4c77bf54838ec38a464948b1a941796aa7d982a63221057f242b5bb9741d", + "typeString": "literal_string \"Error: issuerFirm and/or firm authority are not registered\"" + }, + "value": "Error: issuerFirm and/or firm authority are not registered" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_462b4c77bf54838ec38a464948b1a941796aa7d982a63221057f242b5bb9741d", + "typeString": "literal_string \"Error: issuerFirm and/or firm authority are not registered\"" + } + ], + "id": 894, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "12505:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 901, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12505:144:4", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 902, + "nodeType": "ExpressionStatement", + "src": "12505:144:4" + }, + { + "id": 903, + "nodeType": "PlaceholderStatement", + "src": "12659:1:4" + } + ] + }, + "documentation": "@notice Ensure only authorized currency firms and authorities can modify protected methods\n@dev authority must be registered to an authorized firm to use protected methods", + "id": 905, + "name": "onlyAuthority", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 893, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 890, + "name": "firmName", + "nodeType": "VariableDeclaration", + "scope": 905, + "src": "12377:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 889, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "12377:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 892, + "name": "authority", + "nodeType": "VariableDeclaration", + "scope": 905, + "src": "12394:17:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 891, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12394:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "12376:36:4" + }, + "src": "12354:313:4", + "visibility": "internal" + } + ], + "scope": 907, + "src": "881:11789:4" + } + ], + "src": "0:12671:4" + }, + "compiler": { + "name": "solc", + "version": "0.4.24+commit.e67f0147.Emscripten.clang" + }, + "networks": { + "1": { + "events": {}, + "links": {}, + "address": "0xff0a559183f5bb5c6c65b29fbfee6c3758822664", + "transactionHash": "0xb8da63b98eedf2b31cfd344c8c0441e7bfa435bc3165c4009b0dba9cab129c72" + }, + "4447": { + "events": {}, + "links": {}, + "address": "0x38cf23c52bb4b13f051aec09580a2de845a7fa35", + "transactionHash": "0xe98c7acaee49f62f37f49ce057d9f3bbc5d5440c56c8bad9fa6f18eaf58e5db3" + } + }, + "schemaVersion": "2.0.1", + "updatedAt": "2018-10-24T17:22:03.565Z" +} \ No newline at end of file diff --git a/deployed/mainnet-v1.0.1/TokenIOERC20.json b/deployed/mainnet-v1.0.1/TokenIOERC20.json new file mode 100644 index 0000000..2be6a03 --- /dev/null +++ b/deployed/mainnet-v1.0.1/TokenIOERC20.json @@ -0,0 +1,12508 @@ +{ + "contractName": "TokenIOERC20", + "abi": [ + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "allowOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "removeOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "", + "type": "address" + } + ], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "name": "_storageContract", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "AllowOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "RevokeOwnership", + "type": "event" + }, + { + "constant": false, + "inputs": [ + { + "name": "_name", + "type": "string" + }, + { + "name": "_symbol", + "type": "string" + }, + { + "name": "_tla", + "type": "string" + }, + { + "name": "_version", + "type": "string" + }, + { + "name": "_decimals", + "type": "uint256" + }, + { + "name": "_feeContract", + "type": "address" + }, + { + "name": "_fxUSDBPSRate", + "type": "uint256" + } + ], + "name": "setParams", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "name", + "outputs": [ + { + "name": "_name", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "symbol", + "outputs": [ + { + "name": "_symbol", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "tla", + "outputs": [ + { + "name": "_tla", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "version", + "outputs": [ + { + "name": "_version", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "decimals", + "outputs": [ + { + "name": "_decimals", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "name": "supply", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "account", + "type": "address" + }, + { + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "name": "amount", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "name": "balance", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getFeeParams", + "outputs": [ + { + "name": "bps", + "type": "uint256" + }, + { + "name": "min", + "type": "uint256" + }, + { + "name": "max", + "type": "uint256" + }, + { + "name": "flat", + "type": "uint256" + }, + { + "name": "feeMsg", + "type": "bytes" + }, + { + "name": "feeAccount", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "amount", + "type": "uint256" + } + ], + "name": "calculateFees", + "outputs": [ + { + "name": "fees", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "to", + "type": "address" + }, + { + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "from", + "type": "address" + }, + { + "name": "to", + "type": "address" + }, + { + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "spender", + "type": "address" + }, + { + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "deprecateInterface", + "outputs": [ + { + "name": "deprecated", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051602080615539833981016040908152905133600090815260208190529182208054600160ff19918216811783558054600160a060020a031916600160a060020a0390941693909317835581541690911790556154c390819061007690396000f3006080604052600436106100ed5763ffffffff60e060020a60003504166306fdde0381146100f2578063095ea7b31461017c57806318160ddd146101b457806323b872dd146101db578063313ce567146102055780634bbc142c1461021a57806352238fdd1461023b57806354fd4d5014610253578063666a342714610268578063666e1b39146102895780636b0235a0146102aa57806370a08231146102bf57806395d89b41146102e0578063a9059cbb146102f5578063be6fc18114610319578063dd62ed3e146103db578063e052f0c814610402578063ebe6ba071461052a578063f2fde38b1461053f575b600080fd5b3480156100fe57600080fd5b50610107610560565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610141578181015183820152602001610129565b50505050905090810190601f16801561016e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561018857600080fd5b506101a0600160a060020a0360043516602435610578565b604080519115158252519081900360200190f35b3480156101c057600080fd5b506101c96106e9565b60408051918252519081900360200190f35b3480156101e757600080fd5b506101a0600160a060020a036004358116906024351660443561070d565b34801561021157600080fd5b506101c9610842565b34801561022657600080fd5b506101a0600160a060020a0360043516610866565b34801561024757600080fd5b506101c9600435610922565b34801561025f57600080fd5b5061010761094d565b34801561027457600080fd5b506101a0600160a060020a0360043516610960565b34801561029557600080fd5b506101a0600160a060020a0360043516610a19565b3480156102b657600080fd5b50610107610a2e565b3480156102cb57600080fd5b506101c9600160a060020a0360043516610a41565b3480156102ec57600080fd5b50610107610a66565b34801561030157600080fd5b506101a0600160a060020a0360043516602435610a79565b34801561032557600080fd5b5061032e610bde565b604051808781526020018681526020018581526020018481526020018060200183600160a060020a0316600160a060020a03168152602001828103825284818151815260200191508051906020019080838360005b8381101561039b578181015183820152602001610383565b50505050905090810190601f1680156103c85780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b3480156103e757600080fd5b506101c9600160a060020a0360043581169060243516610c63565b34801561040e57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101a094369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375094975050843595505050506020820135600160a060020a031691604001359050610c90565b34801561053657600080fd5b506101a061110c565b34801561054b57600080fd5b506101a0600160a060020a0360043516611209565b606061057360013063ffffffff61134316565b905090565b600061058b60013063ffffffff6114f816565b15610606576040805160e560020a62461bcd02815260206004820152603e60248201527f4572726f723a20436f6e747261637420686173206265656e206465707265636160448201527f7465642c2063616e6e6f7420706572666f726d206f7065726174696f6e210000606482015290519081900360840190fd5b6106186001848463ffffffff61164b16565b15156106e0576040805160e560020a62461bcd02815260206004820152607560248201527f4572726f723a20556e61626c6520746f20617070726f766520616c6c6f77616e60448201527f636520666f72207370656e6465722e20506c6561736520656e7375726520737060648201527f656e646572206973206e6f74206e756c6c20616e6420646f6573206e6f74206860848201527f61766520612066726f7a656e2062616c616e63652e000000000000000000000060a482015290519081900360c40190fd5b50600192915050565b60006105736106ff60013063ffffffff611d1c16565b60019063ffffffff611dae16565b600061072060013063ffffffff6114f816565b1561079b576040805160e560020a62461bcd02815260206004820152603e60248201527f4572726f723a20436f6e747261637420686173206265656e206465707265636160448201527f7465642c2063616e6e6f7420706572666f726d206f7065726174696f6e210000606482015290519081900360840190fd5b6107f86107af60013063ffffffff611d1c16565b60408051808201909152600381527f307830000000000000000000000000000000000000000000000000000000000060208201526001919087908790879063ffffffff611ee616565b15156108385760405160e560020a62461bcd0281526004018080602001828103825260828152602001806153766082913960a00191505060405180910390fd5b5060019392505050565b600061057361085860013063ffffffff611d1c16565b60019063ffffffff6121ce16565b3360009081526020819052604081205460ff1615156108d1576040805160e560020a62461bcd02815260206004820152603960248201526000805160206154788339815191526044820152600080516020615336833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b600061094761093860013063ffffffff61222b16565b6001908463ffffffff6123a616565b92915050565b606061057360013063ffffffff61289716565b3360009081526020819052604081205460ff1615156109cb576040805160e560020a62461bcd02815260206004820152603960248201526000805160206154788339815191526044820152600080516020615336833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b606061057360013063ffffffff61292916565b6000610947610a5760013063ffffffff611d1c16565b6001908463ffffffff6129bb16565b606061057360013063ffffffff611d1c16565b6000610a8c60013063ffffffff6114f816565b15610b07576040805160e560020a62461bcd02815260206004820152603e60248201527f4572726f723a20436f6e747261637420686173206265656e206465707265636160448201527f7465642c2063616e6e6f7420706572666f726d206f7065726174696f6e210000606482015290519081900360840190fd5b610b62610b1b60013063ffffffff611d1c16565b60408051808201909152600381527f30783000000000000000000000000000000000000000000000000000000000006020820152600191908690869063ffffffff612b3f16565b15156106e0576040805160e560020a62461bcd02815260206004820152603e60248201527f4572726f723a20556e61626c6520746f207472616e736665722066756e64732e60448201527f20506c6561736520636865636b20796f757220706172616d65746572732e0000606482015290519081900360840190fd5b600080808060608180610bf860013063ffffffff61222b16565b9050610c0b60018263ffffffff612e0416565b610c1c60018363ffffffff612e9516565b610c2d60018463ffffffff612f2616565b610c3e60018563ffffffff612fb716565b610c4f60018663ffffffff61304816565b939b929a5090985096509094509092509050565b6000610c89610c7960013063ffffffff611d1c16565b600190858563ffffffff61316b16565b9392505050565b3360009081526020819052604081205460ff161515610cfb576040805160e560020a62461bcd02815260206004820152603960248201526000805160206154788339815191526044820152600080516020615336833981519152606482015290519081900360840190fd5b610d0c60018963ffffffff61332b16565b1515610d88576040805160e560020a62461bcd02815260206004820152603860248201527f4572726f723a20556e61626c6520746f2073657420746f6b656e206e616d652e60448201527f20506c6561736520636865636b20617267756d656e74732e0000000000000000606482015290519081900360840190fd5b610d9960018863ffffffff61358416565b1515610e15576040805160e560020a62461bcd02815260206004820152603a60248201527f4572726f723a20556e61626c6520746f2073657420746f6b656e2073796d626f60448201527f6c2e20506c6561736520636865636b20617267756d656e74732e000000000000606482015290519081900360840190fd5b610e2660018763ffffffff6135ff16565b1515610ea2576040805160e560020a62461bcd02815260206004820152603760248201527f4572726f723a20556e61626c6520746f2073657420746f6b656e20544c412e2060448201527f506c6561736520636865636b20617267756d656e74732e000000000000000000606482015290519081900360840190fd5b610eb360018663ffffffff61367d16565b1515610f2f576040805160e560020a62461bcd02815260206004820152603b60248201527f4572726f723a20556e61626c6520746f2073657420746f6b656e20766572736960448201527f6f6e2e20506c6561736520636865636b20617267756d656e74732e0000000000606482015290519081900360840190fd5b610f416001888663ffffffff6136fb16565b1515610fbd576040805160e560020a62461bcd02815260206004820152603c60248201527f4572726f723a20556e61626c6520746f2073657420746f6b656e20646563696d60448201527f616c732e20506c6561736520636865636b20617267756d656e74732e00000000606482015290519081900360840190fd5b610fce60018463ffffffff61392716565b151561104a576040805160e560020a62461bcd02815260206004820152603a60248201527f4572726f723a20556e61626c6520746f207365742066656520636f6e7472616360448201527f742e20506c6561736520636865636b20617267756d656e74732e000000000000606482015290519081900360840190fd5b61105c6001888463ffffffff613a3c16565b15156110fe576040805160e560020a62461bcd02815260206004820152604660248201527f4572726f723a20556e61626c6520746f2073657420667820555344206261736960448201527f7320706f696e747320726174652e20506c6561736520636865636b206172677560648201527f6d656e74732e0000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b506001979650505050505050565b3360009081526020819052604081205460ff161515611177576040805160e560020a62461bcd02815260206004820152603960248201526000805160206154788339815191526044820152600080516020615336833981519152606482015290519081900360840190fd5b61118860013063ffffffff613c2316565b1515611203576040805160e560020a62461bcd028152602060048201526024808201527f4572726f723a20556e61626c6520746f2064657072656361746520636f6e747260448201527f6163742100000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50600190565b3360009081526020819052604081205460ff161515611274576040805160e560020a62461bcd02815260206004820152603960248201526000805160206154788339815191526044820152600080516020615336833981519152606482015290519081900360840190fd5b600160a060020a03821615156112d4576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b606060008260405160200180807f746f6b656e2e6e616d6500000000000000000000000000000000000000000000815250600a0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106113d65780518252601f1990920191602091820191016113b7565b5181516020939093036101000a60001901801990911692169190911790526040805191909301819003812089547f986e791a000000000000000000000000000000000000000000000000000000008352600483018290529351909650600160a060020a03909316945063986e791a9350602480820193600093509182900301818387803b15801561146657600080fd5b505af115801561147a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156114a357600080fd5b8101908080516401000000008111156114bb57600080fd5b820160208101848111156114ce57600080fd5b81516401000000008111828201871017156114e857600080fd5b50909550505050505b5092915050565b6000808260405160200180807f6465706372656361746564000000000000000000000000000000000000000000815250600b0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b6020831061158a5780518252601f19909201916020918201910161156b565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547f7ae1cfca000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a039094169550637ae1cfca945060248083019491935090918290030181600087803b15801561161757600080fd5b505af115801561162b573d6000803e3d6000fd5b505050506040513d602081101561164157600080fd5b5051949350505050565b600060608180600160a060020a03861615156116d7576040805160e560020a62461bcd02815260206004820152602860248201527f4572726f723a20607370656e6465726020616464726573732063616e6e6f742060448201527f6265206e756c6c2e000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6116e18730611d1c565b92506116f787846116f28a8a613dc3565b613f31565b15611772576040805160e560020a62461bcd02815260206004820152603660248201527f4572726f723a205370656e646572206d757374206e6f7420686176652061206660448201527f726f7a656e2062616c616e6365206469726563746c7900000000000000000000606482015290519081900360840190fd5b8261177d8833613dc3565b6117878989613dc3565b60405160200180807f746f6b656e2e616c6c6f77616e63650000000000000000000000000000000000815250600f0184805190602001908083835b602083106117e15780518252601f1990920191602091820191016117c2565b6001836020036101000a03801982511681845116808217855250505050505090500183600160a060020a0316600160a060020a0316606060020a02815260140182600160a060020a0316600160a060020a0316606060020a02815260140193505050506040516020818303038152906040526040518082805190602001908083835b602083106118825780518252601f199092019160209182019101611863565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209150826118bc8833613dc3565b6040516020018080600080516020615356833981519152815250600d0183805190602001908083835b602083106119045780518252601f1990920191602091820191016118e5565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106119865780518252601f199092019160209182019101611967565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208d5460e060020a63bd02d0f5028452600484018a90529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b1580156119fd57600080fd5b505af1158015611a11573d6000803e3d6000fd5b505050506040513d6020811015611a2757600080fd5b50511580611a33575084155b1515611ad5576040805160e560020a62461bcd02815260206004820152605260248201527f4572726f723a20416c6c6f77616e6365206d757374206265207a65726f20283060448201527f29206265666f72652073657474696e6720616e207570646174656420616c6c6f60648201527f77616e636520666f72207370656e6465722e0000000000000000000000000000608482015290519081900360a40190fd5b86546040805160e060020a63bd02d0f50281526004810184905290518792600160a060020a03169163bd02d0f59160248083019260209291908290030181600087803b158015611b2457600080fd5b505af1158015611b38573d6000803e3d6000fd5b505050506040513d6020811015611b4e57600080fd5b50511015611bcc576040805160e560020a62461bcd02815260206004820152603860248201527f4572726f723a20416c6c6f77616e63652063616e6e6f7420657863656564206d60448201527f73672e73656e64657220746f6b656e2062616c616e63652e0000000000000000606482015290519081900360840190fd5b86546040805160e160020a637152429d02815260048101859052602481018890529051600160a060020a039092169163e2a4853a916044808201926020929091908290030181600087803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b505050506040513d6020811015611c4d57600080fd5b50511515611ccf576040805160e560020a62461bcd0281526020600482015260696024820152600080516020615438833981519152604482015260008051602061541883398151915260648201526000805160206153f8833981519152608482015260008051602061545883398151915260a482015290519081900360c40190fd5b604080518681529051600160a060020a0388169133917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259181900360200190a35060019695505050505050565b606060008260405160200180807f746f6b656e2e73796d626f6c0000000000000000000000000000000000000000815250600c0182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106113d65780518252601f1990920191602091820191016113b7565b6000808260405160200180807f746f6b656e2e737570706c790000000000000000000000000000000000000000815250600c0182805190602001908083835b60208310611e0c5780518252601f199092019160209182019101611ded565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310611e6f5780518252601f199092019160209182019101611e50565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b15801561161757600080fd5b60008080600160a060020a0386161515611f70576040805160e560020a62461bcd02815260206004820152602560248201527f4572726f723a2060746f602061646472657373206d757374206e6f742062652060448201527f6e756c6c2e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b611f7a893061222b565b9150611f878983876123a6565b9050611f9e8988611f998c8c8a613f98565b614030565b151561201a576040805160e560020a62461bcd02815260206004820152602d60248201527f4572726f723a20556e61626c6520746f20736574206163636f756e742073706560448201527f6e64696e6720616d6f756e742e00000000000000000000000000000000000000606482015290519081900360840190fd5b61202889898989898961435e565b15156120a4576040805160e560020a62461bcd02815260206004820152602b60248201527f4572726f723a20556e61626c6520746f207472616e736665722066756e64732060448201527f746f206163636f756e742e000000000000000000000000000000000000000000606482015290519081900360840190fd5b6120bb89898985856120b68f89613048565b61435e565b1515612137576040805160e560020a62461bcd02815260206004820152602f60248201527f4572726f723a20556e61626c6520746f207472616e736665722066656573207460448201527f6f2066656520636f6e74726163742e0000000000000000000000000000000000606482015290519081900360840190fd5b61214389898988614a26565b15156121bf576040805160e560020a62461bcd02815260206004820152602e60248201527f4572726f723a20556e61626c6520746f2075706461746520616c6c6f77616e6360448201527f6520666f72207370656e6465722e000000000000000000000000000000000000606482015290519081900360840190fd5b50600198975050505050505050565b6000808260405160200180807f746f6b656e2e646563696d616c73000000000000000000000000000000000000815250600e01828051906020019080838360208310611e0c5780518252601f199092019160209182019101611ded565b60008060008360405160200180807f6665652e6163636f756e74000000000000000000000000000000000000000000815250600b0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106122bf5780518252601f1990920191602091820191016122a0565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b15801561234c57600080fd5b505af1158015612360573d6000803e3d6000fd5b505050506040513d602081101561237657600080fd5b50519050600160a060020a038116151561239a5761239385614cb0565b925061239e565b8092505b505092915050565b8254604080517f6665652e6d617800000000000000000000000000000000000000000000000000602080830191909152600160a060020a03868116606060020a0260278401528351808403601b018152603b9093019384905282516000958695869586958695869594169363bd02d0f593918291908401908083835b602083106124415780518252601f199092019160209182019101612422565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b1580156124a257600080fd5b505af11580156124b6573d6000803e3d6000fd5b505050506040513d60208110156124cc57600080fd5b50518954604080517f6665652e6d696e00000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260278401528351808403601b018152603b909301938490528251959a509093169363bd02d0f5939192918291908401908083835b602083106125625780518252601f199092019160209182019101612543565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b1580156125c357600080fd5b505af11580156125d7573d6000803e3d6000fd5b505050506040513d60208110156125ed57600080fd5b50518954604080517f6665652e62707300000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260278401528351808403601b018152603b9093019384905282519599509093169363bd02d0f5939192918291908401908083835b602083106126835780518252601f199092019160209182019101612664565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b1580156126e457600080fd5b505af11580156126f8573d6000803e3d6000fd5b505050506040513d602081101561270e57600080fd5b50518954604080517f6665652e666c6174000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260288401528351808403601c018152603c9093019384905282519598509093169363bd02d0f5939192918291908401908083835b602083106127a45780518252601f199092019160209182019101612785565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b15801561280557600080fd5b505af1158015612819573d6000803e3d6000fd5b505050506040513d602081101561282f57600080fd5b505191506128658261285961271061284d8b8863ffffffff614de216565b9063ffffffff614e8116565b9063ffffffff614e9816565b9050848111156128775784955061288b565b838110156128875783955061288b565b8095505b50505050509392505050565b606060008260405160200180807f746f6b656e2e76657273696f6e00000000000000000000000000000000000000815250600d0182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106113d65780518252601f1990920191602091820191016113b7565b606060008260405160200180807f746f6b656e2e746c61000000000000000000000000000000000000000000000081525060090182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106113d65780518252601f1990920191602091820191016113b7565b600080836129c98685613dc3565b6040516020018080600080516020615356833981519152815250600d0183805190602001908083835b60208310612a115780518252601f1990920191602091820191016129f2565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310612a935780518252601f199092019160209182019101612a74565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b158015612b0a57600080fd5b505af1158015612b1e573d6000803e3d6000fd5b505050506040513d6020811015612b3457600080fd5b505195945050505050565b60008080600160a060020a0386161515612bc9576040805160e560020a62461bcd02815260206004820152602360248201527f4572726f723a2060746f6020616464726573732063616e6e6f74206265206e7560448201527f6c6c2e0000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008511612c47576040805160e560020a62461bcd02815260206004820152602960248201527f4572726f723a2060616d6f756e7460206d75737420626520677265617465722060448201527f7468616e207a65726f0000000000000000000000000000000000000000000000606482015290519081900360840190fd5b612c51883061222b565b9150612c5e8883876123a6565b9050612c708833611f998b8b8a613f98565b1515612cec576040805160e560020a62461bcd02815260206004820152603160248201527f4572726f723a20556e61626c6520746f20736574207370656e64696e6720616d60448201527f6f756e7420666f72206163636f756e742e000000000000000000000000000000606482015290519081900360840190fd5b612cfa88883389898961435e565b1515612d76576040805160e560020a62461bcd02815260206004820152602b60248201527f4572726f723a20556e61626c6520746f207472616e736665722066756e64732060448201527f746f206163636f756e742e000000000000000000000000000000000000000000606482015290519081900360840190fd5b612d8888883385856120b68e89613048565b15156110fe576040805160e560020a62461bcd02815260206004820152602f60248201527f4572726f723a20556e61626c6520746f207472616e736665722066656573207460448201527f6f2066656520636f6e74726163742e0000000000000000000000000000000000606482015290519081900360840190fd5b6000808260405160200180807f6665652e6270730000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b6000808260405160200180807f6665652e6d696e0000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b6000808260405160200180807f6665652e6d61780000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b6000808260405160200180807f6665652e666c617400000000000000000000000000000000000000000000000081525060080182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b606060008260405160200180807f6665652e6d73670000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106130db5780518252601f1990920191602091820191016130bc565b5181516020939093036101000a60001901801990911692169190911790526040805191909301819003812089547fc031a180000000000000000000000000000000000000000000000000000000008352600483018290529351909650600160a060020a03909316945063c031a1809350602480820193600093509182900301818387803b15801561146657600080fd5b600080846131798786613dc3565b6131838886613dc3565b60405160200180807f746f6b656e2e616c6c6f77616e63650000000000000000000000000000000000815250600f0184805190602001908083835b602083106131dd5780518252601f1990920191602091820191016131be565b6001836020036101000a03801982511681845116808217855250505050505090500183600160a060020a0316600160a060020a0316606060020a02815260140182600160a060020a0316600160a060020a0316606060020a02815260140193505050506040516020818303038152906040526040518082805190602001908083835b6020831061327e5780518252601f19909201916020918201910161325f565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208c5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b1580156132f557600080fd5b505af1158015613309573d6000803e3d6000fd5b505050506040513d602081101561331f57600080fd5b50519695505050505050565b604080517f746f6b656e2e6e616d6500000000000000000000000000000000000000000000602080830191909152606060020a3002602a8301528251601e818403018152603e909201928390528151600093849392909182918401908083835b602083106133aa5780518252601f19909201916020918201910161338b565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547f6e89955000000000000000000000000000000000000000000000000000000000845260048401828152602485019687528b5160448601528b51929950600160a060020a039091169750636e899550965088958b9550909390926064909101919085019080838360005b8381101561345557818101518382015260200161343d565b50505050905090810190601f1680156134825780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b1580156134a257600080fd5b505af11580156134b6573d6000803e3d6000fd5b505050506040513d60208110156134cc57600080fd5b50511515610838576040805160e560020a62461bcd028152602060048201526068602482015260008051602061543883398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b604080517f746f6b656e2e73796d626f6c0000000000000000000000000000000000000000602080830191909152606060020a3002602c83015282518083038201815291830192839052815160009384939290918291840190808383602083106133aa5780518252601f19909201916020918201910161338b565b604080517f746f6b656e2e746c610000000000000000000000000000000000000000000000602080830191909152606060020a300260298301528251601d818403018152603d90920192839052815160009384939290918291840190808383602083106133aa5780518252601f19909201916020918201910161338b565b604080517f746f6b656e2e76657273696f6e00000000000000000000000000000000000000602080830191909152606060020a3002602d83015282516021818403018152604190920192839052815160009384939290918291840190808383602083106133aa5780518252601f19909201916020918201910161338b565b6000808360405160200180807f746f6b656e2e646563696d616c73000000000000000000000000000000000000815250600e0182805190602001908083835b602083106137595780518252601f19909201916020918201910161373a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083106137bc5780518252601f19909201916020918201910161379d565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b5460e160020a637152429d02845260048401829052602484018b90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b15801561383a57600080fd5b505af115801561384e573d6000803e3d6000fd5b505050506040513d602081101561386457600080fd5b5051151561391c576040805160e560020a62461bcd028152602060048201526068602482015260008051602061543883398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b506001949350505050565b604080517f6665652e6163636f756e74000000000000000000000000000000000000000000602080830191909152606060020a3002602b8301528251601f818403018152603f909201928390528151600093849392909182918401908083835b602083106139a65780518252601f199092019160209182019101613987565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547fca446dd900000000000000000000000000000000000000000000000000000000845260048401829052600160a060020a038b81166024860152955191985094909416955063ca446dd9945060448083019491935090918290030181600087803b1580156134a257600080fd5b6000808360405160200180807f66782e7573642e72617465000000000000000000000000000000000000000000815250600b0182805190602001908083835b60208310613a9a5780518252601f199092019160209182019101613a7b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310613afd5780518252601f199092019160209182019101613ade565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b5460e160020a637152429d02845260048401829052602484018b90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b158015613b7b57600080fd5b505af1158015613b8f573d6000803e3d6000fd5b505050506040513d6020811015613ba557600080fd5b5051151561391c576040805160e560020a62461bcd02815260206004820152603060248201527f4572726f723a20556e61626c6520746f20757064617465206163636f756e742060448201527f7370656e64696e6720706572696f642e00000000000000000000000000000000606482015290519081900360840190fd5b600080600160a060020a0383161515613cac576040805160e560020a62461bcd02815260206004820152602760248201527f4572726f723a2063616e6e6f74206465707265636174652061206e756c6c206160448201527f6464726573732e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b604080517f6465706372656361746564000000000000000000000000000000000000000000602080830191909152606060020a600160a060020a03871602602b8301528251601f818403018152603f90920192839052815191929182918401908083835b60208310613d2f5780518252601f199092019160209182019101613d10565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547fabfdcced00000000000000000000000000000000000000000000000000000000845260048401829052600160248501529451909750600160a060020a03909416955063abfdcced945060448083019491935090918290030181600087803b1580156134a257600080fd5b60008060008360405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310613e575780518252601f199092019160209182019101613e38565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015613ee457600080fd5b505af1158015613ef8573d6000803e3d6000fd5b505050506040513d6020811015613f0e57600080fd5b50519050600160a060020a03811615613f295780925061239e565b83925061239e565b60008083613f3f8685613dc3565b60405160200180807f746f6b656e2e66726f7a656e0000000000000000000000000000000000000000815250600c01838051906020019080838360208310612a115780518252601f1990920191602091820191016129f2565b600080600080613fdd876040805190810160405280600481526020017f55534478000000000000000000000000000000000000000000000000000000008152506121ce565b9250613fe987876121ce565b915061402582600a0a61284d85600a0a61401961271061284d61400c8e8e614f1b565b8c9063ffffffff614de216565b9063ffffffff614de216565b979650505050505050565b600080600061403f8686614f78565b15156140bb576040805160e560020a62461bcd02815260206004820152603060248201527f4572726f723a20556e61626c6520746f20757064617465206163636f756e742060448201527f7370656e64696e6720706572696f642e00000000000000000000000000000000606482015290519081900360840190fd5b6140c984612859888861505b565b9150816140d687876150fd565b1015614152576040805160e560020a62461bcd02815260206004820152603360248201527f4572726f723a204163636f756e742063616e6e6f74206578636565642069747360448201527f206461696c79207370656e64206c696d69742e00000000000000000000000000606482015290519081900360840190fd5b8461415d878761518e565b60405160200180807f6163636f756e742e7370656e64696e672e616d6f756e7400000000000000000081525060170183600160a060020a0316600160a060020a0316606060020a028152601401828152602001925050506040516020818303038152906040526040518082805190602001908083835b602083106141f25780518252601f1990920191602091820191016141d3565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208c5460e160020a637152429d02845260048401829052602484018a90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b15801561427057600080fd5b505af1158015614284573d6000803e3d6000fd5b505050506040513d602081101561429a57600080fd5b50511515614352576040805160e560020a62461bcd028152602060048201526068602482015260008051602061543883398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b50600195945050505050565b60008080600160a060020a03861615156143e8576040805160e560020a62461bcd02815260206004820152602560248201527f4572726f723a2060746f602061646472657373206d757374206e6f742062652060448201527f6e756c6c2e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b876143f38a89613dc3565b6040516020018080600080516020615356833981519152815250600d0183805190602001908083835b6020831061443b5780518252601f19909201916020918201910161441c565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106144bd5780518252601f19909201916020918201910161449e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209150876144f78a88613dc3565b6040516020018080600080516020615356833981519152815250600d0183805190602001908083835b6020831061453f5780518252601f199092019160209182019101614520565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106145c15780518252601f1990920191602091820191016145a2565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208f5460e060020a63bd02d0f5028452600484018a90529451909750600160a060020a03909416955063e2a4853a9450879361467c93508b92879263bd02d0f5926024808401938290030181600087803b15801561464457600080fd5b505af1158015614658573d6000803e3d6000fd5b505050506040513d602081101561466e57600080fd5b50519063ffffffff61521f16565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b1580156146c457600080fd5b505af11580156146d8573d6000803e3d6000fd5b505050506040513d60208110156146ee57600080fd5b50511515614770576040805160e560020a62461bcd0281526020600482015260696024820152600080516020615438833981519152604482015260008051602061541883398151915260648201526000805160206153f8833981519152608482015260008051602061545883398151915260a482015290519081900360c40190fd5b88546040805160e060020a63bd02d0f5028152600481018490529051600160a060020a039092169163e2a4853a918491614807918a91869163bd02d0f59160248083019260209291908290030181600087803b1580156147cf57600080fd5b505af11580156147e3573d6000803e3d6000fd5b505050506040513d60208110156147f957600080fd5b50519063ffffffff614e9816565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b15801561484f57600080fd5b505af1158015614863573d6000803e3d6000fd5b505050506040513d602081101561487957600080fd5b505115156148fb576040805160e560020a62461bcd0281526020600482015260696024820152600080516020615438833981519152604482015260008051602061541883398151915260648201526000805160206153f8833981519152608482015260008051602061545883398151915260a482015290519081900360c40190fd5b85600160a060020a031687600160a060020a03167f6f3dcde00ed34d4f404b335a65d18fb4adf74f5b817aa46f5d7c4f05c6d1e96e8a8888604051808060200184815260200180602001838103835286818151815260200191508051906020019080838360005b8381101561497a578181015183820152602001614962565b50505050905090810190601f1680156149a75780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156149da5781810151838201526020016149c2565b50505050905090810190601f168015614a075780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a350600198975050505050505050565b60008084614a348786613dc3565b614a3e8833613dc3565b60405160200180807f746f6b656e2e616c6c6f77616e63650000000000000000000000000000000000815250600f0184805190602001908083835b60208310614a985780518252601f199092019160209182019101614a79565b6001836020036101000a03801982511681845116808217855250505050505090500183600160a060020a0316600160a060020a0316606060020a02815260140182600160a060020a0316600160a060020a0316606060020a02815260140193505050506040516020818303038152906040526040518082805190602001908083835b60208310614b395780518252601f199092019160209182019101614b1a565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208c5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063e2a4853a94508693614bbc93508992879263bd02d0f5926024808401938290030181600087803b15801561464457600080fd5b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015614c0457600080fd5b505af1158015614c18573d6000803e3d6000fd5b505050506040513d6020811015614c2e57600080fd5b50511515614352576040805160e560020a62461bcd0281526020600482015260696024820152600080516020615438833981519152604482015260008051602061541883398151915260648201526000805160206153f8833981519152608482015260008051602061545883398151915260a482015290519081900360c40190fd5b60008060405160200180807f6665652e636f6e74726163742e6d61737465720000000000000000000000000081525060130190506040516020818303038152906040526040518082805190602001908083835b60208310614d225780518252601f199092019160209182019101614d03565b51815160209384036101000a60001901801990921691161790526040805192909401829003822089547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015614daf57600080fd5b505af1158015614dc3573d6000803e3d6000fd5b505050506040513d6020811015614dd957600080fd5b50519392505050565b600080831515614df557600091506114f1565b50828202828482811515614e0557fe5b0414610c89576040805160e560020a62461bcd02815260206004820152602760248201527f4572726f723a20556e73616665206d756c7469706c69636174696f6e206f706560448201527f726174696f6e2100000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000808284811515614e8f57fe5b04949350505050565b600082820183811015610c89576040805160e560020a62461bcd02815260206004820152602160248201527f4572726f723a20556e73616665206164646974696f6e206f7065726174696f6e60448201527f2100000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000808260405160200180807f66782e7573642e72617465000000000000000000000000000000000000000000815250600b01828051906020019080838360208310611e0c5780518252601f199092019160209182019101611ded565b6000806000614f87858561518e565b915042821115614f9a576001925061239e565b5062015180614fd68585614fd1614fc48561401960016128598361284d428d63ffffffff61521f16565b869063ffffffff614e9816565b6152a4565b1515615052576040805160e560020a62461bcd02815260206004820152603060248201527f4572726f723a20556e61626c6520746f20757064617465206163636f756e742060448201527f7370656e64696e6720706572696f642e00000000000000000000000000000000606482015290519081900360840190fd5b6001925061239e565b60008082615069858561518e565b60405160200180807f6163636f756e742e7370656e64696e672e616d6f756e7400000000000000000081525060170183600160a060020a0316600160a060020a0316606060020a0281526014018281526020019250505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b6000808260405160200180807f6163636f756e742e7370656e64696e672e6c696d69740000000000000000000081525060160182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b6000808260405160200180807f6c696d69742e7370656e64696e672e706572696f64000000000000000000000081525060150182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b60008282111561529e576040805160e560020a62461bcd028152602060048201526024808201527f4572726f723a20556e73616665207375627472616374696f6e206f706572617460448201527f696f6e2100000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50900390565b6000808360405160200180807f6c696d69742e7370656e64696e672e706572696f64000000000000000000000081525060150182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106137bc5780518252601f19909201916020918201910161379d560020616c6c6f7765642062792074686520636f6e74726163742e00000000000000746f6b656e2e62616c616e6365000000000000000000000000000000000000004572726f723a20556e61626c6520746f207472616e736665722066756e64732e20506c6561736520636865636b20796f757220706172616d657465727320616e6420656e7375726520746865207370656e646572206861732074686520617070726f76656420616d6f756e74206f662066756e647320746f207472616e736665722e6c6c6f776564207065726d697373696f6e7320776974682073746f726167652075652e20506c6561736520656e7375726520636f6e74726163742068617320614572726f723a20556e61626c6520746f207365742073746f726167652076616c636f6e74726163742e00000000000000000000000000000000000000000000004572726f723a205472616e73616374696f6e2073656e646572206973206e6f74a165627a7a723058200c9617c9915829e5d747c0f9c842b737ef9886fd2b0e028949cdaf19f2e3bb890029", + "deployedBytecode": "0x6080604052600436106100ed5763ffffffff60e060020a60003504166306fdde0381146100f2578063095ea7b31461017c57806318160ddd146101b457806323b872dd146101db578063313ce567146102055780634bbc142c1461021a57806352238fdd1461023b57806354fd4d5014610253578063666a342714610268578063666e1b39146102895780636b0235a0146102aa57806370a08231146102bf57806395d89b41146102e0578063a9059cbb146102f5578063be6fc18114610319578063dd62ed3e146103db578063e052f0c814610402578063ebe6ba071461052a578063f2fde38b1461053f575b600080fd5b3480156100fe57600080fd5b50610107610560565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610141578181015183820152602001610129565b50505050905090810190601f16801561016e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561018857600080fd5b506101a0600160a060020a0360043516602435610578565b604080519115158252519081900360200190f35b3480156101c057600080fd5b506101c96106e9565b60408051918252519081900360200190f35b3480156101e757600080fd5b506101a0600160a060020a036004358116906024351660443561070d565b34801561021157600080fd5b506101c9610842565b34801561022657600080fd5b506101a0600160a060020a0360043516610866565b34801561024757600080fd5b506101c9600435610922565b34801561025f57600080fd5b5061010761094d565b34801561027457600080fd5b506101a0600160a060020a0360043516610960565b34801561029557600080fd5b506101a0600160a060020a0360043516610a19565b3480156102b657600080fd5b50610107610a2e565b3480156102cb57600080fd5b506101c9600160a060020a0360043516610a41565b3480156102ec57600080fd5b50610107610a66565b34801561030157600080fd5b506101a0600160a060020a0360043516602435610a79565b34801561032557600080fd5b5061032e610bde565b604051808781526020018681526020018581526020018481526020018060200183600160a060020a0316600160a060020a03168152602001828103825284818151815260200191508051906020019080838360005b8381101561039b578181015183820152602001610383565b50505050905090810190601f1680156103c85780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b3480156103e757600080fd5b506101c9600160a060020a0360043581169060243516610c63565b34801561040e57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101a094369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375094975050843595505050506020820135600160a060020a031691604001359050610c90565b34801561053657600080fd5b506101a061110c565b34801561054b57600080fd5b506101a0600160a060020a0360043516611209565b606061057360013063ffffffff61134316565b905090565b600061058b60013063ffffffff6114f816565b15610606576040805160e560020a62461bcd02815260206004820152603e60248201527f4572726f723a20436f6e747261637420686173206265656e206465707265636160448201527f7465642c2063616e6e6f7420706572666f726d206f7065726174696f6e210000606482015290519081900360840190fd5b6106186001848463ffffffff61164b16565b15156106e0576040805160e560020a62461bcd02815260206004820152607560248201527f4572726f723a20556e61626c6520746f20617070726f766520616c6c6f77616e60448201527f636520666f72207370656e6465722e20506c6561736520656e7375726520737060648201527f656e646572206973206e6f74206e756c6c20616e6420646f6573206e6f74206860848201527f61766520612066726f7a656e2062616c616e63652e000000000000000000000060a482015290519081900360c40190fd5b50600192915050565b60006105736106ff60013063ffffffff611d1c16565b60019063ffffffff611dae16565b600061072060013063ffffffff6114f816565b1561079b576040805160e560020a62461bcd02815260206004820152603e60248201527f4572726f723a20436f6e747261637420686173206265656e206465707265636160448201527f7465642c2063616e6e6f7420706572666f726d206f7065726174696f6e210000606482015290519081900360840190fd5b6107f86107af60013063ffffffff611d1c16565b60408051808201909152600381527f307830000000000000000000000000000000000000000000000000000000000060208201526001919087908790879063ffffffff611ee616565b15156108385760405160e560020a62461bcd0281526004018080602001828103825260828152602001806153766082913960a00191505060405180910390fd5b5060019392505050565b600061057361085860013063ffffffff611d1c16565b60019063ffffffff6121ce16565b3360009081526020819052604081205460ff1615156108d1576040805160e560020a62461bcd02815260206004820152603960248201526000805160206154788339815191526044820152600080516020615336833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b600061094761093860013063ffffffff61222b16565b6001908463ffffffff6123a616565b92915050565b606061057360013063ffffffff61289716565b3360009081526020819052604081205460ff1615156109cb576040805160e560020a62461bcd02815260206004820152603960248201526000805160206154788339815191526044820152600080516020615336833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b606061057360013063ffffffff61292916565b6000610947610a5760013063ffffffff611d1c16565b6001908463ffffffff6129bb16565b606061057360013063ffffffff611d1c16565b6000610a8c60013063ffffffff6114f816565b15610b07576040805160e560020a62461bcd02815260206004820152603e60248201527f4572726f723a20436f6e747261637420686173206265656e206465707265636160448201527f7465642c2063616e6e6f7420706572666f726d206f7065726174696f6e210000606482015290519081900360840190fd5b610b62610b1b60013063ffffffff611d1c16565b60408051808201909152600381527f30783000000000000000000000000000000000000000000000000000000000006020820152600191908690869063ffffffff612b3f16565b15156106e0576040805160e560020a62461bcd02815260206004820152603e60248201527f4572726f723a20556e61626c6520746f207472616e736665722066756e64732e60448201527f20506c6561736520636865636b20796f757220706172616d65746572732e0000606482015290519081900360840190fd5b600080808060608180610bf860013063ffffffff61222b16565b9050610c0b60018263ffffffff612e0416565b610c1c60018363ffffffff612e9516565b610c2d60018463ffffffff612f2616565b610c3e60018563ffffffff612fb716565b610c4f60018663ffffffff61304816565b939b929a5090985096509094509092509050565b6000610c89610c7960013063ffffffff611d1c16565b600190858563ffffffff61316b16565b9392505050565b3360009081526020819052604081205460ff161515610cfb576040805160e560020a62461bcd02815260206004820152603960248201526000805160206154788339815191526044820152600080516020615336833981519152606482015290519081900360840190fd5b610d0c60018963ffffffff61332b16565b1515610d88576040805160e560020a62461bcd02815260206004820152603860248201527f4572726f723a20556e61626c6520746f2073657420746f6b656e206e616d652e60448201527f20506c6561736520636865636b20617267756d656e74732e0000000000000000606482015290519081900360840190fd5b610d9960018863ffffffff61358416565b1515610e15576040805160e560020a62461bcd02815260206004820152603a60248201527f4572726f723a20556e61626c6520746f2073657420746f6b656e2073796d626f60448201527f6c2e20506c6561736520636865636b20617267756d656e74732e000000000000606482015290519081900360840190fd5b610e2660018763ffffffff6135ff16565b1515610ea2576040805160e560020a62461bcd02815260206004820152603760248201527f4572726f723a20556e61626c6520746f2073657420746f6b656e20544c412e2060448201527f506c6561736520636865636b20617267756d656e74732e000000000000000000606482015290519081900360840190fd5b610eb360018663ffffffff61367d16565b1515610f2f576040805160e560020a62461bcd02815260206004820152603b60248201527f4572726f723a20556e61626c6520746f2073657420746f6b656e20766572736960448201527f6f6e2e20506c6561736520636865636b20617267756d656e74732e0000000000606482015290519081900360840190fd5b610f416001888663ffffffff6136fb16565b1515610fbd576040805160e560020a62461bcd02815260206004820152603c60248201527f4572726f723a20556e61626c6520746f2073657420746f6b656e20646563696d60448201527f616c732e20506c6561736520636865636b20617267756d656e74732e00000000606482015290519081900360840190fd5b610fce60018463ffffffff61392716565b151561104a576040805160e560020a62461bcd02815260206004820152603a60248201527f4572726f723a20556e61626c6520746f207365742066656520636f6e7472616360448201527f742e20506c6561736520636865636b20617267756d656e74732e000000000000606482015290519081900360840190fd5b61105c6001888463ffffffff613a3c16565b15156110fe576040805160e560020a62461bcd02815260206004820152604660248201527f4572726f723a20556e61626c6520746f2073657420667820555344206261736960448201527f7320706f696e747320726174652e20506c6561736520636865636b206172677560648201527f6d656e74732e0000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b506001979650505050505050565b3360009081526020819052604081205460ff161515611177576040805160e560020a62461bcd02815260206004820152603960248201526000805160206154788339815191526044820152600080516020615336833981519152606482015290519081900360840190fd5b61118860013063ffffffff613c2316565b1515611203576040805160e560020a62461bcd028152602060048201526024808201527f4572726f723a20556e61626c6520746f2064657072656361746520636f6e747260448201527f6163742100000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50600190565b3360009081526020819052604081205460ff161515611274576040805160e560020a62461bcd02815260206004820152603960248201526000805160206154788339815191526044820152600080516020615336833981519152606482015290519081900360840190fd5b600160a060020a03821615156112d4576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b606060008260405160200180807f746f6b656e2e6e616d6500000000000000000000000000000000000000000000815250600a0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106113d65780518252601f1990920191602091820191016113b7565b5181516020939093036101000a60001901801990911692169190911790526040805191909301819003812089547f986e791a000000000000000000000000000000000000000000000000000000008352600483018290529351909650600160a060020a03909316945063986e791a9350602480820193600093509182900301818387803b15801561146657600080fd5b505af115801561147a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156114a357600080fd5b8101908080516401000000008111156114bb57600080fd5b820160208101848111156114ce57600080fd5b81516401000000008111828201871017156114e857600080fd5b50909550505050505b5092915050565b6000808260405160200180807f6465706372656361746564000000000000000000000000000000000000000000815250600b0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b6020831061158a5780518252601f19909201916020918201910161156b565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547f7ae1cfca000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a039094169550637ae1cfca945060248083019491935090918290030181600087803b15801561161757600080fd5b505af115801561162b573d6000803e3d6000fd5b505050506040513d602081101561164157600080fd5b5051949350505050565b600060608180600160a060020a03861615156116d7576040805160e560020a62461bcd02815260206004820152602860248201527f4572726f723a20607370656e6465726020616464726573732063616e6e6f742060448201527f6265206e756c6c2e000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6116e18730611d1c565b92506116f787846116f28a8a613dc3565b613f31565b15611772576040805160e560020a62461bcd02815260206004820152603660248201527f4572726f723a205370656e646572206d757374206e6f7420686176652061206660448201527f726f7a656e2062616c616e6365206469726563746c7900000000000000000000606482015290519081900360840190fd5b8261177d8833613dc3565b6117878989613dc3565b60405160200180807f746f6b656e2e616c6c6f77616e63650000000000000000000000000000000000815250600f0184805190602001908083835b602083106117e15780518252601f1990920191602091820191016117c2565b6001836020036101000a03801982511681845116808217855250505050505090500183600160a060020a0316600160a060020a0316606060020a02815260140182600160a060020a0316600160a060020a0316606060020a02815260140193505050506040516020818303038152906040526040518082805190602001908083835b602083106118825780518252601f199092019160209182019101611863565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209150826118bc8833613dc3565b6040516020018080600080516020615356833981519152815250600d0183805190602001908083835b602083106119045780518252601f1990920191602091820191016118e5565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106119865780518252601f199092019160209182019101611967565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208d5460e060020a63bd02d0f5028452600484018a90529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b1580156119fd57600080fd5b505af1158015611a11573d6000803e3d6000fd5b505050506040513d6020811015611a2757600080fd5b50511580611a33575084155b1515611ad5576040805160e560020a62461bcd02815260206004820152605260248201527f4572726f723a20416c6c6f77616e6365206d757374206265207a65726f20283060448201527f29206265666f72652073657474696e6720616e207570646174656420616c6c6f60648201527f77616e636520666f72207370656e6465722e0000000000000000000000000000608482015290519081900360a40190fd5b86546040805160e060020a63bd02d0f50281526004810184905290518792600160a060020a03169163bd02d0f59160248083019260209291908290030181600087803b158015611b2457600080fd5b505af1158015611b38573d6000803e3d6000fd5b505050506040513d6020811015611b4e57600080fd5b50511015611bcc576040805160e560020a62461bcd02815260206004820152603860248201527f4572726f723a20416c6c6f77616e63652063616e6e6f7420657863656564206d60448201527f73672e73656e64657220746f6b656e2062616c616e63652e0000000000000000606482015290519081900360840190fd5b86546040805160e160020a637152429d02815260048101859052602481018890529051600160a060020a039092169163e2a4853a916044808201926020929091908290030181600087803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b505050506040513d6020811015611c4d57600080fd5b50511515611ccf576040805160e560020a62461bcd0281526020600482015260696024820152600080516020615438833981519152604482015260008051602061541883398151915260648201526000805160206153f8833981519152608482015260008051602061545883398151915260a482015290519081900360c40190fd5b604080518681529051600160a060020a0388169133917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259181900360200190a35060019695505050505050565b606060008260405160200180807f746f6b656e2e73796d626f6c0000000000000000000000000000000000000000815250600c0182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106113d65780518252601f1990920191602091820191016113b7565b6000808260405160200180807f746f6b656e2e737570706c790000000000000000000000000000000000000000815250600c0182805190602001908083835b60208310611e0c5780518252601f199092019160209182019101611ded565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310611e6f5780518252601f199092019160209182019101611e50565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b15801561161757600080fd5b60008080600160a060020a0386161515611f70576040805160e560020a62461bcd02815260206004820152602560248201527f4572726f723a2060746f602061646472657373206d757374206e6f742062652060448201527f6e756c6c2e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b611f7a893061222b565b9150611f878983876123a6565b9050611f9e8988611f998c8c8a613f98565b614030565b151561201a576040805160e560020a62461bcd02815260206004820152602d60248201527f4572726f723a20556e61626c6520746f20736574206163636f756e742073706560448201527f6e64696e6720616d6f756e742e00000000000000000000000000000000000000606482015290519081900360840190fd5b61202889898989898961435e565b15156120a4576040805160e560020a62461bcd02815260206004820152602b60248201527f4572726f723a20556e61626c6520746f207472616e736665722066756e64732060448201527f746f206163636f756e742e000000000000000000000000000000000000000000606482015290519081900360840190fd5b6120bb89898985856120b68f89613048565b61435e565b1515612137576040805160e560020a62461bcd02815260206004820152602f60248201527f4572726f723a20556e61626c6520746f207472616e736665722066656573207460448201527f6f2066656520636f6e74726163742e0000000000000000000000000000000000606482015290519081900360840190fd5b61214389898988614a26565b15156121bf576040805160e560020a62461bcd02815260206004820152602e60248201527f4572726f723a20556e61626c6520746f2075706461746520616c6c6f77616e6360448201527f6520666f72207370656e6465722e000000000000000000000000000000000000606482015290519081900360840190fd5b50600198975050505050505050565b6000808260405160200180807f746f6b656e2e646563696d616c73000000000000000000000000000000000000815250600e01828051906020019080838360208310611e0c5780518252601f199092019160209182019101611ded565b60008060008360405160200180807f6665652e6163636f756e74000000000000000000000000000000000000000000815250600b0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106122bf5780518252601f1990920191602091820191016122a0565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b15801561234c57600080fd5b505af1158015612360573d6000803e3d6000fd5b505050506040513d602081101561237657600080fd5b50519050600160a060020a038116151561239a5761239385614cb0565b925061239e565b8092505b505092915050565b8254604080517f6665652e6d617800000000000000000000000000000000000000000000000000602080830191909152600160a060020a03868116606060020a0260278401528351808403601b018152603b9093019384905282516000958695869586958695869594169363bd02d0f593918291908401908083835b602083106124415780518252601f199092019160209182019101612422565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b1580156124a257600080fd5b505af11580156124b6573d6000803e3d6000fd5b505050506040513d60208110156124cc57600080fd5b50518954604080517f6665652e6d696e00000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260278401528351808403601b018152603b909301938490528251959a509093169363bd02d0f5939192918291908401908083835b602083106125625780518252601f199092019160209182019101612543565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b1580156125c357600080fd5b505af11580156125d7573d6000803e3d6000fd5b505050506040513d60208110156125ed57600080fd5b50518954604080517f6665652e62707300000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260278401528351808403601b018152603b9093019384905282519599509093169363bd02d0f5939192918291908401908083835b602083106126835780518252601f199092019160209182019101612664565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b1580156126e457600080fd5b505af11580156126f8573d6000803e3d6000fd5b505050506040513d602081101561270e57600080fd5b50518954604080517f6665652e666c6174000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260288401528351808403601c018152603c9093019384905282519598509093169363bd02d0f5939192918291908401908083835b602083106127a45780518252601f199092019160209182019101612785565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b15801561280557600080fd5b505af1158015612819573d6000803e3d6000fd5b505050506040513d602081101561282f57600080fd5b505191506128658261285961271061284d8b8863ffffffff614de216565b9063ffffffff614e8116565b9063ffffffff614e9816565b9050848111156128775784955061288b565b838110156128875783955061288b565b8095505b50505050509392505050565b606060008260405160200180807f746f6b656e2e76657273696f6e00000000000000000000000000000000000000815250600d0182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106113d65780518252601f1990920191602091820191016113b7565b606060008260405160200180807f746f6b656e2e746c61000000000000000000000000000000000000000000000081525060090182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106113d65780518252601f1990920191602091820191016113b7565b600080836129c98685613dc3565b6040516020018080600080516020615356833981519152815250600d0183805190602001908083835b60208310612a115780518252601f1990920191602091820191016129f2565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310612a935780518252601f199092019160209182019101612a74565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b158015612b0a57600080fd5b505af1158015612b1e573d6000803e3d6000fd5b505050506040513d6020811015612b3457600080fd5b505195945050505050565b60008080600160a060020a0386161515612bc9576040805160e560020a62461bcd02815260206004820152602360248201527f4572726f723a2060746f6020616464726573732063616e6e6f74206265206e7560448201527f6c6c2e0000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008511612c47576040805160e560020a62461bcd02815260206004820152602960248201527f4572726f723a2060616d6f756e7460206d75737420626520677265617465722060448201527f7468616e207a65726f0000000000000000000000000000000000000000000000606482015290519081900360840190fd5b612c51883061222b565b9150612c5e8883876123a6565b9050612c708833611f998b8b8a613f98565b1515612cec576040805160e560020a62461bcd02815260206004820152603160248201527f4572726f723a20556e61626c6520746f20736574207370656e64696e6720616d60448201527f6f756e7420666f72206163636f756e742e000000000000000000000000000000606482015290519081900360840190fd5b612cfa88883389898961435e565b1515612d76576040805160e560020a62461bcd02815260206004820152602b60248201527f4572726f723a20556e61626c6520746f207472616e736665722066756e64732060448201527f746f206163636f756e742e000000000000000000000000000000000000000000606482015290519081900360840190fd5b612d8888883385856120b68e89613048565b15156110fe576040805160e560020a62461bcd02815260206004820152602f60248201527f4572726f723a20556e61626c6520746f207472616e736665722066656573207460448201527f6f2066656520636f6e74726163742e0000000000000000000000000000000000606482015290519081900360840190fd5b6000808260405160200180807f6665652e6270730000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b6000808260405160200180807f6665652e6d696e0000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b6000808260405160200180807f6665652e6d61780000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b6000808260405160200180807f6665652e666c617400000000000000000000000000000000000000000000000081525060080182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b606060008260405160200180807f6665652e6d73670000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106130db5780518252601f1990920191602091820191016130bc565b5181516020939093036101000a60001901801990911692169190911790526040805191909301819003812089547fc031a180000000000000000000000000000000000000000000000000000000008352600483018290529351909650600160a060020a03909316945063c031a1809350602480820193600093509182900301818387803b15801561146657600080fd5b600080846131798786613dc3565b6131838886613dc3565b60405160200180807f746f6b656e2e616c6c6f77616e63650000000000000000000000000000000000815250600f0184805190602001908083835b602083106131dd5780518252601f1990920191602091820191016131be565b6001836020036101000a03801982511681845116808217855250505050505090500183600160a060020a0316600160a060020a0316606060020a02815260140182600160a060020a0316600160a060020a0316606060020a02815260140193505050506040516020818303038152906040526040518082805190602001908083835b6020831061327e5780518252601f19909201916020918201910161325f565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208c5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b1580156132f557600080fd5b505af1158015613309573d6000803e3d6000fd5b505050506040513d602081101561331f57600080fd5b50519695505050505050565b604080517f746f6b656e2e6e616d6500000000000000000000000000000000000000000000602080830191909152606060020a3002602a8301528251601e818403018152603e909201928390528151600093849392909182918401908083835b602083106133aa5780518252601f19909201916020918201910161338b565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547f6e89955000000000000000000000000000000000000000000000000000000000845260048401828152602485019687528b5160448601528b51929950600160a060020a039091169750636e899550965088958b9550909390926064909101919085019080838360005b8381101561345557818101518382015260200161343d565b50505050905090810190601f1680156134825780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b1580156134a257600080fd5b505af11580156134b6573d6000803e3d6000fd5b505050506040513d60208110156134cc57600080fd5b50511515610838576040805160e560020a62461bcd028152602060048201526068602482015260008051602061543883398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b604080517f746f6b656e2e73796d626f6c0000000000000000000000000000000000000000602080830191909152606060020a3002602c83015282518083038201815291830192839052815160009384939290918291840190808383602083106133aa5780518252601f19909201916020918201910161338b565b604080517f746f6b656e2e746c610000000000000000000000000000000000000000000000602080830191909152606060020a300260298301528251601d818403018152603d90920192839052815160009384939290918291840190808383602083106133aa5780518252601f19909201916020918201910161338b565b604080517f746f6b656e2e76657273696f6e00000000000000000000000000000000000000602080830191909152606060020a3002602d83015282516021818403018152604190920192839052815160009384939290918291840190808383602083106133aa5780518252601f19909201916020918201910161338b565b6000808360405160200180807f746f6b656e2e646563696d616c73000000000000000000000000000000000000815250600e0182805190602001908083835b602083106137595780518252601f19909201916020918201910161373a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083106137bc5780518252601f19909201916020918201910161379d565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b5460e160020a637152429d02845260048401829052602484018b90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b15801561383a57600080fd5b505af115801561384e573d6000803e3d6000fd5b505050506040513d602081101561386457600080fd5b5051151561391c576040805160e560020a62461bcd028152602060048201526068602482015260008051602061543883398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b506001949350505050565b604080517f6665652e6163636f756e74000000000000000000000000000000000000000000602080830191909152606060020a3002602b8301528251601f818403018152603f909201928390528151600093849392909182918401908083835b602083106139a65780518252601f199092019160209182019101613987565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547fca446dd900000000000000000000000000000000000000000000000000000000845260048401829052600160a060020a038b81166024860152955191985094909416955063ca446dd9945060448083019491935090918290030181600087803b1580156134a257600080fd5b6000808360405160200180807f66782e7573642e72617465000000000000000000000000000000000000000000815250600b0182805190602001908083835b60208310613a9a5780518252601f199092019160209182019101613a7b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310613afd5780518252601f199092019160209182019101613ade565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b5460e160020a637152429d02845260048401829052602484018b90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b158015613b7b57600080fd5b505af1158015613b8f573d6000803e3d6000fd5b505050506040513d6020811015613ba557600080fd5b5051151561391c576040805160e560020a62461bcd02815260206004820152603060248201527f4572726f723a20556e61626c6520746f20757064617465206163636f756e742060448201527f7370656e64696e6720706572696f642e00000000000000000000000000000000606482015290519081900360840190fd5b600080600160a060020a0383161515613cac576040805160e560020a62461bcd02815260206004820152602760248201527f4572726f723a2063616e6e6f74206465707265636174652061206e756c6c206160448201527f6464726573732e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b604080517f6465706372656361746564000000000000000000000000000000000000000000602080830191909152606060020a600160a060020a03871602602b8301528251601f818403018152603f90920192839052815191929182918401908083835b60208310613d2f5780518252601f199092019160209182019101613d10565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547fabfdcced00000000000000000000000000000000000000000000000000000000845260048401829052600160248501529451909750600160a060020a03909416955063abfdcced945060448083019491935090918290030181600087803b1580156134a257600080fd5b60008060008360405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310613e575780518252601f199092019160209182019101613e38565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015613ee457600080fd5b505af1158015613ef8573d6000803e3d6000fd5b505050506040513d6020811015613f0e57600080fd5b50519050600160a060020a03811615613f295780925061239e565b83925061239e565b60008083613f3f8685613dc3565b60405160200180807f746f6b656e2e66726f7a656e0000000000000000000000000000000000000000815250600c01838051906020019080838360208310612a115780518252601f1990920191602091820191016129f2565b600080600080613fdd876040805190810160405280600481526020017f55534478000000000000000000000000000000000000000000000000000000008152506121ce565b9250613fe987876121ce565b915061402582600a0a61284d85600a0a61401961271061284d61400c8e8e614f1b565b8c9063ffffffff614de216565b9063ffffffff614de216565b979650505050505050565b600080600061403f8686614f78565b15156140bb576040805160e560020a62461bcd02815260206004820152603060248201527f4572726f723a20556e61626c6520746f20757064617465206163636f756e742060448201527f7370656e64696e6720706572696f642e00000000000000000000000000000000606482015290519081900360840190fd5b6140c984612859888861505b565b9150816140d687876150fd565b1015614152576040805160e560020a62461bcd02815260206004820152603360248201527f4572726f723a204163636f756e742063616e6e6f74206578636565642069747360448201527f206461696c79207370656e64206c696d69742e00000000000000000000000000606482015290519081900360840190fd5b8461415d878761518e565b60405160200180807f6163636f756e742e7370656e64696e672e616d6f756e7400000000000000000081525060170183600160a060020a0316600160a060020a0316606060020a028152601401828152602001925050506040516020818303038152906040526040518082805190602001908083835b602083106141f25780518252601f1990920191602091820191016141d3565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208c5460e160020a637152429d02845260048401829052602484018a90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b15801561427057600080fd5b505af1158015614284573d6000803e3d6000fd5b505050506040513d602081101561429a57600080fd5b50511515614352576040805160e560020a62461bcd028152602060048201526068602482015260008051602061543883398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b50600195945050505050565b60008080600160a060020a03861615156143e8576040805160e560020a62461bcd02815260206004820152602560248201527f4572726f723a2060746f602061646472657373206d757374206e6f742062652060448201527f6e756c6c2e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b876143f38a89613dc3565b6040516020018080600080516020615356833981519152815250600d0183805190602001908083835b6020831061443b5780518252601f19909201916020918201910161441c565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106144bd5780518252601f19909201916020918201910161449e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209150876144f78a88613dc3565b6040516020018080600080516020615356833981519152815250600d0183805190602001908083835b6020831061453f5780518252601f199092019160209182019101614520565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106145c15780518252601f1990920191602091820191016145a2565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208f5460e060020a63bd02d0f5028452600484018a90529451909750600160a060020a03909416955063e2a4853a9450879361467c93508b92879263bd02d0f5926024808401938290030181600087803b15801561464457600080fd5b505af1158015614658573d6000803e3d6000fd5b505050506040513d602081101561466e57600080fd5b50519063ffffffff61521f16565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b1580156146c457600080fd5b505af11580156146d8573d6000803e3d6000fd5b505050506040513d60208110156146ee57600080fd5b50511515614770576040805160e560020a62461bcd0281526020600482015260696024820152600080516020615438833981519152604482015260008051602061541883398151915260648201526000805160206153f8833981519152608482015260008051602061545883398151915260a482015290519081900360c40190fd5b88546040805160e060020a63bd02d0f5028152600481018490529051600160a060020a039092169163e2a4853a918491614807918a91869163bd02d0f59160248083019260209291908290030181600087803b1580156147cf57600080fd5b505af11580156147e3573d6000803e3d6000fd5b505050506040513d60208110156147f957600080fd5b50519063ffffffff614e9816565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b15801561484f57600080fd5b505af1158015614863573d6000803e3d6000fd5b505050506040513d602081101561487957600080fd5b505115156148fb576040805160e560020a62461bcd0281526020600482015260696024820152600080516020615438833981519152604482015260008051602061541883398151915260648201526000805160206153f8833981519152608482015260008051602061545883398151915260a482015290519081900360c40190fd5b85600160a060020a031687600160a060020a03167f6f3dcde00ed34d4f404b335a65d18fb4adf74f5b817aa46f5d7c4f05c6d1e96e8a8888604051808060200184815260200180602001838103835286818151815260200191508051906020019080838360005b8381101561497a578181015183820152602001614962565b50505050905090810190601f1680156149a75780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156149da5781810151838201526020016149c2565b50505050905090810190601f168015614a075780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a350600198975050505050505050565b60008084614a348786613dc3565b614a3e8833613dc3565b60405160200180807f746f6b656e2e616c6c6f77616e63650000000000000000000000000000000000815250600f0184805190602001908083835b60208310614a985780518252601f199092019160209182019101614a79565b6001836020036101000a03801982511681845116808217855250505050505090500183600160a060020a0316600160a060020a0316606060020a02815260140182600160a060020a0316600160a060020a0316606060020a02815260140193505050506040516020818303038152906040526040518082805190602001908083835b60208310614b395780518252601f199092019160209182019101614b1a565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208c5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063e2a4853a94508693614bbc93508992879263bd02d0f5926024808401938290030181600087803b15801561464457600080fd5b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015614c0457600080fd5b505af1158015614c18573d6000803e3d6000fd5b505050506040513d6020811015614c2e57600080fd5b50511515614352576040805160e560020a62461bcd0281526020600482015260696024820152600080516020615438833981519152604482015260008051602061541883398151915260648201526000805160206153f8833981519152608482015260008051602061545883398151915260a482015290519081900360c40190fd5b60008060405160200180807f6665652e636f6e74726163742e6d61737465720000000000000000000000000081525060130190506040516020818303038152906040526040518082805190602001908083835b60208310614d225780518252601f199092019160209182019101614d03565b51815160209384036101000a60001901801990921691161790526040805192909401829003822089547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015614daf57600080fd5b505af1158015614dc3573d6000803e3d6000fd5b505050506040513d6020811015614dd957600080fd5b50519392505050565b600080831515614df557600091506114f1565b50828202828482811515614e0557fe5b0414610c89576040805160e560020a62461bcd02815260206004820152602760248201527f4572726f723a20556e73616665206d756c7469706c69636174696f6e206f706560448201527f726174696f6e2100000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000808284811515614e8f57fe5b04949350505050565b600082820183811015610c89576040805160e560020a62461bcd02815260206004820152602160248201527f4572726f723a20556e73616665206164646974696f6e206f7065726174696f6e60448201527f2100000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000808260405160200180807f66782e7573642e72617465000000000000000000000000000000000000000000815250600b01828051906020019080838360208310611e0c5780518252601f199092019160209182019101611ded565b6000806000614f87858561518e565b915042821115614f9a576001925061239e565b5062015180614fd68585614fd1614fc48561401960016128598361284d428d63ffffffff61521f16565b869063ffffffff614e9816565b6152a4565b1515615052576040805160e560020a62461bcd02815260206004820152603060248201527f4572726f723a20556e61626c6520746f20757064617465206163636f756e742060448201527f7370656e64696e6720706572696f642e00000000000000000000000000000000606482015290519081900360840190fd5b6001925061239e565b60008082615069858561518e565b60405160200180807f6163636f756e742e7370656e64696e672e616d6f756e7400000000000000000081525060170183600160a060020a0316600160a060020a0316606060020a0281526014018281526020019250505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b6000808260405160200180807f6163636f756e742e7370656e64696e672e6c696d69740000000000000000000081525060160182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b6000808260405160200180807f6c696d69742e7370656e64696e672e706572696f64000000000000000000000081525060150182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e6f5780518252601f199092019160209182019101611e50565b60008282111561529e576040805160e560020a62461bcd028152602060048201526024808201527f4572726f723a20556e73616665207375627472616374696f6e206f706572617460448201527f696f6e2100000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50900390565b6000808360405160200180807f6c696d69742e7370656e64696e672e706572696f64000000000000000000000081525060150182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106137bc5780518252601f19909201916020918201910161379d560020616c6c6f7765642062792074686520636f6e74726163742e00000000000000746f6b656e2e62616c616e6365000000000000000000000000000000000000004572726f723a20556e61626c6520746f207472616e736665722066756e64732e20506c6561736520636865636b20796f757220706172616d657465727320616e6420656e7375726520746865207370656e646572206861732074686520617070726f76656420616d6f756e74206f662066756e647320746f207472616e736665722e6c6c6f776564207065726d697373696f6e7320776974682073746f726167652075652e20506c6561736520656e7375726520636f6e74726163742068617320614572726f723a20556e61626c6520746f207365742073746f726167652076616c636f6e74726163742e00000000000000000000000000000000000000000000004572726f723a205472616e73616374696f6e2073656e646572206973206e6f74a165627a7a723058200c9617c9915829e5d747c0f9c842b737ef9886fd2b0e028949cdaf19f2e3bb890029", + "sourceMap": "1060:8028:5:-;;;1371:465;8:9:-1;5:2;;;30:1;27;20:12;5:2;1371:465:5;;;;;;;;;;;;;;;;1117:10:1;1111:5;:17;;;1371:465:5;1111:17:1;;;;;;:24;;1131:4;-1:-1:-1;;1111:24:1;;;;;;;1708:46:5;;-1:-1:-1;;;;;;1708:46:5;-1:-1:-1;;;;;1708:46:5;;;;;;;;;1807:24;;;;;;;;1060:8028;;;;;;;;", + "deployedSourceMap": "1060:8028:5:-;;;;;;;;;-1:-1:-1;;;1060:8028:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3417:104;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3417:104:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3417:104:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8099:406;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8099:406:5;-1:-1:-1;;;;;8099:406:5;;;;;;;;;;;;;;;;;;;;;;;;;4593:132;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4593:132:5;;;;;;;;;;;;;;;;;;;;7417:476;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7417:476:5;-1:-1:-1;;;;;7417:476:5;;;;;;;;;;;;4330:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4330:134:5;;;;2127:185:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2127:185:1;-1:-1:-1;;;;;2127:185:1;;;;;6385:150:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6385:150:5;;;;;4100:113;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4100:113:5;;;;2571:188:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2571:188:1;-1:-1:-1;;;;;2571:188:1;;;;;725:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;725:37:1;-1:-1:-1;;;;;725:37:1;;;;;3886:101:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3886:101:5;;;;5306:156;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5306:156:5;-1:-1:-1;;;;;5306:156:5;;;;;3631:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3631:110:5;;;;6767:375;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6767:375:5;-1:-1:-1;;;;;6767:375:5;;;;;;;5739:415;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5739:415:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5739:415:5;-1:-1:-1;;;;;5739:415:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5739:415:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4963:183;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4963:183:5;-1:-1:-1;;;;;4963:183:5;;;;;;;;;;2242:1071;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2242:1071:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2242:1071:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2242:1071:5;;;;-1:-1:-1;2242:1071:5;-1:-1:-1;2242:1071:5;;-1:-1:-1;2242:1071:5;;;;;;;;-1:-1:-1;;2242:1071:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2242:1071:5;;;;-1:-1:-1;2242:1071:5;-1:-1:-1;2242:1071:5;;-1:-1:-1;2242:1071:5;;;;;;;;-1:-1:-1;;2242:1071:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2242:1071:5;;;;-1:-1:-1;2242:1071:5;-1:-1:-1;2242:1071:5;;-1:-1:-1;2242:1071:5;;;;;;;;-1:-1:-1;2242:1071:5;;-1:-1:-1;;2242:1071:5;;;-1:-1:-1;;;;2242:1071:5;;;;-1:-1:-1;;;;;2242:1071:5;;;;;;-1:-1:-1;2242:1071:5;;8650:204;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8650:204:5;;;;1589:291:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1589:291:1;-1:-1:-1;;;;;1589:291:1;;;;;3417:104:5;3454:12;3483:31;:3;3508:4;3483:31;:16;:31;:::i;:::-;3476:38;;3417:104;:::o;8099:406::-;8176:12;8953:39;:3;8986:4;8953:39;:24;:39;:::i;:::-;8952:40;8944:123;;;;;-1:-1:-1;;;;;8944:123:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8305:37;:3;8326:7;8335:6;8305:37;:20;:37;:::i;:::-;8288:191;;;;;;;-1:-1:-1;;;;;8288:191:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8494:4:5;8099:406;;;;:::o;4593:132::-;4637:11;4665:53;4684:33;:3;4711:4;4684:33;:18;:33;:::i;:::-;4665:3;;:53;:18;:53;:::i;7417:476::-;7508:12;8953:39;:3;8986:4;8953:39;:24;:39;:::i;:::-;8952:40;8944:123;;;;;-1:-1:-1;;;;;8944:123:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7641:76;7658:33;:3;7685:4;7658:33;:18;:33;:::i;:::-;7641:76;;;;;;;;;;;;;;;;;:3;;:76;7693:4;;7699:2;;7703:6;;7641:76;:16;:76;:::i;:::-;7624:243;;;;;;-1:-1:-1;;;;;7624:243:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7882:4:5;7417:476;;;;;:::o;4330:134::-;4371:14;4402:55;4423:33;:3;4450:4;4423:33;:18;:33;:::i;:::-;4402:3;;:55;:20;:55;:::i;2127:185:1:-;1261:10;2201:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;2221:21:1;;:5;:21;;;;;;;;;;;:28;;-1:-1:-1;;2221:28:1;2245:4;2221:28;;;2260:30;;;2221:5;2260:30;-1:-1:-1;2303:4:1;2127:185;;;:::o;6385:150:5:-;6442:9;6468:60;6486:33;:3;6513:4;6486:33;:18;:33;:::i;:::-;6468:3;;6521:6;6468:60;:17;:60;:::i;:::-;6461:67;6385:150;-1:-1:-1;;6385:150:5:o;4100:113::-;4140:15;4172:34;:3;4200:4;4172:34;:19;:34;:::i;2571:188:1:-;1261:10;2646:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;2666:21:1;;2690:5;2666:21;;;;;;;;;;;:29;;-1:-1:-1;;2666:29:1;;;2706:31;;;2690:5;2706:31;-1:-1:-1;2750:4:1;2571:188;;;:::o;725:37::-;;;;;;;;;;;;;;;;:::o;3886:101:5:-;3922:11;3950:30;:3;3974:4;3950:30;:15;:30;:::i;5306:156::-;5363:12;5392:63;5412:33;:3;5439:4;5412:33;:18;:33;:::i;:::-;5392:3;;5447:7;5392:63;:19;:63;:::i;3631:110::-;3670:14;3701:33;:3;3728:4;3701:33;:18;:33;:::i;6767:375::-;6840:12;8953:39;:3;8986:4;8953:39;:24;:39;:::i;:::-;8952:40;8944:123;;;;;-1:-1:-1;;;;;8944:123:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6968:66;6981:33;:3;7008:4;6981:33;:18;:33;:::i;:::-;6968:66;;;;;;;;;;;;;;;;;:3;;:66;7016:2;;7020:6;;6968:66;:12;:66;:::i;:::-;6951:165;;;;;;;-1:-1:-1;;;;;6951:165:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5739:415;5784:8;;;;5825:12;5784:8;;5889:33;:3;5916:4;5889:33;:18;:33;:::i;:::-;5867:55;-1:-1:-1;5947:26:5;:3;5867:55;5947:26;:13;:26;:::i;:::-;5983;:3;5997:11;5983:26;:13;:26;:::i;:::-;6019;:3;6033:11;6019:26;:13;:26;:::i;:::-;6055:27;:3;6070:11;6055:27;:14;:27;:::i;:::-;6092:26;:3;6106:11;6092:26;:13;:26;:::i;:::-;5930:217;;;;-1:-1:-1;5930:217:5;;-1:-1:-1;5930:217:5;-1:-1:-1;5930:217:5;;-1:-1:-1;6128:11:5;;-1:-1:-1;5739:415:5;-1:-1:-1;5739:415:5:o;4963:183::-;5037:11;5065:74;5087:33;:3;5114:4;5087:33;:18;:33;:::i;:::-;5065:3;;5122:7;5131;5065:74;:21;:74;:::i;:::-;5058:81;4963:183;-1:-1:-1;;;4963:183:5:o;2242:1071::-;1261:10:1;2439:12:5;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;2469:23:5;:3;2486:5;2469:23;:16;:23;:::i;:::-;2461:100;;;;;;;-1:-1:-1;;;;;2461:100:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2577:27;:3;2596:7;2577:27;:18;:27;:::i;:::-;2569:106;;;;;;;-1:-1:-1;;;;;2569:106:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2691:21;:3;2707:4;2691:21;:15;:21;:::i;:::-;2683:97;;;;;;;-1:-1:-1;;;;;2683:97:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2796:29;:3;2816:8;2796:29;:19;:29;:::i;:::-;2788:109;;;;;;;-1:-1:-1;;;;;2788:109:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2913:40;:3;2934:7;2943:9;2913:40;:20;:40;:::i;:::-;2905:121;;;;;;;-1:-1:-1;;;;;2905:121:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3042:32;:3;3061:12;3042:32;:18;:32;:::i;:::-;3034:111;;;;;;;-1:-1:-1;;;;;3034:111:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3161:43;:3;3181:7;3190:13;3161:43;:19;:43;:::i;:::-;3153:134;;;;;;;-1:-1:-1;;;;;3153:134:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3302:4:5;2242:1071;;;;;;;;;:::o;8650:204::-;1261:10:1;8706:15:5;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;8739:40:5;:3;8773:4;8739:40;:25;:40;:::i;:::-;8731:97;;;;;;;-1:-1:-1;;;;;8731:97:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8843:4:5;8650:204;:::o;1589:291:1:-;1261:10;1660:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;1688:22:1;;;;1680:66;;;;;-1:-1:-1;;;;;1680:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1757:42;;-1:-1:-1;;;;;1757:42:1;;;1778:10;;1757:42;;;;;-1:-1:-1;;;;;;1805:15:1;:5;:15;;;;;;;;;;;:22;;1823:4;-1:-1:-1;;1805:22:1;;;;;;;;1839:10;1833:17;;;;;;:25;;;;;;;1823:4;1589:291::o;19044:228:8:-;19133:16;19157:10;19211:15;19180:47;;;;;;;;;;;;;-1:-1:-1;;;;;19180:47:8;-1:-1:-1;;;;;19180:47:8;-1:-1:-1;;;19180:47:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;19180:47:8;;;19170:58;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;19170:58:8;;;;;;;;;;;;19241:12;;:26;;;;;;;;;;;19170:58;;-1:-1:-1;;;;;;19241:12:8;;;;-1:-1:-1;19241:22:8;;-1:-1:-1;19241:26:8;;;;;-1:-1:-1;;;19241:26:8;;;;;;-1:-1:-1;19241:12:8;:26;;;5:2:-1;;;;30:1;27;20:12;5:2;19241:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19241:26:8;;;;;;39:16:-1;36:1;17:17;2:54;101:4;19241:26:8;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;19241:26:8;;;;;;20:11:-1;15:3;12:20;9:2;;;45:1;42;35:12;9:2;64:21;;126:4;117:14;;142:31;;;139:2;;;186:1;183;176:12;139:2;218:10;;268:11;251:29;;293:43;;;290:58;-1:-1;239:118;236:2;;;370:1;367;360:12;236:2;-1:-1;19241:26:8;;-1:-1:-1;;;;;19044:228:8;;;;;;:::o;55988:230::-;56085:11;56104:10;56159:15;56127:48;;;;;;;;;;;;;-1:-1:-1;;;;;56127:48:8;-1:-1:-1;;;;;56127:48:8;-1:-1:-1;;;56127:48:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;56127:48:8;;;56117:59;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;56117:59:8;;;;;;;;;;;;56189:12;;:24;;;;;;;;;;;56117:59;;-1:-1:-1;;;;;;56189:12:8;;;;-1:-1:-1;56189:20:8;;-1:-1:-1;56189:24:8;;;;;263:2:-1;;-1:-1;56189:24:8;;;;;;;-1:-1:-1;56189:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;56189:24:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;56189:24:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;56189:24:8;;55988:230;-1:-1:-1;;;;55988:230:8:o;40660:1217::-;40753:12;40855:22;40753:12;;-1:-1:-1;;;;;40781:14:8;;;;40773:75;;;;;-1:-1:-1;;;;;40773:75:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40880:35;40895:4;40909;40880:14;:35::i;:::-;40855:60;;40937:73;40959:4;40965:8;40975:34;40995:4;41001:7;40975:19;:34::i;:::-;40937:21;:73::i;:::-;:78;40922:158;;;;;-1:-1:-1;;;;;40922:158:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41148:8;41158:37;41178:4;41184:10;41158:19;:37::i;:::-;41197:34;41217:4;41223:7;41197:19;:34::i;:::-;41112:120;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;41112:120:8;;;;;;;-1:-1:-1;;;;;41112:120:8;-1:-1:-1;;;;;41112:120:8;-1:-1:-1;;;41112:120:8;;;;;;-1:-1:-1;;;;;41112:120:8;-1:-1:-1;;;;;41112:120:8;-1:-1:-1;;;41112:120:8;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;41112:120:8;;;41102:131;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;41102:131:8;;;;;;;;;;;;;;;;41087:146;;41298:8;41308:37;41328:4;41334:10;41308:19;:37::i;:::-;41264:82;;;;;;-1:-1:-1;;;;;;;;;;;41264:82:8;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;41264:82:8;;;;;;;-1:-1:-1;;;;;41264:82:8;-1:-1:-1;;;;;41264:82:8;-1:-1:-1;;;41264:82:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;41264:82:8;;;41254:93;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;41254:93:8;;;;;;;;;;;;41369:12;;-1:-1:-1;;;;;41369:26:8;;;;;;;;;;41254:93;;-1:-1:-1;;;;;;41369:12:8;;;;-1:-1:-1;41369:20:8;;-1:-1:-1;41369:26:8;;;;;263:2:-1;;-1:-1;41369:26:8;;;;;;;-1:-1:-1;41369:12:8;:26;;;5:2:-1;;;;30:1;27;20:12;5:2;41369:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41369:26:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41369:26:8;:31;;:46;;-1:-1:-1;41404:11:8;;41369:46;41354:154;;;;;;;-1:-1:-1;;;;;41354:154:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41530:12;;:26;;;-1:-1:-1;;;;;41530:26:8;;;;;;;;;;41560:6;;-1:-1:-1;;;;;41530:12:8;;:20;;:26;;;;;;;;;;;;;;:12;;:26;;;5:2:-1;;;;30:1;27;20:12;5:2;41530:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41530:26:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41530:26:8;:36;;41515:118;;;;;-1:-1:-1;;;;;41515:118:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41655:12;;:34;;;-1:-1:-1;;;;;41655:34:8;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41655:12:8;;;;:20;;:34;;;;;;;;;;;;;;;:12;;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;41655:34:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41655:34:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41655:34:8;41640:165;;;;;;;-1:-1:-1;;;;;41640:165:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;41640:165:8;;;;-1:-1:-1;;;;;;;;;;;41640:165:8;;;;-1:-1:-1;;;;;;;;;;;41640:165:8;;;;-1:-1:-1;;;;;;;;;;;41640:165:8;;;;;;;;;;;;;;;41817:37;;;;;;;;-1:-1:-1;;;;;41817:37:8;;;41826:10;;41817:37;;;;;;;;;-1:-1:-1;41868:4:8;;40660:1217;-1:-1:-1;;;;;;40660:1217:8:o;19669:234::-;19760:18;19786:10;19842:15;19809:49;;;;;;;;;;;;;-1:-1:-1;;;;;19809:49:8;-1:-1:-1;;;;;19809:49:8;-1:-1:-1;;;19809:49:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;19809::8;;;19799:60;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;27455:210:8;27538:11;27557:10;27613:8;27580:42;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;27580:42:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;27580:42:8;;;27570:53;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;27570:53:8;;;;;;;;;;;;27636:12;;-1:-1:-1;;;;;27636:24:8;;;;;;;;;;27570:53;;-1:-1:-1;;;;;;27636:12:8;;;;-1:-1:-1;27636:20:8;;-1:-1:-1;27636:24:8;;;;;263:2:-1;;-1:-1;27636:24:8;;;;;;;-1:-1:-1;27636:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;36259:1201:8;36386:12;;;-1:-1:-1;;;;;36421:18:8;;;;36406:86;;;;;-1:-1:-1;;;;;36406:86:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36521:35;36536:4;36550;36521:14;:35::i;:::-;36499:57;;36574:40;36588:4;36594:11;36607:6;36574:13;:40::i;:::-;36562:52;;36729:76;36754:4;36760;36766:38;36781:4;36787:8;36797:6;36766:14;:38::i;:::-;36729:24;:76::i;:::-;36714:152;;;;;;;-1:-1:-1;;;;;36714:152:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36932:53;36946:4;36952:8;36962:4;36968:2;36972:6;36980:4;36932:13;:53::i;:::-;36917:127;;;;;;;-1:-1:-1;;;;;36917:127:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37108:84;37122:4;37128:8;37138:4;37144:11;37157:4;37163:28;37173:4;37179:11;37163:9;:28::i;:::-;37108:13;:84::i;:::-;37093:162;;;;;;;-1:-1:-1;;;;;37093:162:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37330:45;37346:4;37352:8;37362:4;37368:6;37330:15;:45::i;:::-;37315:122;;;;;;;-1:-1:-1;;;;;37315:122:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37451:4:8;;36259:1201;-1:-1:-1;;;;;;;;36259:1201:8:o;21583:221::-;21668:18;21694:10;21752:8;21717:44;;;;;;;;;;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;26724:364:8;26815:19;26842:10;26921:18;26897:15;26865:48;;;;;;;;;;;;;-1:-1:-1;;;;;26865:48:8;-1:-1:-1;;;;;26865:48:8;-1:-1:-1;;;26865:48:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;26865:48:8;;;26855:59;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;26855:59:8;;;;;;;;;;;;26942:12;;:27;;;;;;;;;;;26855:59;;-1:-1:-1;;;;;;26942:12:8;;;;-1:-1:-1;26942:23:8;;-1:-1:-1;26942:27:8;;;;;263:2:-1;;-1:-1;26942:27:8;;;;;;;-1:-1:-1;26942:12:8;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;26942:27:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26942:27:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26942:27:8;;-1:-1:-1;;;;;;26979:17:8;;;26975:109;;;27013:26;27034:4;27013:20;:26::i;:::-;27006:33;;;;26975:109;27067:10;27060:17;;26975:109;26724:364;;;;;;:::o;31066:722::-;31211:12;;31242:44;;;;;;;;;;;;-1:-1:-1;;;;;31242:44:8;;;-1:-1:-1;;;31242:44:8;;;;;;;26:21:-1;;;22:32;;6:49;;31242:44:8;;;;;;;;31232:55;;-1:-1:-1;;;;;;;;;;;;31211:12:8;;;:20;;31242:44;;;31232:55;;;;;31242:44;31232:55;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;31232:55:8;;;;;;;;;;;;31211:77;;;-1:-1:-1;;;31211:77:8;;;;;;;;;;;;;;-1:-1:-1;263:2;;-1:-1;31211:77:8;;;;;;;-1:-1:-1;31211:77:8;-1:-1:-1;31211:77:8;;;;5:2:-1;;;;30:1;27;20:12;5:2;31211:77:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31211:77:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31211:77:8;31308:12;;31339:44;;;;31211:77;31339:44;;;;;;;-1:-1:-1;;;;;31339:44:8;;;-1:-1:-1;;;31339:44:8;;;;;;;26:21:-1;;;22:32;;6:49;;31339:44:8;;;;;;;;31329:55;;31211:77;;-1:-1:-1;31308:12:8;;;;:20;;31339:44;;;;;31329:55;;;;;31339:44;31329:55;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;31329:55:8;;;;;;;;;;;;31308:77;;;-1:-1:-1;;;31308:77:8;;;;;;;;;;;;;;-1:-1:-1;263:2;;-1:-1;31308:77:8;;;;;;;-1:-1:-1;31308:77:8;-1:-1:-1;31308:77:8;;;;5:2:-1;;;;30:1;27;20:12;5:2;31308:77:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31308:77:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31308:77:8;31405:12;;31436:44;;;;31308:77;31436:44;;;;;;;-1:-1:-1;;;;;31436:44:8;;;-1:-1:-1;;;31436:44:8;;;;;;;26:21:-1;;;22:32;;6:49;;31436:44:8;;;;;;;;31426:55;;31308:77;;-1:-1:-1;31405:12:8;;;;:20;;31436:44;;;;;31426:55;;;;;31436:44;31426:55;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;31426:55:8;;;;;;;;;;;;31405:77;;;-1:-1:-1;;;31405:77:8;;;;;;;;;;;;;;-1:-1:-1;263:2;;-1:-1;31405:77:8;;;;;;;-1:-1:-1;31405:77:8;-1:-1:-1;31405:77:8;;;;5:2:-1;;;;30:1;27;20:12;5:2;31405:77:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31405:77:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31405:77:8;31503:12;;31534:45;;;;31405:77;31534:45;;;;;;;-1:-1:-1;;;;;31534:45:8;;;-1:-1:-1;;;31534:45:8;;;;;;;26:21:-1;;;22:32;;6:49;;31534:45:8;;;;;;;;31524:56;;31405:77;;-1:-1:-1;31503:12:8;;;;:20;;31534:45;;;;;31524:56;;;;;31534:45;31524:56;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;31524:56:8;;;;;;;;;;;;31503:78;;;-1:-1:-1;;;31503:78:8;;;;;;;;;;;;;;-1:-1:-1;263:2;;-1:-1;31503:78:8;;;;;;;-1:-1:-1;31503:78:8;-1:-1:-1;31503:78:8;;;;5:2:-1;;;;30:1;27;20:12;5:2;31503:78:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31503:78:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31503:78:8;;-1:-1:-1;31599:46:8;31503:78;31600:31;31625:5;31601:18;:6;31612;31601:18;:10;:18;:::i;:::-;31600:24;:31;:24;:31;:::i;:::-;31599:37;:46;:37;:46;:::i;:::-;31587:58;;31663:6;31656:4;:13;31652:132;;;31686:6;31679:13;;;;31652:132;31716:6;31709:4;:13;31705:79;;;31739:6;31732:13;;;;31705:79;31773:4;31766:11;;31705:79;31066:722;;;;;;;;;;:::o;20953:224::-;21045:6;21059:10;21116:15;21082:50;;;;;;;;;;;;;-1:-1:-1;;;;;21082:50:8;-1:-1:-1;;;;;21082:50:8;-1:-1:-1;;;21082:50:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;21082:50:8;;;21072:61;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;20319:225:8;20407:15;20430:10;20483:15;20453:46;;;;;;;;;;;;;-1:-1:-1;;;;;20453:46:8;-1:-1:-1;;;;;20453:46:8;-1:-1:-1;;;20453:46:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;20453:46:8;;;20443:57;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;28789:266:8;28890:12;28910:10;28967:8;28977:34;28997:4;29003:7;28977:19;:34::i;:::-;28933:79;;;;;;-1:-1:-1;;;;;;;;;;;28933:79:8;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;28933:79:8;;;;;;;-1:-1:-1;;;;;28933:79:8;-1:-1:-1;;;;;28933:79:8;-1:-1:-1;;;28933:79:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;28933:79:8;;;28923:90;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;28923:90:8;;;;;;;;;;;;29026:12;;-1:-1:-1;;;;;29026:24:8;;;;;;;;;;28923:90;;-1:-1:-1;;;;;;29026:12:8;;;;-1:-1:-1;29026:20:8;;-1:-1:-1;29026:24:8;;;;;263:2:-1;;-1:-1;29026:24:8;;;;;;;-1:-1:-1;29026:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;29026:24:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29026:24:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29026:24:8;;28789:266;-1:-1:-1;;;;;28789:266:8:o;34221:922::-;34330:12;;;-1:-1:-1;;;;;34358:18:8;;;;34350:67;;;;;-1:-1:-1;;;;;34350:67:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34440:1;34431:10;;34423:64;;;;;-1:-1:-1;;;;;34423:64:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34516:35;34531:4;34545;34516:14;:35::i;:::-;34494:57;;34569:40;34583:4;34589:11;34602:6;34569:13;:40::i;:::-;34557:52;;34631:82;34656:4;34662:10;34674:38;34689:4;34695:8;34705:6;34674:14;:38::i;34631:82::-;34616:157;;;;;;;-1:-1:-1;;;;;34616:157:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34795:59;34809:4;34815:8;34825:10;34837:2;34841:6;34849:4;34795:13;:59::i;:::-;34780:128;;;;;;;-1:-1:-1;;;;;34780:128:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34972:90;34986:4;34992:8;35002:10;35014:11;35027:4;35033:28;35043:4;35049:11;35033:9;:28::i;34972:90::-;34957:163;;;;;;;-1:-1:-1;;;;;34957:163:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22194:215;22280:11;22299:10;22350:15;22322:44;;;;;;;;;;;;;-1:-1:-1;;;;;22322:44:8;-1:-1:-1;;;;;22322:44:8;-1:-1:-1;;;22322:44:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;22322:44:8;;;22312:55;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;22789:215:8;22875:11;22894:10;22945:15;22917:44;;;;;;;;;;;;;-1:-1:-1;;;;;22917:44:8;-1:-1:-1;;;;;22917:44:8;-1:-1:-1;;;22917:44:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;22917:44:8;;;22907:55;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;23384:215:8;23470:11;23489:10;23540:15;23512:44;;;;;;;;;;;;;-1:-1:-1;;;;;23512:44:8;-1:-1:-1;;;;;23512:44:8;-1:-1:-1;;;23512:44:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;23512:44:8;;;23502:55;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;23974:218:8;24061:12;24081:10;24133:15;24104:45;;;;;;;;;;;;;-1:-1:-1;;;;;24104:45:8;-1:-1:-1;;;;;24104:45:8;-1:-1:-1;;;24104:45:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;24104:45:8;;;24094:56;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;24580:217:8;24666:12;24686:10;24737:15;24709:44;;;;;;;;;;;;;-1:-1:-1;;;;;24709:44:8;-1:-1:-1;;;;;24709:44:8;-1:-1:-1;;;24709:44:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;24709:44:8;;;24699:55;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;24699:55:8;;;;;;;;;;;;24767:12;;:25;;;;;;;;;;;24699:55;;-1:-1:-1;;;;;;24767:12:8;;;;-1:-1:-1;24767:21:8;;-1:-1:-1;24767:25:8;;;;;-1:-1:-1;;;24767:25:8;;;;;;-1:-1:-1;24767:12:8;:25;;;5:2:-1;;;;30:1;27;20:12;28056:325:8;28176:14;28198:10;28257:8;28267:34;28287:4;28293:7;28267:19;:34::i;:::-;28303;28323:4;28329:7;28303:19;:34::i;:::-;28221:117;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;28221:117:8;;;;;;;-1:-1:-1;;;;;28221:117:8;-1:-1:-1;;;;;28221:117:8;-1:-1:-1;;;28221:117:8;;;;;;-1:-1:-1;;;;;28221:117:8;-1:-1:-1;;;;;28221:117:8;-1:-1:-1;;;28221:117:8;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;28221:117:8;;;28211:128;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;28211:128:8;;;;;;;;;;;;28352:12;;-1:-1:-1;;;;;28352:24:8;;;;;;;;;;28211:128;;-1:-1:-1;;;;;;28352:12:8;;;;-1:-1:-1;28352:20:8;;-1:-1:-1;28352:24:8;;;;;263:2:-1;;-1:-1;28352:24:8;;;;;;;-1:-1:-1;28352:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;28352:24:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28352:24:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28352:24:8;;28056:325;-1:-1:-1;;;;;;28056:325:8:o;2463:366::-;2583:45;;;;;;;;;;;;-1:-1:-1;;;2622:4:8;2583:45;;;;;;;22:32:-1;26:21;;;22:32;6:49;;2583:45:8;;;;;;;;2573:56;;2540:12;;;;2583:45;;;;;2573:56;;;;2583:45;2573:56;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;2573:56:8;;;;;;;;;;;;2650:12;;:37;;;;;;;;;;;;;;;;;;;;;;;2573:56;;-1:-1:-1;;;;;;2650:12:8;;;;-1:-1:-1;2650:22:8;;-1:-1:-1;2573:56:8;;2650:37;;-1:-1:-1;2650:37:8;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2650:37:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2650:37:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2650:37:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2650:37:8;2635:172;;;;;;;-1:-1:-1;;;;;2635:172:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2635:172:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3234:374;3358:47;;;;;;;;;;;;-1:-1:-1;;;3399:4:8;3358:47;;;;;;;26:21:-1;;;22:32;;6:49;;3358:47:8;;;;;;;3348:58;;3315:12;;;;3358:47;;;;;3348:58;;;;3358:47;3348:58;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;4031:362:8;4149:44;;;;;;;;;;;;-1:-1:-1;;;4187:4:8;4149:44;;;;;;;22:32:-1;26:21;;;22:32;6:49;;4149:44:8;;;;;;;;4139:55;;4106:12;;;;4149:44;;;;;4139:55;;;;4149:44;4139:55;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;4845:378:8;4971:48;;;;;;;;;;;;-1:-1:-1;;;5013:4:8;4971:48;;;;;;;22:32:-1;26:21;;;22:32;6:49;;4971:48:8;;;;;;;;4961:59;;4928:12;;;;4971:48;;;;;4961:59;;;;4971:48;4961:59;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;5937:390:8;6037:12;6057:10;6115:8;6080:44;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;6080:44:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6080:44:8;;;6070:55;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;6070:55:8;;;;;;;;;;;;6146:12;;-1:-1:-1;;;;;6146:39:8;;;;;;;;;;;;;;;;6070:55;;-1:-1:-1;;;;;;6146:12:8;;;;-1:-1:-1;6146:20:8;;-1:-1:-1;6146:39:8;;;;;263:2:-1;;-1:-1;6146:39:8;;;;;;;-1:-1:-1;6146:12:8;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;6146:39:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6146:39:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6146:39:8;6131:174;;;;;;;-1:-1:-1;;;;;6131:174:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6131:174:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6318:4:8;;5937:390;-1:-1:-1;;;;5937:390:8:o;11025:375::-;11150:46;;;;;;;;;;;;-1:-1:-1;;;11190:4:8;11150:46;;;;;;;22:32:-1;26:21;;;22:32;6:49;;11150:46:8;;;;;;;;11140:57;;11107:12;;;;11150:46;;;;;11140:57;;;;11150:46;11140:57;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;11140:57:8;;;;;;;;;;;;11218:12;;:40;;;;;;;;;-1:-1:-1;;;;;11218:40:8;;;;;;;;;11140:57;;-1:-1:-1;11218:12:8;;;;;-1:-1:-1;11218:23:8;;-1:-1:-1;11218:40:8;;;;;263:2:-1;;-1:-1;11218:40:8;;;;;;;-1:-1:-1;11218:12:8;:40;;;5:2:-1;;;;30:1;27;20:12;63254:314:8;63347:12;63367:10;63422:8;63390:41;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;63390:41:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;63390:41:8;;;63380:52;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;63380:52:8;;;;;;;;;;;;63453:12;;-1:-1:-1;;;;;63453:33:8;;;;;;;;;;;;;;;;63380:52;;-1:-1:-1;;;;;;63453:12:8;;;;-1:-1:-1;63453:20:8;;-1:-1:-1;63453:33:8;;;;;263:2:-1;;-1:-1;63453:33:8;;;;;;;-1:-1:-1;63453:12:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;63453:33:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;63453:33:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;63453:33:8;63438:107;;;;;;;-1:-1:-1;;;;;63438:107:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55227:457;55320:12;;-1:-1:-1;;;;;55348:22:8;;;;55340:82;;;;;-1:-1:-1;;;;;55340:82:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55452:48;;;;;;;;;;;;-1:-1:-1;;;;;;;;55452:48:8;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;55452:48:8;;;;;;;;55442:59;;55452:48;;;;;55442:59;;;;55452:48;55442:59;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;55442:59:8;;;;;;;;;;;;55516:12;;:30;;;;;;;;;274:1:-1;55516:30:8;;;;;;55442:59;;-1:-1:-1;;;;;;55516:12:8;;;;-1:-1:-1;55516:20:8;;-1:-1:-1;55516:30:8;;;;;263:2:-1;;-1:-1;55516:30:8;;;;;;;-1:-1:-1;55516:12:8;:30;;;5:2:-1;;;;30:1;27;20:12;16400:357:8;16488:25;16521:10;16594:23;16579:7;16544:43;;;;;;;;;;;;;-1:-1:-1;;;;;16544:43:8;-1:-1:-1;;;;;16544:43:8;-1:-1:-1;;;16544:43:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16544:43:8;;;16534:54;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;16534:54:8;;;;;;;;;;;;16620:12;;:27;;;;;;;;;;;16534:54;;-1:-1:-1;;;;;;16620:12:8;;;;-1:-1:-1;16620:23:8;;-1:-1:-1;16620:27:8;;;;;263:2:-1;;-1:-1;16620:27:8;;;;;;;-1:-1:-1;16620:12:8;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;16620:27:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16620:27:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16620:27:8;;-1:-1:-1;;;;;;16657:22:8;;;16653:100;;16696:15;16689:22;;;;16653:100;16739:7;16732:14;;;;29483:277;29590:18;29616:10;29672:8;29682:34;29702:4;29708:7;29682:19;:34::i;:::-;29639:78;;;;;;;;;;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;64445:441:8;64543:11;64562:16;64617:15;64741:14;64581:30;64598:4;64581:30;;;;;;;;;;;;;;;;;;:16;:30::i;:::-;64562:49;;64635:32;64652:4;64658:8;64635:16;:32::i;:::-;64617:50;;64758:101;64848:10;64844:2;:14;64759:79;64826:11;64822:2;:15;64760:56;64810:5;64760:45;64773:31;64789:4;64795:8;64773:15;:31::i;:::-;64760:8;;:45;:12;:45;:::i;:56::-;64759:62;:79;:62;:79;:::i;64758:101::-;64741:118;64445:441;-1:-1:-1;;;;;;;64445:441:8:o;59595:1002::-;59696:12;59924:18;60289:10;59816:42;59844:4;59850:7;59816:27;:42::i;:::-;59808:109;;;;;;;-1:-1:-1;;;;;59808:109:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59945:51;59989:6;59945:39;59970:4;59976:7;59945:24;:39::i;:51::-;59924:72;;60144:13;60102:38;60126:4;60132:7;60102:23;:38::i;:::-;:55;;60087:132;;;;;-1:-1:-1;;;;;60087:132:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60356:7;60365:39;60390:4;60396:7;60365:24;:39::i;:::-;60312:93;;;;;;;;;;;;;-1:-1:-1;;;;;60312:93:8;-1:-1:-1;;;;;60312:93:8;-1:-1:-1;;;60312:93:8;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;60312:93:8;;;60302:104;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;60302:104:8;;;;;;;;;;;;60420:12;;-1:-1:-1;;;;;60420:39:8;;;;;;;;;;;;;;;;60302:104;;-1:-1:-1;;;;;;60420:12:8;;;;-1:-1:-1;60420:20:8;;-1:-1:-1;60420:39:8;;;;;263:2:-1;;-1:-1;60420:39:8;;;;;;;-1:-1:-1;60420:12:8;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;60420:39:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;60420:39:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;60420:39:8;60412:162;;;;;;;-1:-1:-1;;;;;60412:162:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;60412:162:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;60588:4:8;;59595:1002;-1:-1:-1;;;;;59595:1002:8:o;38207:943::-;38335:12;;;-1:-1:-1;;;;;38370:18:8;;;;38355:86;;;;;-1:-1:-1;;;;;38355:86:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38507:8;38517:31;38537:4;38543;38517:19;:31::i;:::-;38473:76;;;;;;-1:-1:-1;;;;;;;;;;;38473:76:8;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38473:76:8;;;;;;;-1:-1:-1;;;;;38473:76:8;-1:-1:-1;;;;;38473:76:8;-1:-1:-1;;;38473:76:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;38473:76:8;;;38463:87;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38463:87:8;;;;;;;;;;;;;;;;38448:102;;38615:8;38625:29;38645:4;38651:2;38625:19;:29::i;:::-;38581:74;;;;;;-1:-1:-1;;;;;;;;;;;38581:74:8;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38581:74:8;;;;;;;-1:-1:-1;;;;;38581:74:8;-1:-1:-1;;;;;38581:74:8;-1:-1:-1;;;38581:74:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;38581:74:8;;;38571:85;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;38571:85:8;;;;;;;;;;;;38678:12;;-1:-1:-1;;;;;38705:26:8;;;;;;;;;;38571:85;;-1:-1:-1;;;;;;38678:12:8;;;;-1:-1:-1;38678:20:8;;-1:-1:-1;38705:26:8;;:38;;-1:-1:-1;38736:6:8;;38678:12;;38705:20;;:26;;;;;;;;;;-1:-1:-1;38678:12:8;38705:26;;;5:2:-1;;;;30:1;27;20:12;5:2;38705:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38705:26:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38705:26:8;;:38;:30;:38;:::i;:::-;38678:66;;;;;-1:-1:-1;;;38678:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38678:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38678:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38678:66:8;38663:202;;;;;;;-1:-1:-1;;;;;38663:202:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;38663:202:8;;;;-1:-1:-1;;;;;;;;;;;38663:202:8;;;;-1:-1:-1;;;;;;;;;;;38663:202:8;;;;-1:-1:-1;;;;;;;;;;;38663:202:8;;;;;;;;;;;;;;;38886:12;;38913:26;;;-1:-1:-1;;;;;38913:26:8;;;;;;;;;;-1:-1:-1;;;;;38886:12:8;;;;:20;;38907:4;;38913:38;;38944:6;;38886:12;;38913:20;;:26;;;;;;;;;;;;;;38886:12;;38913:26;;;5:2:-1;;;;30:1;27;20:12;5:2;38913:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38913:26:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38913:26:8;;:38;:30;:38;:::i;:::-;38886:66;;;;;-1:-1:-1;;;38886:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38886:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38886:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38886:66:8;38871:202;;;;;;;-1:-1:-1;;;;;38871:202:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;38871:202:8;;;;-1:-1:-1;;;;;;;;;;;38871:202:8;;;;-1:-1:-1;;;;;;;;;;;38871:202:8;;;;-1:-1:-1;;;;;;;;;;;38871:202:8;;;;;;;;;;;;;;;39110:2;-1:-1:-1;;;;;39085:42:8;39104:4;-1:-1:-1;;;;;39085:42:8;;39094:8;39114:6;39122:4;39085:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;39085:42:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39085:42:8;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;39085:42:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39141:4:8;;38207:943;-1:-1:-1;;;;;;;;38207:943:8:o;39704:499::-;39813:12;39833:10;39892:8;39902:34;39922:4;39928:7;39902:19;:34::i;:::-;39938:37;39958:4;39964:10;39938:19;:37::i;:::-;39856:120;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;39856:120:8;;;;;;;-1:-1:-1;;;;;39856:120:8;-1:-1:-1;;;;;39856:120:8;-1:-1:-1;;;39856:120:8;;;;;;-1:-1:-1;;;;;39856:120:8;-1:-1:-1;;;;;39856:120:8;-1:-1:-1;;;39856:120:8;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;39856:120:8;;;39846:131;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;39846:131:8;;;;;;;;;;;;39998:12;;-1:-1:-1;;;;;40023:24:8;;;;;;;;;;39846:131;;-1:-1:-1;;;;;;39998:12:8;;;;-1:-1:-1;39998:20:8;;-1:-1:-1;39846:131:8;;40023:36;;-1:-1:-1;40052:6:8;;39998:12;;40023:20;;:24;;;;;;;;;;-1:-1:-1;39998:12:8;40023:24;;;5:2:-1;;;;30:1;27;20:12;40023:36:8;39998:62;;;;;-1:-1:-1;;;39998:62:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39998:62:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39998:62:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39998:62:8;39983:198;;;;;;;-1:-1:-1;;;;;39983:198:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;39983:198:8;;;;-1:-1:-1;;;;;;;;;;;39983:198:8;;;;-1:-1:-1;;;;;;;;;;;39983:198:8;;;;-1:-1:-1;;;;;;;;;;;39983:198:8;;;;;;;;;;;;;;25924:213;25996:25;26029:10;26052:39;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;26052:39:8;;;26042:50;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;26042:50:8;;;;;;;;;;;;26105:12;;:27;;;;;;;;;;;26042:50;;-1:-1:-1;;;;;;26105:12:8;;;;-1:-1:-1;26105:23:8;;-1:-1:-1;26105:27:8;;;;;263:2:-1;;-1:-1;26105:27:8;;;;;;;-1:-1:-1;26105:12:8;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;26105:27:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26105:27:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26105:27:8;;25924:213;-1:-1:-1;;;25924:213:8:o;301:224:2:-;359:14;;385:6;;381:35;;;408:1;401:8;;;;381:35;-1:-1:-1;433:5:2;;;437:1;433;:5;452;;;;;;;;:10;444:62;;;;;-1:-1:-1;;;;;444:62:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;697:284;755:14;857:9;873:1;869;:5;;;;;;;;;697:284;-1:-1:-1;;;;697:284:2:o;1540:174::-;1598:14;1632:5;;;1651:6;;;;1643:52;;;;;-1:-1:-1;;;;;1643:52:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63876:211:8;63960:12;63980:10;64035:8;64003:41;;;;;;;;;;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;61052:503:8;61143:12;61163;61282:13;61178:39;61203:4;61209:7;61178:24;:39::i;:::-;61163:54;;61237:3;61227:7;:13;61223:328;;;61257:4;61250:11;;;;61223:328;-1:-1:-1;61298:5:8;61354:109;61379:4;61385:7;61394:68;61406:55;61298:5;61407:39;61444:1;61407:32;61298:5;61408:16;:3;61416:7;61408:16;:7;:16;:::i;61406:55::-;61394:7;;:68;:11;:68;:::i;:::-;61354:24;:109::i;:::-;61337:187;;;;;;;-1:-1:-1;;;;;61337:187:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61540:4;61533:11;;;;61913:271;62006:11;62025:10;62092:7;62101:39;62126:4;62132:7;62101:24;:39::i;:::-;62048:93;;;;;;;;;;;;;-1:-1:-1;;;;;62048:93:8;-1:-1:-1;;;;;62048:93:8;-1:-1:-1;;;62048:93:8;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;62048:93:8;;;62038:104;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;58783:227:8;58875:10;58893;58959:7;58916:51;;;;;;;;;;;;;-1:-1:-1;;;;;58916:51:8;-1:-1:-1;;;;;58916:51:8;-1:-1:-1;;;58916:51:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;58916:51:8;;;58906:62;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;57484:228:8;57577:11;57596:10;57661:7;57619:50;;;;;;;;;;;;;-1:-1:-1;;;;;57619:50:8;-1:-1:-1;;;;;57619:50:8;-1:-1:-1;;;57619:50:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;57619:50:8;;;57609:61;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;1143:234:2;1201:14;1307:6;;;;1299:55;;;;;-1:-1:-1;;;;;1299:55:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1367:5:2;;;1143:234::o;56626:379:8:-;56727:12;56747:10;56812:7;56770:50;;;;;;;;;;;;;-1:-1:-1;;;;;56770:50:8;-1:-1:-1;;;;;56770:50:8;-1:-1:-1;;;56770:50:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;56770:50:8;;;56760:61;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;", + "source": "pragma solidity 0.4.24;\n\nimport \"./Ownable.sol\";\nimport \"./TokenIOStorage.sol\";\nimport \"./TokenIOLib.sol\";\n\n\n\n/*\nCOPYRIGHT 2018 Token, Inc.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n@title ERC20 Compliant Smart Contract for Token, Inc.\n\n@author Ryan Tate , Sean Pollock \n\n@notice Contract uses generalized storage contract, `TokenIOStorage`, for\nupgradeability of interface contract.\n\n@dev In the event that the main contract becomes deprecated, the upgraded contract\nwill be set as the owner of this contract, and use this contract's storage to\nmaintain data consistency between contract.\n*/\n\n\n\ncontract TokenIOERC20 is Ownable {\n //// @dev Set reference to TokenIOLib interface which proxies to TokenIOStorage\n using TokenIOLib for TokenIOLib.Data;\n TokenIOLib.Data lib;\n\n /**\n * @notice Constructor method for ERC20 contract\n * @param _storageContract address of TokenIOStorage contract\n */\n constructor(address _storageContract) public {\n //// @dev Set the storage contract for the interface\n //// @dev This contract will be unable to use the storage constract until\n //// @dev contract address is authorized with the storage contract\n //// @dev Once authorized, Use the `setParams` method to set storage values\n lib.Storage = TokenIOStorage(_storageContract);\n\n //// @dev set owner to contract initiator\n owner[msg.sender] = true;\n }\n\n\n /**\n @notice Sets erc20 globals and fee paramters\n @param _name Full token name 'USD by token.io'\n @param _symbol Symbol name 'USDx'\n @param _tla Three letter abbreviation 'USD'\n @param _version Release version 'v0.0.1'\n @param _decimals Decimal precision\n @param _feeContract Address of fee contract\n @return { \"success\" : \"Returns true if successfully called from another contract\"}\n */\n function setParams(\n string _name,\n string _symbol,\n string _tla,\n string _version,\n uint _decimals,\n address _feeContract,\n uint _fxUSDBPSRate\n ) onlyOwner public returns (bool success) {\n require(lib.setTokenName(_name),\n \"Error: Unable to set token name. Please check arguments.\");\n require(lib.setTokenSymbol(_symbol),\n \"Error: Unable to set token symbol. Please check arguments.\");\n require(lib.setTokenTLA(_tla),\n \"Error: Unable to set token TLA. Please check arguments.\");\n require(lib.setTokenVersion(_version),\n \"Error: Unable to set token version. Please check arguments.\");\n require(lib.setTokenDecimals(_symbol, _decimals),\n \"Error: Unable to set token decimals. Please check arguments.\");\n require(lib.setFeeContract(_feeContract),\n \"Error: Unable to set fee contract. Please check arguments.\");\n require(lib.setFxUSDBPSRate(_symbol, _fxUSDBPSRate),\n \"Error: Unable to set fx USD basis points rate. Please check arguments.\");\n return true;\n }\n\n /**\n * @notice Gets name of token\n * @return {\"_name\" : \"Returns name of token\"}\n */\n function name() public view returns (string _name) {\n return lib.getTokenName(address(this));\n }\n\n /**\n * @notice Gets symbol of token\n * @return {\"_symbol\" : \"Returns symbol of token\"}\n */\n function symbol() public view returns (string _symbol) {\n return lib.getTokenSymbol(address(this));\n }\n\n /**\n * @notice Gets three-letter-abbreviation of token\n * @return {\"_tla\" : \"Returns three-letter-abbreviation of token\"}\n */\n function tla() public view returns (string _tla) {\n return lib.getTokenTLA(address(this));\n }\n\n /**\n * @notice Gets version of token\n * @return {\"_version\" : \"Returns version of token\"}\n */\n function version() public view returns (string _version) {\n return lib.getTokenVersion(address(this));\n }\n\n /**\n * @notice Gets decimals of token\n * @return {\"_decimals\" : \"Returns number of decimals\"}\n */\n function decimals() public view returns (uint _decimals) {\n return lib.getTokenDecimals(lib.getTokenSymbol(address(this)));\n }\n\n /**\n * @notice Gets total supply of token\n * @return {\"supply\" : \"Returns current total supply of token\"}\n */\n function totalSupply() public view returns (uint supply) {\n return lib.getTokenSupply(lib.getTokenSymbol(address(this)));\n }\n\n /**\n * @notice Gets allowance that spender has with approver\n * @param account Address of approver\n * @param spender Address of spender\n * @return {\"amount\" : \"Returns allowance of given account and spender\"}\n */\n function allowance(address account, address spender) public view returns (uint amount) {\n return lib.getTokenAllowance(lib.getTokenSymbol(address(this)), account, spender);\n }\n\n /**\n * @notice Gets balance of account\n * @param account Address for balance lookup\n * @return {\"balance\" : \"Returns balance amount\"}\n */\n function balanceOf(address account) public view returns (uint balance) {\n return lib.getTokenBalance(lib.getTokenSymbol(address(this)), account);\n }\n\n /**\n * @notice Gets fee parameters\n * @return {\n \"bps\":\"Fee amount as a mesuare of basis points\",\n \"min\":\"Minimum fee amount\",\n \"max\":\"Maximum fee amount\",\n \"flat\":\"Flat fee amount\",\n \"contract\":\"Address of fee contract\"\n }\n */\n function getFeeParams() public view returns (uint bps, uint min, uint max, uint flat, bytes feeMsg, address feeAccount) {\n address feeContract = lib.getFeeContract(address(this));\n return (\n lib.getFeeBPS(feeContract),\n lib.getFeeMin(feeContract),\n lib.getFeeMax(feeContract),\n lib.getFeeFlat(feeContract),\n lib.getFeeMsg(feeContract),\n feeContract\n );\n }\n\n /**\n * @notice Calculates fee of a given transfer amount\n * @param amount Amount to calculcate fee value\n * @return {\"fees\": \"Returns the calculated transaction fees based on the fee contract parameters\"}\n */\n function calculateFees(uint amount) public view returns (uint fees) {\n return lib.calculateFees(lib.getFeeContract(address(this)), amount);\n }\n\n /**\n * @notice transfers 'amount' from msg.sender to a receiving account 'to'\n * @param to Receiving address\n * @param amount Transfer amount\n * @return {\"success\" : \"Returns true if transfer succeeds\"}\n */\n function transfer(address to, uint amount) public notDeprecated returns (bool success) {\n /// @notice send transfer through library\n /// @dev !!! mutates storage state\n require(\n lib.transfer(lib.getTokenSymbol(address(this)), to, amount, \"0x0\"),\n \"Error: Unable to transfer funds. Please check your parameters.\"\n );\n return true;\n }\n\n /**\n * @notice spender transfers from approvers account to the reciving account\n * @param from Approver's address\n * @param to Receiving address\n * @param amount Transfer amount\n * @return {\"success\" : \"Returns true if transferFrom succeeds\"}\n */\n function transferFrom(address from, address to, uint amount) public notDeprecated returns (bool success) {\n /// @notice sends transferFrom through library\n /// @dev !!! mutates storage state\n require(\n lib.transferFrom(lib.getTokenSymbol(address(this)), from, to, amount, \"0x0\"),\n \"Error: Unable to transfer funds. Please check your parameters and ensure the spender has the approved amount of funds to transfer.\"\n );\n return true;\n }\n\n /**\n * @notice approves spender a given amount\n * @param spender Spender's address\n * @param amount Allowance amount\n * @return {\"success\" : \"Returns true if approve succeeds\"}\n */\n function approve(address spender, uint amount) public notDeprecated returns (bool success) {\n /// @notice sends approve through library\n /// @dev !!! mtuates storage states\n require(\n lib.approveAllowance(spender, amount),\n \"Error: Unable to approve allowance for spender. Please ensure spender is not null and does not have a frozen balance.\"\n );\n return true;\n }\n\n /**\n * @notice gets currency status of contract\n * @return {\"deprecated\" : \"Returns true if deprecated, false otherwise\"}\n */\n function deprecateInterface() public onlyOwner returns (bool deprecated) {\n require(lib.setDeprecatedContract(address(this)),\n \"Error: Unable to deprecate contract!\");\n return true;\n }\n\n modifier notDeprecated() {\n /// @notice throws if contract is deprecated\n require(!lib.isContractDeprecated(address(this)),\n \"Error: Contract has been deprecated, cannot perform operation!\");\n _;\n }\n\n }\n", + "sourcePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOERC20.sol", + "ast": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOERC20.sol", + "exportedSymbols": { + "TokenIOERC20": [ + 1335 + ] + }, + "id": 1336, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 908, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:5" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 909, + "nodeType": "ImportDirective", + "scope": 1336, + "sourceUnit": 185, + "src": "25:23:5", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 910, + "nodeType": "ImportDirective", + "scope": 1336, + "sourceUnit": 5226, + "src": "49:30:5", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 911, + "nodeType": "ImportDirective", + "scope": 1336, + "sourceUnit": 4607, + "src": "80:26:5", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 912, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "1085:7:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 913, + "nodeType": "InheritanceSpecifier", + "src": "1085:7:5" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 1335, + "linearizedBaseContracts": [ + 1335, + 184 + ], + "name": "TokenIOERC20", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 916, + "libraryName": { + "contractScope": null, + "id": 914, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4606, + "src": "1185:10:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4606", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "1179:37:5", + "typeName": { + "contractScope": null, + "id": 915, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1200:15:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 918, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 1335, + "src": "1219:19:5", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 917, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1219:15:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 938, + "nodeType": "Block", + "src": "1416:420:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 929, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 923, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "1708:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 925, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1629, + "src": "1708:11:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 927, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 920, + "src": "1737:16:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 926, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5225, + "src": "1722:14:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5225_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 928, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1722:32:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1708:46:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "id": 930, + "nodeType": "ExpressionStatement", + "src": "1708:46:5" + }, + { + "expression": { + "argumentTypes": null, + "id": 936, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 931, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1807:5:5", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 934, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 932, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "1813:3:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 933, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1813:10:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1807:17:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 935, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1827:4:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1807:24:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 937, + "nodeType": "ExpressionStatement", + "src": "1807:24:5" + } + ] + }, + "documentation": "@notice Constructor method for ERC20 contract\n@param _storageContract address of TokenIOStorage contract", + "id": 939, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 921, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 920, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 939, + "src": "1383:24:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 919, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1383:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1382:26:5" + }, + "payable": false, + "returnParameters": { + "id": 922, + "nodeType": "ParameterList", + "parameters": [], + "src": "1416:0:5" + }, + "scope": 1335, + "src": "1371:465:5", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1020, + "nodeType": "Block", + "src": "2453:860:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 963, + "name": "_name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 941, + "src": "2486:5:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 961, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "2469:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 962, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setTokenName", + "nodeType": "MemberAccess", + "referencedDeclaration": 1746, + "src": "2469:16:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) returns (bool)" + } + }, + "id": 964, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2469:23:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420746f6b656e206e616d652e20506c6561736520636865636b20617267756d656e74732e", + "id": 965, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2502:58:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_141dfda9ec7d030d71a0272572dd425cf90676e5296d5f58002425f3caea3960", + "typeString": "literal_string \"Error: Unable to set token name. Please check arguments.\"" + }, + "value": "Error: Unable to set token name. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_141dfda9ec7d030d71a0272572dd425cf90676e5296d5f58002425f3caea3960", + "typeString": "literal_string \"Error: Unable to set token name. Please check arguments.\"" + } + ], + "id": 960, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2461:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 966, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2461:100:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 967, + "nodeType": "ExpressionStatement", + "src": "2461:100:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 971, + "name": "_symbol", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 943, + "src": "2596:7:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 969, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "2577:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 970, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 1780, + "src": "2577:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) returns (bool)" + } + }, + "id": 972, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2577:27:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420746f6b656e2073796d626f6c2e20506c6561736520636865636b20617267756d656e74732e", + "id": 973, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2614:60:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_a4d419aaf1b7e0c1b217a216005ff121a20a3a58ed5048acbd3d22a85502af69", + "typeString": "literal_string \"Error: Unable to set token symbol. Please check arguments.\"" + }, + "value": "Error: Unable to set token symbol. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_a4d419aaf1b7e0c1b217a216005ff121a20a3a58ed5048acbd3d22a85502af69", + "typeString": "literal_string \"Error: Unable to set token symbol. Please check arguments.\"" + } + ], + "id": 968, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2569:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 974, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2569:106:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 975, + "nodeType": "ExpressionStatement", + "src": "2569:106:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 979, + "name": "_tla", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 945, + "src": "2707:4:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 977, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "2691:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 978, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setTokenTLA", + "nodeType": "MemberAccess", + "referencedDeclaration": 1814, + "src": "2691:15:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) returns (bool)" + } + }, + "id": 980, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2691:21:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420746f6b656e20544c412e20506c6561736520636865636b20617267756d656e74732e", + "id": 981, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2722:57:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7221954eb7ab5ca7d7e112df96ffa1ba108181fc69cf565d48f56781bc167176", + "typeString": "literal_string \"Error: Unable to set token TLA. Please check arguments.\"" + }, + "value": "Error: Unable to set token TLA. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7221954eb7ab5ca7d7e112df96ffa1ba108181fc69cf565d48f56781bc167176", + "typeString": "literal_string \"Error: Unable to set token TLA. Please check arguments.\"" + } + ], + "id": 976, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2683:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 982, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2683:97:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 983, + "nodeType": "ExpressionStatement", + "src": "2683:97:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 987, + "name": "_version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 947, + "src": "2816:8:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 985, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "2796:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 986, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setTokenVersion", + "nodeType": "MemberAccess", + "referencedDeclaration": 1848, + "src": "2796:19:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) returns (bool)" + } + }, + "id": 988, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2796:29:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420746f6b656e2076657273696f6e2e20506c6561736520636865636b20617267756d656e74732e", + "id": 989, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2835:61:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0e049f6dc7ca1210cdbb63f5bd5546abce5203f36e68544787d7650cbf630ddb", + "typeString": "literal_string \"Error: Unable to set token version. Please check arguments.\"" + }, + "value": "Error: Unable to set token version. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0e049f6dc7ca1210cdbb63f5bd5546abce5203f36e68544787d7650cbf630ddb", + "typeString": "literal_string \"Error: Unable to set token version. Please check arguments.\"" + } + ], + "id": 984, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2788:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 990, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2788:109:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 991, + "nodeType": "ExpressionStatement", + "src": "2788:109:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 995, + "name": "_symbol", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 943, + "src": "2934:7:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 996, + "name": "_decimals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 949, + "src": "2943:9:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 993, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "2913:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 994, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setTokenDecimals", + "nodeType": "MemberAccess", + "referencedDeclaration": 1882, + "src": "2913:20:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,uint256) returns (bool)" + } + }, + "id": 997, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2913:40:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420746f6b656e20646563696d616c732e20506c6561736520636865636b20617267756d656e74732e", + "id": 998, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2963:62:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_984353017a3e5d4b2995ed8ec56faa3d144c96f6e7a16298eed064720b2a0901", + "typeString": "literal_string \"Error: Unable to set token decimals. Please check arguments.\"" + }, + "value": "Error: Unable to set token decimals. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_984353017a3e5d4b2995ed8ec56faa3d144c96f6e7a16298eed064720b2a0901", + "typeString": "literal_string \"Error: Unable to set token decimals. Please check arguments.\"" + } + ], + "id": 992, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2905:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 999, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2905:121:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1000, + "nodeType": "ExpressionStatement", + "src": "2905:121:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1004, + "name": "_feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 951, + "src": "3061:12:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1002, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "3042:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1003, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2086, + "src": "3042:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) returns (bool)" + } + }, + "id": 1005, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3042:32:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e74726163742e20506c6561736520636865636b20617267756d656e74732e", + "id": 1006, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3084:60:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d56731c6af5d7a18359bcc1d0d4d9e58ed62ffcb6e170e5fa9cb217035b6bedf", + "typeString": "literal_string \"Error: Unable to set fee contract. Please check arguments.\"" + }, + "value": "Error: Unable to set fee contract. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d56731c6af5d7a18359bcc1d0d4d9e58ed62ffcb6e170e5fa9cb217035b6bedf", + "typeString": "literal_string \"Error: Unable to set fee contract. Please check arguments.\"" + } + ], + "id": 1001, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "3034:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1007, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3034:111:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1008, + "nodeType": "ExpressionStatement", + "src": "3034:111:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1012, + "name": "_symbol", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 943, + "src": "3181:7:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1013, + "name": "_fxUSDBPSRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 953, + "src": "3190:13:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1010, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "3161:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1011, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFxUSDBPSRate", + "nodeType": "MemberAccess", + "referencedDeclaration": 4526, + "src": "3161:19:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,uint256) returns (bool)" + } + }, + "id": 1014, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3161:43:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066782055534420626173697320706f696e747320726174652e20506c6561736520636865636b20617267756d656e74732e", + "id": 1015, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3214:72:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_089d75b9656e8f27becbd3baa3fa44d6933e03b685d6a5a6a71eef402959560e", + "typeString": "literal_string \"Error: Unable to set fx USD basis points rate. Please check arguments.\"" + }, + "value": "Error: Unable to set fx USD basis points rate. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_089d75b9656e8f27becbd3baa3fa44d6933e03b685d6a5a6a71eef402959560e", + "typeString": "literal_string \"Error: Unable to set fx USD basis points rate. Please check arguments.\"" + } + ], + "id": 1009, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "3153:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1016, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3153:134:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1017, + "nodeType": "ExpressionStatement", + "src": "3153:134:5" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1018, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3302:4:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 959, + "id": 1019, + "nodeType": "Return", + "src": "3295:11:5" + } + ] + }, + "documentation": "@notice Sets erc20 globals and fee paramters\n@param _name Full token name 'USD by token.io'\n@param _symbol Symbol name 'USDx'\n@param _tla Three letter abbreviation 'USD'\n@param _version Release version 'v0.0.1'\n@param _decimals Decimal precision\n@param _feeContract Address of fee contract\n@return { \"success\" : \"Returns true if successfully called from another contract\"}", + "id": 1021, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 956, + "modifierName": { + "argumentTypes": null, + "id": 955, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "2413:9:5", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2413:9:5" + } + ], + "name": "setParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 954, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 941, + "name": "_name", + "nodeType": "VariableDeclaration", + "scope": 1021, + "src": "2266:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 940, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2266:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 943, + "name": "_symbol", + "nodeType": "VariableDeclaration", + "scope": 1021, + "src": "2284:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 942, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2284:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 945, + "name": "_tla", + "nodeType": "VariableDeclaration", + "scope": 1021, + "src": "2304:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 944, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2304:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 947, + "name": "_version", + "nodeType": "VariableDeclaration", + "scope": 1021, + "src": "2321:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 946, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2321:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 949, + "name": "_decimals", + "nodeType": "VariableDeclaration", + "scope": 1021, + "src": "2342:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 948, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2342:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 951, + "name": "_feeContract", + "nodeType": "VariableDeclaration", + "scope": 1021, + "src": "2362:20:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 950, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2362:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 953, + "name": "_fxUSDBPSRate", + "nodeType": "VariableDeclaration", + "scope": 1021, + "src": "2388:18:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 952, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2388:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2260:152:5" + }, + "payable": false, + "returnParameters": { + "id": 959, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 958, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1021, + "src": "2439:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 957, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2439:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2438:14:5" + }, + "scope": 1335, + "src": "2242:1071:5", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1033, + "nodeType": "Block", + "src": "3468:53:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1029, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "3508:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1028, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3500:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1030, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3500:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1026, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "3483:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1027, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenName", + "nodeType": "MemberAccess", + "referencedDeclaration": 2392, + "src": "3483:16:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1031, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3483:31:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 1025, + "id": 1032, + "nodeType": "Return", + "src": "3476:38:5" + } + ] + }, + "documentation": "@notice Gets name of token\n@return {\"_name\" : \"Returns name of token\"}", + "id": 1034, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "name", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1022, + "nodeType": "ParameterList", + "parameters": [], + "src": "3430:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1025, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1024, + "name": "_name", + "nodeType": "VariableDeclaration", + "scope": 1034, + "src": "3454:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1023, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3454:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3453:14:5" + }, + "scope": 1335, + "src": "3417:104:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1046, + "nodeType": "Block", + "src": "3686:55:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1042, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "3728:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1041, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3720:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1043, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3720:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1039, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "3701:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1040, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2418, + "src": "3701:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1044, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3701:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 1038, + "id": 1045, + "nodeType": "Return", + "src": "3694:40:5" + } + ] + }, + "documentation": "@notice Gets symbol of token\n@return {\"_symbol\" : \"Returns symbol of token\"}", + "id": 1047, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "symbol", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1035, + "nodeType": "ParameterList", + "parameters": [], + "src": "3646:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1038, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1037, + "name": "_symbol", + "nodeType": "VariableDeclaration", + "scope": 1047, + "src": "3670:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1036, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3670:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3669:16:5" + }, + "scope": 1335, + "src": "3631:110:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1059, + "nodeType": "Block", + "src": "3935:52:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1055, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "3974:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1054, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3966:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1056, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3966:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1052, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "3950:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1053, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenTLA", + "nodeType": "MemberAccess", + "referencedDeclaration": 2444, + "src": "3950:15:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1057, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3950:30:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 1051, + "id": 1058, + "nodeType": "Return", + "src": "3943:37:5" + } + ] + }, + "documentation": "@notice Gets three-letter-abbreviation of token\n@return {\"_tla\" : \"Returns three-letter-abbreviation of token\"}", + "id": 1060, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "tla", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1048, + "nodeType": "ParameterList", + "parameters": [], + "src": "3898:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1051, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1050, + "name": "_tla", + "nodeType": "VariableDeclaration", + "scope": 1060, + "src": "3922:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1049, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3922:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3921:13:5" + }, + "scope": 1335, + "src": "3886:101:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1072, + "nodeType": "Block", + "src": "4157:56:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1068, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "4200:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1067, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4192:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1069, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4192:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1065, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "4172:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1066, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenVersion", + "nodeType": "MemberAccess", + "referencedDeclaration": 2470, + "src": "4172:19:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1070, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4172:34:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 1064, + "id": 1071, + "nodeType": "Return", + "src": "4165:41:5" + } + ] + }, + "documentation": "@notice Gets version of token\n@return {\"_version\" : \"Returns version of token\"}", + "id": 1073, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "version", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1061, + "nodeType": "ParameterList", + "parameters": [], + "src": "4116:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1064, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1063, + "name": "_version", + "nodeType": "VariableDeclaration", + "scope": 1073, + "src": "4140:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1062, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "4140:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4139:17:5" + }, + "scope": 1335, + "src": "4100:113:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1088, + "nodeType": "Block", + "src": "4387:77:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1083, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "4450:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1082, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4442:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1084, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4442:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1080, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "4423:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1081, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2418, + "src": "4423:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1085, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4423:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 1078, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "4402:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1079, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenDecimals", + "nodeType": "MemberAccess", + "referencedDeclaration": 2496, + "src": "4402:20:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) view returns (uint256)" + } + }, + "id": 1086, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4402:55:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1077, + "id": 1087, + "nodeType": "Return", + "src": "4395:62:5" + } + ] + }, + "documentation": "@notice Gets decimals of token\n@return {\"_decimals\" : \"Returns number of decimals\"}", + "id": 1089, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "decimals", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1074, + "nodeType": "ParameterList", + "parameters": [], + "src": "4347:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1077, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1076, + "name": "_decimals", + "nodeType": "VariableDeclaration", + "scope": 1089, + "src": "4371:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1075, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "4371:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4370:16:5" + }, + "scope": 1335, + "src": "4330:134:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1104, + "nodeType": "Block", + "src": "4650:75:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1099, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "4711:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1098, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4703:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1100, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4703:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1096, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "4684:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1097, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2418, + "src": "4684:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1101, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4684:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 1094, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "4665:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1095, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSupply", + "nodeType": "MemberAccess", + "referencedDeclaration": 2746, + "src": "4665:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) view returns (uint256)" + } + }, + "id": 1102, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4665:53:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1093, + "id": 1103, + "nodeType": "Return", + "src": "4658:60:5" + } + ] + }, + "documentation": "@notice Gets total supply of token\n@return {\"supply\" : \"Returns current total supply of token\"}", + "id": 1105, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "totalSupply", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1090, + "nodeType": "ParameterList", + "parameters": [], + "src": "4613:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1093, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1092, + "name": "supply", + "nodeType": "VariableDeclaration", + "scope": 1105, + "src": "4637:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1091, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "4637:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4636:13:5" + }, + "scope": 1335, + "src": "4593:132:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1126, + "nodeType": "Block", + "src": "5050:96:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1119, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "5114:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1118, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5106:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1120, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5106:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1116, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "5087:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1117, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2418, + "src": "5087:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1121, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5087:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1122, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1107, + "src": "5122:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1123, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1109, + "src": "5131:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1114, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "5065:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1115, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenAllowance", + "nodeType": "MemberAccess", + "referencedDeclaration": 2784, + "src": "5065:21:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,address) view returns (uint256)" + } + }, + "id": 1124, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5065:74:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1113, + "id": 1125, + "nodeType": "Return", + "src": "5058:81:5" + } + ] + }, + "documentation": "@notice Gets allowance that spender has with approver\n@param account Address of approver\n@param spender Address of spender\n@return {\"amount\" : \"Returns allowance of given account and spender\"}", + "id": 1127, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "allowance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1110, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1107, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 1127, + "src": "4982:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1106, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4982:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1109, + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 1127, + "src": "4999:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1108, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4999:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4981:34:5" + }, + "payable": false, + "returnParameters": { + "id": 1113, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1112, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1127, + "src": "5037:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1111, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5037:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5036:13:5" + }, + "scope": 1335, + "src": "4963:183:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1145, + "nodeType": "Block", + "src": "5377:85:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1139, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "5439:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1138, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5431:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5431:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1136, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "5412:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1137, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2418, + "src": "5412:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1141, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5412:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1142, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1129, + "src": "5447:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1134, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "5392:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1135, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenBalance", + "nodeType": "MemberAccess", + "referencedDeclaration": 2816, + "src": "5392:19:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address) view returns (uint256)" + } + }, + "id": 1143, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5392:63:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1133, + "id": 1144, + "nodeType": "Return", + "src": "5385:70:5" + } + ] + }, + "documentation": "@notice Gets balance of account\n@param account Address for balance lookup\n@return {\"balance\" : \"Returns balance amount\"}", + "id": 1146, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "balanceOf", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1130, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1129, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 1146, + "src": "5325:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1128, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5325:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5324:17:5" + }, + "payable": false, + "returnParameters": { + "id": 1133, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1132, + "name": "balance", + "nodeType": "VariableDeclaration", + "scope": 1146, + "src": "5363:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1131, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5363:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5362:14:5" + }, + "scope": 1335, + "src": "5306:156:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1193, + "nodeType": "Block", + "src": "5859:295:5", + "statements": [ + { + "assignments": [ + 1162 + ], + "declarations": [ + { + "constant": false, + "id": 1162, + "name": "feeContract", + "nodeType": "VariableDeclaration", + "scope": 1194, + "src": "5867:19:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1161, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5867:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1169, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1166, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "5916:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1165, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5908:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1167, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5908:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1163, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "5889:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1164, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2720, + "src": "5889:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 1168, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5889:33:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5867:55:5" + }, + { + "expression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1172, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1162, + "src": "5961:11:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1170, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "5947:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1171, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeBPS", + "nodeType": "MemberAccess", + "referencedDeclaration": 2522, + "src": "5947:13:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1173, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5947:26:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1176, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1162, + "src": "5997:11:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1174, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "5983:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1175, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMin", + "nodeType": "MemberAccess", + "referencedDeclaration": 2548, + "src": "5983:13:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1177, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5983:26:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1180, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1162, + "src": "6033:11:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1178, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "6019:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1179, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMax", + "nodeType": "MemberAccess", + "referencedDeclaration": 2574, + "src": "6019:13:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1181, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6019:26:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1184, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1162, + "src": "6070:11:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1182, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "6055:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1183, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeFlat", + "nodeType": "MemberAccess", + "referencedDeclaration": 2600, + "src": "6055:14:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1185, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6055:27:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1188, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1162, + "src": "6106:11:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1186, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "6092:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1187, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMsg", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "6092:13:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bytes memory)" + } + }, + "id": 1189, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6092:26:5", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "argumentTypes": null, + "id": 1190, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1162, + "src": "6128:11:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 1191, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5937:210:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_address_$", + "typeString": "tuple(uint256,uint256,uint256,uint256,bytes memory,address)" + } + }, + "functionReturnParameters": 1160, + "id": 1192, + "nodeType": "Return", + "src": "5930:217:5" + } + ] + }, + "documentation": "@notice Gets fee parameters\n@return {\n\"bps\":\"Fee amount as a mesuare of basis points\",\n\"min\":\"Minimum fee amount\",\n\"max\":\"Maximum fee amount\",\n\"flat\":\"Flat fee amount\",\n\"contract\":\"Address of fee contract\"\n}", + "id": 1194, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getFeeParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1147, + "nodeType": "ParameterList", + "parameters": [], + "src": "5760:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1160, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1149, + "name": "bps", + "nodeType": "VariableDeclaration", + "scope": 1194, + "src": "5784:8:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1148, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5784:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1151, + "name": "min", + "nodeType": "VariableDeclaration", + "scope": 1194, + "src": "5794:8:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1150, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5794:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1153, + "name": "max", + "nodeType": "VariableDeclaration", + "scope": 1194, + "src": "5804:8:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1152, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5804:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1155, + "name": "flat", + "nodeType": "VariableDeclaration", + "scope": 1194, + "src": "5814:9:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1154, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5814:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1157, + "name": "feeMsg", + "nodeType": "VariableDeclaration", + "scope": 1194, + "src": "5825:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1156, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5825:5:5", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1159, + "name": "feeAccount", + "nodeType": "VariableDeclaration", + "scope": 1194, + "src": "5839:18:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1158, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5839:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5783:75:5" + }, + "scope": 1335, + "src": "5739:415:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1212, + "nodeType": "Block", + "src": "6453:82:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1206, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "6513:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1205, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6505:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1207, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6505:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1203, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "6486:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1204, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2720, + "src": "6486:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 1208, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6486:33:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1209, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1196, + "src": "6521:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1201, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "6468:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1202, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "calculateFees", + "nodeType": "MemberAccess", + "referencedDeclaration": 2988, + "src": "6468:17:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) view returns (uint256)" + } + }, + "id": 1210, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6468:60:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1200, + "id": 1211, + "nodeType": "Return", + "src": "6461:67:5" + } + ] + }, + "documentation": "@notice Calculates fee of a given transfer amount\n@param amount Amount to calculcate fee value\n@return {\"fees\": \"Returns the calculated transaction fees based on the fee contract parameters\"}", + "id": 1213, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "calculateFees", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1197, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1196, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1213, + "src": "6408:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1195, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "6408:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6407:13:5" + }, + "payable": false, + "returnParameters": { + "id": 1200, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1199, + "name": "fees", + "nodeType": "VariableDeclaration", + "scope": 1213, + "src": "6442:9:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1198, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "6442:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6441:11:5" + }, + "scope": 1335, + "src": "6385:150:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1242, + "nodeType": "Block", + "src": "6854:288:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1230, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "7008:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1229, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7000:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1231, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7000:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1227, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "6981:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1228, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2418, + "src": "6981:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1232, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6981:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1233, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1215, + "src": "7016:2:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1234, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1217, + "src": "7020:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "hexValue": "307830", + "id": 1235, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7028:5:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_77b7d82d931e1a403db0240b08c0716665eec4664af617c457918e4a67bc1810", + "typeString": "literal_string \"0x0\"" + }, + "value": "0x0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_stringliteral_77b7d82d931e1a403db0240b08c0716665eec4664af617c457918e4a67bc1810", + "typeString": "literal_string \"0x0\"" + } + ], + "expression": { + "argumentTypes": null, + "id": 1225, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "6968:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1226, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "transfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 3140, + "src": "6968:12:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,uint256,bytes memory) returns (bool)" + } + }, + "id": 1236, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6968:66:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207472616e736665722066756e64732e20506c6561736520636865636b20796f757220706172616d65746572732e", + "id": 1237, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7044:64:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7b56f975cae833aef0f2ad6bba848437a58a03519ddd4635658465a8db99bc8b", + "typeString": "literal_string \"Error: Unable to transfer funds. Please check your parameters.\"" + }, + "value": "Error: Unable to transfer funds. Please check your parameters." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7b56f975cae833aef0f2ad6bba848437a58a03519ddd4635658465a8db99bc8b", + "typeString": "literal_string \"Error: Unable to transfer funds. Please check your parameters.\"" + } + ], + "id": 1224, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "6951:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1238, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6951:165:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1239, + "nodeType": "ExpressionStatement", + "src": "6951:165:5" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1240, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7131:4:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1223, + "id": 1241, + "nodeType": "Return", + "src": "7124:11:5" + } + ] + }, + "documentation": "@notice transfers 'amount' from msg.sender to a receiving account 'to'\n@param to Receiving address\n@param amount Transfer amount\n@return {\"success\" : \"Returns true if transfer succeeds\"}", + "id": 1243, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 1220, + "modifierName": { + "argumentTypes": null, + "id": 1219, + "name": "notDeprecated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1334, + "src": "6817:13:5", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "6817:13:5" + } + ], + "name": "transfer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1218, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1215, + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 1243, + "src": "6785:10:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1214, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6785:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1217, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1243, + "src": "6797:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1216, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "6797:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6784:25:5" + }, + "payable": false, + "returnParameters": { + "id": 1223, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1222, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1243, + "src": "6840:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1221, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6840:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6839:14:5" + }, + "scope": 1335, + "src": "6767:375:5", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1275, + "nodeType": "Block", + "src": "7522:371:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1262, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "7685:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1261, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7677:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1263, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7677:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1259, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "7658:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1260, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2418, + "src": "7658:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1264, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7658:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1265, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1245, + "src": "7693:4:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1266, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1247, + "src": "7699:2:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1267, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1249, + "src": "7703:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "hexValue": "307830", + "id": 1268, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7711:5:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_77b7d82d931e1a403db0240b08c0716665eec4664af617c457918e4a67bc1810", + "typeString": "literal_string \"0x0\"" + }, + "value": "0x0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_stringliteral_77b7d82d931e1a403db0240b08c0716665eec4664af617c457918e4a67bc1810", + "typeString": "literal_string \"0x0\"" + } + ], + "expression": { + "argumentTypes": null, + "id": 1257, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "7641:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1258, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "transferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 3236, + "src": "7641:16:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,address,uint256,bytes memory) returns (bool)" + } + }, + "id": 1269, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7641:76:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207472616e736665722066756e64732e20506c6561736520636865636b20796f757220706172616d657465727320616e6420656e7375726520746865207370656e646572206861732074686520617070726f76656420616d6f756e74206f662066756e647320746f207472616e736665722e", + "id": 1270, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7727:132:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_90b3ee7dad40e5e7ebb3851f6571fdf83a7fec9d6544d7d132d092fa849919cf", + "typeString": "literal_string \"Error: Unable to transfer funds. Please check your parameters and ensure the spender has the approved amount of funds to transfer.\"" + }, + "value": "Error: Unable to transfer funds. Please check your parameters and ensure the spender has the approved amount of funds to transfer." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_90b3ee7dad40e5e7ebb3851f6571fdf83a7fec9d6544d7d132d092fa849919cf", + "typeString": "literal_string \"Error: Unable to transfer funds. Please check your parameters and ensure the spender has the approved amount of funds to transfer.\"" + } + ], + "id": 1256, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "7624:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1271, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7624:243:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1272, + "nodeType": "ExpressionStatement", + "src": "7624:243:5" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1273, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7882:4:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1255, + "id": 1274, + "nodeType": "Return", + "src": "7875:11:5" + } + ] + }, + "documentation": "@notice spender transfers from approvers account to the reciving account\n@param from Approver's address\n@param to Receiving address\n@param amount Transfer amount\n@return {\"success\" : \"Returns true if transferFrom succeeds\"}", + "id": 1276, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 1252, + "modifierName": { + "argumentTypes": null, + "id": 1251, + "name": "notDeprecated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1334, + "src": "7485:13:5", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "7485:13:5" + } + ], + "name": "transferFrom", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1250, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1245, + "name": "from", + "nodeType": "VariableDeclaration", + "scope": 1276, + "src": "7439:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1244, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7439:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1247, + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 1276, + "src": "7453:10:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1246, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7453:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1249, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1276, + "src": "7465:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1248, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "7465:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7438:39:5" + }, + "payable": false, + "returnParameters": { + "id": 1255, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1254, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1276, + "src": "7508:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1253, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7508:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7507:14:5" + }, + "scope": 1335, + "src": "7417:476:5", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1298, + "nodeType": "Block", + "src": "8190:315:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1290, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1278, + "src": "8326:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1291, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1280, + "src": "8335:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1288, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "8305:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1289, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "approveAllowance", + "nodeType": "MemberAccess", + "referencedDeclaration": 3508, + "src": "8305:20:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 1292, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8305:37:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20617070726f766520616c6c6f77616e636520666f72207370656e6465722e20506c6561736520656e73757265207370656e646572206973206e6f74206e756c6c20616e6420646f6573206e6f74206861766520612066726f7a656e2062616c616e63652e", + "id": 1293, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8352:119:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_10872a80d40cd7a7ea8407e27ca3b5f442e099403eb78ad6b966b1054a4f032f", + "typeString": "literal_string \"Error: Unable to approve allowance for spender. Please ensure spender is not null and does not have a frozen balance.\"" + }, + "value": "Error: Unable to approve allowance for spender. Please ensure spender is not null and does not have a frozen balance." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_10872a80d40cd7a7ea8407e27ca3b5f442e099403eb78ad6b966b1054a4f032f", + "typeString": "literal_string \"Error: Unable to approve allowance for spender. Please ensure spender is not null and does not have a frozen balance.\"" + } + ], + "id": 1287, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "8288:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1294, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8288:191:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1295, + "nodeType": "ExpressionStatement", + "src": "8288:191:5" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1296, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8494:4:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1286, + "id": 1297, + "nodeType": "Return", + "src": "8487:11:5" + } + ] + }, + "documentation": "@notice approves spender a given amount\n@param spender Spender's address\n@param amount Allowance amount\n@return {\"success\" : \"Returns true if approve succeeds\"}", + "id": 1299, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 1283, + "modifierName": { + "argumentTypes": null, + "id": 1282, + "name": "notDeprecated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1334, + "src": "8153:13:5", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "8153:13:5" + } + ], + "name": "approve", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1281, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1278, + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 1299, + "src": "8116:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1277, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8116:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1280, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1299, + "src": "8133:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1279, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "8133:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8115:30:5" + }, + "payable": false, + "returnParameters": { + "id": 1286, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1285, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1299, + "src": "8176:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1284, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8176:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8175:14:5" + }, + "scope": 1335, + "src": "8099:406:5", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1318, + "nodeType": "Block", + "src": "8723:131:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1310, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "8773:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1309, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8765:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1311, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8765:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1307, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "8739:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1308, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setDeprecatedContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 4172, + "src": "8739:25:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) returns (bool)" + } + }, + "id": 1312, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8739:40:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2064657072656361746520636f6e747261637421", + "id": 1313, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8789:38:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f549c81276a394c8d1eccc4a6bca4eec7c9bb1e25bd84511bd278b767e7ca4e8", + "typeString": "literal_string \"Error: Unable to deprecate contract!\"" + }, + "value": "Error: Unable to deprecate contract!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_f549c81276a394c8d1eccc4a6bca4eec7c9bb1e25bd84511bd278b767e7ca4e8", + "typeString": "literal_string \"Error: Unable to deprecate contract!\"" + } + ], + "id": 1306, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "8731:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1314, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8731:97:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1315, + "nodeType": "ExpressionStatement", + "src": "8731:97:5" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1316, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8843:4:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1305, + "id": 1317, + "nodeType": "Return", + "src": "8836:11:5" + } + ] + }, + "documentation": "@notice gets currency status of contract\n@return {\"deprecated\" : \"Returns true if deprecated, false otherwise\"}", + "id": 1319, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 1302, + "modifierName": { + "argumentTypes": null, + "id": 1301, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "8687:9:5", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "8687:9:5" + } + ], + "name": "deprecateInterface", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1300, + "nodeType": "ParameterList", + "parameters": [], + "src": "8677:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1305, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1304, + "name": "deprecated", + "nodeType": "VariableDeclaration", + "scope": 1319, + "src": "8706:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1303, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8706:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8705:17:5" + }, + "scope": 1335, + "src": "8650:204:5", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1333, + "nodeType": "Block", + "src": "8885:198:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1328, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "8952:40:5", + "subExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1325, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "8986:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1324, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8978:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1326, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8978:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1322, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "8953:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1323, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "isContractDeprecated", + "nodeType": "MemberAccess", + "referencedDeclaration": 4198, + "src": "8953:24:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bool)" + } + }, + "id": 1327, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8953:39:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20436f6e747261637420686173206265656e20646570726563617465642c2063616e6e6f7420706572666f726d206f7065726174696f6e21", + "id": 1329, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9002:64:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_a6979b55ecdc4b5fbdddeea2b203ef30bc5c99bf716d9b4a8c9faef6ad0dbbcc", + "typeString": "literal_string \"Error: Contract has been deprecated, cannot perform operation!\"" + }, + "value": "Error: Contract has been deprecated, cannot perform operation!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_a6979b55ecdc4b5fbdddeea2b203ef30bc5c99bf716d9b4a8c9faef6ad0dbbcc", + "typeString": "literal_string \"Error: Contract has been deprecated, cannot perform operation!\"" + } + ], + "id": 1321, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "8944:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1330, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8944:123:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1331, + "nodeType": "ExpressionStatement", + "src": "8944:123:5" + }, + { + "id": 1332, + "nodeType": "PlaceholderStatement", + "src": "9075:1:5" + } + ] + }, + "documentation": null, + "id": 1334, + "name": "notDeprecated", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 1320, + "nodeType": "ParameterList", + "parameters": [], + "src": "8882:2:5" + }, + "src": "8860:223:5", + "visibility": "internal" + } + ], + "scope": 1336, + "src": "1060:8028:5" + } + ], + "src": "0:9089:5" + }, + "legacyAST": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOERC20.sol", + "exportedSymbols": { + "TokenIOERC20": [ + 1335 + ] + }, + "id": 1336, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 908, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:5" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 909, + "nodeType": "ImportDirective", + "scope": 1336, + "sourceUnit": 185, + "src": "25:23:5", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 910, + "nodeType": "ImportDirective", + "scope": 1336, + "sourceUnit": 5226, + "src": "49:30:5", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 911, + "nodeType": "ImportDirective", + "scope": 1336, + "sourceUnit": 4607, + "src": "80:26:5", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 912, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "1085:7:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 913, + "nodeType": "InheritanceSpecifier", + "src": "1085:7:5" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 1335, + "linearizedBaseContracts": [ + 1335, + 184 + ], + "name": "TokenIOERC20", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 916, + "libraryName": { + "contractScope": null, + "id": 914, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4606, + "src": "1185:10:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4606", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "1179:37:5", + "typeName": { + "contractScope": null, + "id": 915, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1200:15:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 918, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 1335, + "src": "1219:19:5", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 917, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1219:15:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 938, + "nodeType": "Block", + "src": "1416:420:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 929, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 923, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "1708:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 925, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1629, + "src": "1708:11:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 927, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 920, + "src": "1737:16:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 926, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5225, + "src": "1722:14:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5225_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 928, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1722:32:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1708:46:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "id": 930, + "nodeType": "ExpressionStatement", + "src": "1708:46:5" + }, + { + "expression": { + "argumentTypes": null, + "id": 936, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 931, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1807:5:5", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 934, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 932, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "1813:3:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 933, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1813:10:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1807:17:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 935, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1827:4:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1807:24:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 937, + "nodeType": "ExpressionStatement", + "src": "1807:24:5" + } + ] + }, + "documentation": "@notice Constructor method for ERC20 contract\n@param _storageContract address of TokenIOStorage contract", + "id": 939, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 921, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 920, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 939, + "src": "1383:24:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 919, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1383:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1382:26:5" + }, + "payable": false, + "returnParameters": { + "id": 922, + "nodeType": "ParameterList", + "parameters": [], + "src": "1416:0:5" + }, + "scope": 1335, + "src": "1371:465:5", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1020, + "nodeType": "Block", + "src": "2453:860:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 963, + "name": "_name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 941, + "src": "2486:5:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 961, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "2469:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 962, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setTokenName", + "nodeType": "MemberAccess", + "referencedDeclaration": 1746, + "src": "2469:16:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) returns (bool)" + } + }, + "id": 964, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2469:23:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420746f6b656e206e616d652e20506c6561736520636865636b20617267756d656e74732e", + "id": 965, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2502:58:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_141dfda9ec7d030d71a0272572dd425cf90676e5296d5f58002425f3caea3960", + "typeString": "literal_string \"Error: Unable to set token name. Please check arguments.\"" + }, + "value": "Error: Unable to set token name. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_141dfda9ec7d030d71a0272572dd425cf90676e5296d5f58002425f3caea3960", + "typeString": "literal_string \"Error: Unable to set token name. Please check arguments.\"" + } + ], + "id": 960, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2461:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 966, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2461:100:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 967, + "nodeType": "ExpressionStatement", + "src": "2461:100:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 971, + "name": "_symbol", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 943, + "src": "2596:7:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 969, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "2577:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 970, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 1780, + "src": "2577:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) returns (bool)" + } + }, + "id": 972, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2577:27:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420746f6b656e2073796d626f6c2e20506c6561736520636865636b20617267756d656e74732e", + "id": 973, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2614:60:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_a4d419aaf1b7e0c1b217a216005ff121a20a3a58ed5048acbd3d22a85502af69", + "typeString": "literal_string \"Error: Unable to set token symbol. Please check arguments.\"" + }, + "value": "Error: Unable to set token symbol. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_a4d419aaf1b7e0c1b217a216005ff121a20a3a58ed5048acbd3d22a85502af69", + "typeString": "literal_string \"Error: Unable to set token symbol. Please check arguments.\"" + } + ], + "id": 968, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2569:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 974, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2569:106:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 975, + "nodeType": "ExpressionStatement", + "src": "2569:106:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 979, + "name": "_tla", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 945, + "src": "2707:4:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 977, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "2691:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 978, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setTokenTLA", + "nodeType": "MemberAccess", + "referencedDeclaration": 1814, + "src": "2691:15:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) returns (bool)" + } + }, + "id": 980, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2691:21:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420746f6b656e20544c412e20506c6561736520636865636b20617267756d656e74732e", + "id": 981, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2722:57:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7221954eb7ab5ca7d7e112df96ffa1ba108181fc69cf565d48f56781bc167176", + "typeString": "literal_string \"Error: Unable to set token TLA. Please check arguments.\"" + }, + "value": "Error: Unable to set token TLA. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7221954eb7ab5ca7d7e112df96ffa1ba108181fc69cf565d48f56781bc167176", + "typeString": "literal_string \"Error: Unable to set token TLA. Please check arguments.\"" + } + ], + "id": 976, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2683:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 982, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2683:97:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 983, + "nodeType": "ExpressionStatement", + "src": "2683:97:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 987, + "name": "_version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 947, + "src": "2816:8:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 985, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "2796:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 986, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setTokenVersion", + "nodeType": "MemberAccess", + "referencedDeclaration": 1848, + "src": "2796:19:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) returns (bool)" + } + }, + "id": 988, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2796:29:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420746f6b656e2076657273696f6e2e20506c6561736520636865636b20617267756d656e74732e", + "id": 989, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2835:61:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0e049f6dc7ca1210cdbb63f5bd5546abce5203f36e68544787d7650cbf630ddb", + "typeString": "literal_string \"Error: Unable to set token version. Please check arguments.\"" + }, + "value": "Error: Unable to set token version. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0e049f6dc7ca1210cdbb63f5bd5546abce5203f36e68544787d7650cbf630ddb", + "typeString": "literal_string \"Error: Unable to set token version. Please check arguments.\"" + } + ], + "id": 984, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2788:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 990, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2788:109:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 991, + "nodeType": "ExpressionStatement", + "src": "2788:109:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 995, + "name": "_symbol", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 943, + "src": "2934:7:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 996, + "name": "_decimals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 949, + "src": "2943:9:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 993, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "2913:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 994, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setTokenDecimals", + "nodeType": "MemberAccess", + "referencedDeclaration": 1882, + "src": "2913:20:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,uint256) returns (bool)" + } + }, + "id": 997, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2913:40:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2073657420746f6b656e20646563696d616c732e20506c6561736520636865636b20617267756d656e74732e", + "id": 998, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2963:62:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_984353017a3e5d4b2995ed8ec56faa3d144c96f6e7a16298eed064720b2a0901", + "typeString": "literal_string \"Error: Unable to set token decimals. Please check arguments.\"" + }, + "value": "Error: Unable to set token decimals. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_984353017a3e5d4b2995ed8ec56faa3d144c96f6e7a16298eed064720b2a0901", + "typeString": "literal_string \"Error: Unable to set token decimals. Please check arguments.\"" + } + ], + "id": 992, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2905:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 999, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2905:121:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1000, + "nodeType": "ExpressionStatement", + "src": "2905:121:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1004, + "name": "_feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 951, + "src": "3061:12:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1002, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "3042:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1003, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2086, + "src": "3042:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) returns (bool)" + } + }, + "id": 1005, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3042:32:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e74726163742e20506c6561736520636865636b20617267756d656e74732e", + "id": 1006, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3084:60:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d56731c6af5d7a18359bcc1d0d4d9e58ed62ffcb6e170e5fa9cb217035b6bedf", + "typeString": "literal_string \"Error: Unable to set fee contract. Please check arguments.\"" + }, + "value": "Error: Unable to set fee contract. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d56731c6af5d7a18359bcc1d0d4d9e58ed62ffcb6e170e5fa9cb217035b6bedf", + "typeString": "literal_string \"Error: Unable to set fee contract. Please check arguments.\"" + } + ], + "id": 1001, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "3034:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1007, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3034:111:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1008, + "nodeType": "ExpressionStatement", + "src": "3034:111:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1012, + "name": "_symbol", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 943, + "src": "3181:7:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1013, + "name": "_fxUSDBPSRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 953, + "src": "3190:13:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1010, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "3161:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1011, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFxUSDBPSRate", + "nodeType": "MemberAccess", + "referencedDeclaration": 4526, + "src": "3161:19:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,uint256) returns (bool)" + } + }, + "id": 1014, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3161:43:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066782055534420626173697320706f696e747320726174652e20506c6561736520636865636b20617267756d656e74732e", + "id": 1015, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3214:72:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_089d75b9656e8f27becbd3baa3fa44d6933e03b685d6a5a6a71eef402959560e", + "typeString": "literal_string \"Error: Unable to set fx USD basis points rate. Please check arguments.\"" + }, + "value": "Error: Unable to set fx USD basis points rate. Please check arguments." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_089d75b9656e8f27becbd3baa3fa44d6933e03b685d6a5a6a71eef402959560e", + "typeString": "literal_string \"Error: Unable to set fx USD basis points rate. Please check arguments.\"" + } + ], + "id": 1009, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "3153:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1016, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3153:134:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1017, + "nodeType": "ExpressionStatement", + "src": "3153:134:5" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1018, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3302:4:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 959, + "id": 1019, + "nodeType": "Return", + "src": "3295:11:5" + } + ] + }, + "documentation": "@notice Sets erc20 globals and fee paramters\n@param _name Full token name 'USD by token.io'\n@param _symbol Symbol name 'USDx'\n@param _tla Three letter abbreviation 'USD'\n@param _version Release version 'v0.0.1'\n@param _decimals Decimal precision\n@param _feeContract Address of fee contract\n@return { \"success\" : \"Returns true if successfully called from another contract\"}", + "id": 1021, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 956, + "modifierName": { + "argumentTypes": null, + "id": 955, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "2413:9:5", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2413:9:5" + } + ], + "name": "setParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 954, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 941, + "name": "_name", + "nodeType": "VariableDeclaration", + "scope": 1021, + "src": "2266:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 940, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2266:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 943, + "name": "_symbol", + "nodeType": "VariableDeclaration", + "scope": 1021, + "src": "2284:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 942, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2284:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 945, + "name": "_tla", + "nodeType": "VariableDeclaration", + "scope": 1021, + "src": "2304:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 944, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2304:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 947, + "name": "_version", + "nodeType": "VariableDeclaration", + "scope": 1021, + "src": "2321:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 946, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2321:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 949, + "name": "_decimals", + "nodeType": "VariableDeclaration", + "scope": 1021, + "src": "2342:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 948, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2342:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 951, + "name": "_feeContract", + "nodeType": "VariableDeclaration", + "scope": 1021, + "src": "2362:20:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 950, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2362:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 953, + "name": "_fxUSDBPSRate", + "nodeType": "VariableDeclaration", + "scope": 1021, + "src": "2388:18:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 952, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2388:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2260:152:5" + }, + "payable": false, + "returnParameters": { + "id": 959, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 958, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1021, + "src": "2439:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 957, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2439:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2438:14:5" + }, + "scope": 1335, + "src": "2242:1071:5", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1033, + "nodeType": "Block", + "src": "3468:53:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1029, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "3508:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1028, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3500:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1030, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3500:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1026, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "3483:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1027, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenName", + "nodeType": "MemberAccess", + "referencedDeclaration": 2392, + "src": "3483:16:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1031, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3483:31:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 1025, + "id": 1032, + "nodeType": "Return", + "src": "3476:38:5" + } + ] + }, + "documentation": "@notice Gets name of token\n@return {\"_name\" : \"Returns name of token\"}", + "id": 1034, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "name", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1022, + "nodeType": "ParameterList", + "parameters": [], + "src": "3430:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1025, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1024, + "name": "_name", + "nodeType": "VariableDeclaration", + "scope": 1034, + "src": "3454:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1023, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3454:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3453:14:5" + }, + "scope": 1335, + "src": "3417:104:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1046, + "nodeType": "Block", + "src": "3686:55:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1042, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "3728:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1041, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3720:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1043, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3720:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1039, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "3701:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1040, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2418, + "src": "3701:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1044, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3701:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 1038, + "id": 1045, + "nodeType": "Return", + "src": "3694:40:5" + } + ] + }, + "documentation": "@notice Gets symbol of token\n@return {\"_symbol\" : \"Returns symbol of token\"}", + "id": 1047, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "symbol", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1035, + "nodeType": "ParameterList", + "parameters": [], + "src": "3646:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1038, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1037, + "name": "_symbol", + "nodeType": "VariableDeclaration", + "scope": 1047, + "src": "3670:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1036, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3670:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3669:16:5" + }, + "scope": 1335, + "src": "3631:110:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1059, + "nodeType": "Block", + "src": "3935:52:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1055, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "3974:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1054, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3966:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1056, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3966:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1052, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "3950:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1053, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenTLA", + "nodeType": "MemberAccess", + "referencedDeclaration": 2444, + "src": "3950:15:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1057, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3950:30:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 1051, + "id": 1058, + "nodeType": "Return", + "src": "3943:37:5" + } + ] + }, + "documentation": "@notice Gets three-letter-abbreviation of token\n@return {\"_tla\" : \"Returns three-letter-abbreviation of token\"}", + "id": 1060, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "tla", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1048, + "nodeType": "ParameterList", + "parameters": [], + "src": "3898:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1051, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1050, + "name": "_tla", + "nodeType": "VariableDeclaration", + "scope": 1060, + "src": "3922:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1049, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3922:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3921:13:5" + }, + "scope": 1335, + "src": "3886:101:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1072, + "nodeType": "Block", + "src": "4157:56:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1068, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "4200:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1067, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4192:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1069, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4192:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1065, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "4172:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1066, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenVersion", + "nodeType": "MemberAccess", + "referencedDeclaration": 2470, + "src": "4172:19:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1070, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4172:34:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 1064, + "id": 1071, + "nodeType": "Return", + "src": "4165:41:5" + } + ] + }, + "documentation": "@notice Gets version of token\n@return {\"_version\" : \"Returns version of token\"}", + "id": 1073, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "version", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1061, + "nodeType": "ParameterList", + "parameters": [], + "src": "4116:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1064, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1063, + "name": "_version", + "nodeType": "VariableDeclaration", + "scope": 1073, + "src": "4140:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1062, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "4140:6:5", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4139:17:5" + }, + "scope": 1335, + "src": "4100:113:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1088, + "nodeType": "Block", + "src": "4387:77:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1083, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "4450:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1082, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4442:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1084, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4442:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1080, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "4423:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1081, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2418, + "src": "4423:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1085, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4423:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 1078, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "4402:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1079, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenDecimals", + "nodeType": "MemberAccess", + "referencedDeclaration": 2496, + "src": "4402:20:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) view returns (uint256)" + } + }, + "id": 1086, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4402:55:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1077, + "id": 1087, + "nodeType": "Return", + "src": "4395:62:5" + } + ] + }, + "documentation": "@notice Gets decimals of token\n@return {\"_decimals\" : \"Returns number of decimals\"}", + "id": 1089, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "decimals", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1074, + "nodeType": "ParameterList", + "parameters": [], + "src": "4347:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1077, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1076, + "name": "_decimals", + "nodeType": "VariableDeclaration", + "scope": 1089, + "src": "4371:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1075, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "4371:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4370:16:5" + }, + "scope": 1335, + "src": "4330:134:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1104, + "nodeType": "Block", + "src": "4650:75:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1099, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "4711:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1098, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4703:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1100, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4703:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1096, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "4684:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1097, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2418, + "src": "4684:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1101, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4684:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 1094, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "4665:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1095, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSupply", + "nodeType": "MemberAccess", + "referencedDeclaration": 2746, + "src": "4665:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) view returns (uint256)" + } + }, + "id": 1102, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4665:53:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1093, + "id": 1103, + "nodeType": "Return", + "src": "4658:60:5" + } + ] + }, + "documentation": "@notice Gets total supply of token\n@return {\"supply\" : \"Returns current total supply of token\"}", + "id": 1105, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "totalSupply", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1090, + "nodeType": "ParameterList", + "parameters": [], + "src": "4613:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1093, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1092, + "name": "supply", + "nodeType": "VariableDeclaration", + "scope": 1105, + "src": "4637:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1091, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "4637:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4636:13:5" + }, + "scope": 1335, + "src": "4593:132:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1126, + "nodeType": "Block", + "src": "5050:96:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1119, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "5114:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1118, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5106:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1120, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5106:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1116, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "5087:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1117, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2418, + "src": "5087:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1121, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5087:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1122, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1107, + "src": "5122:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1123, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1109, + "src": "5131:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1114, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "5065:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1115, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenAllowance", + "nodeType": "MemberAccess", + "referencedDeclaration": 2784, + "src": "5065:21:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,address) view returns (uint256)" + } + }, + "id": 1124, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5065:74:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1113, + "id": 1125, + "nodeType": "Return", + "src": "5058:81:5" + } + ] + }, + "documentation": "@notice Gets allowance that spender has with approver\n@param account Address of approver\n@param spender Address of spender\n@return {\"amount\" : \"Returns allowance of given account and spender\"}", + "id": 1127, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "allowance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1110, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1107, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 1127, + "src": "4982:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1106, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4982:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1109, + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 1127, + "src": "4999:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1108, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4999:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4981:34:5" + }, + "payable": false, + "returnParameters": { + "id": 1113, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1112, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1127, + "src": "5037:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1111, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5037:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5036:13:5" + }, + "scope": 1335, + "src": "4963:183:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1145, + "nodeType": "Block", + "src": "5377:85:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1139, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "5439:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1138, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5431:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5431:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1136, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "5412:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1137, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2418, + "src": "5412:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1141, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5412:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1142, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1129, + "src": "5447:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1134, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "5392:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1135, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenBalance", + "nodeType": "MemberAccess", + "referencedDeclaration": 2816, + "src": "5392:19:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address) view returns (uint256)" + } + }, + "id": 1143, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5392:63:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1133, + "id": 1144, + "nodeType": "Return", + "src": "5385:70:5" + } + ] + }, + "documentation": "@notice Gets balance of account\n@param account Address for balance lookup\n@return {\"balance\" : \"Returns balance amount\"}", + "id": 1146, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "balanceOf", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1130, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1129, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 1146, + "src": "5325:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1128, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5325:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5324:17:5" + }, + "payable": false, + "returnParameters": { + "id": 1133, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1132, + "name": "balance", + "nodeType": "VariableDeclaration", + "scope": 1146, + "src": "5363:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1131, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5363:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5362:14:5" + }, + "scope": 1335, + "src": "5306:156:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1193, + "nodeType": "Block", + "src": "5859:295:5", + "statements": [ + { + "assignments": [ + 1162 + ], + "declarations": [ + { + "constant": false, + "id": 1162, + "name": "feeContract", + "nodeType": "VariableDeclaration", + "scope": 1194, + "src": "5867:19:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1161, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5867:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1169, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1166, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "5916:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1165, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5908:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1167, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5908:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1163, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "5889:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1164, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2720, + "src": "5889:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 1168, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5889:33:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5867:55:5" + }, + { + "expression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1172, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1162, + "src": "5961:11:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1170, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "5947:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1171, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeBPS", + "nodeType": "MemberAccess", + "referencedDeclaration": 2522, + "src": "5947:13:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1173, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5947:26:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1176, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1162, + "src": "5997:11:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1174, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "5983:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1175, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMin", + "nodeType": "MemberAccess", + "referencedDeclaration": 2548, + "src": "5983:13:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1177, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5983:26:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1180, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1162, + "src": "6033:11:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1178, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "6019:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1179, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMax", + "nodeType": "MemberAccess", + "referencedDeclaration": 2574, + "src": "6019:13:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1181, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6019:26:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1184, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1162, + "src": "6070:11:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1182, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "6055:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1183, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeFlat", + "nodeType": "MemberAccess", + "referencedDeclaration": 2600, + "src": "6055:14:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1185, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6055:27:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1188, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1162, + "src": "6106:11:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1186, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "6092:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1187, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMsg", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "6092:13:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bytes memory)" + } + }, + "id": 1189, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6092:26:5", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "argumentTypes": null, + "id": 1190, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1162, + "src": "6128:11:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 1191, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5937:210:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_address_$", + "typeString": "tuple(uint256,uint256,uint256,uint256,bytes memory,address)" + } + }, + "functionReturnParameters": 1160, + "id": 1192, + "nodeType": "Return", + "src": "5930:217:5" + } + ] + }, + "documentation": "@notice Gets fee parameters\n@return {\n\"bps\":\"Fee amount as a mesuare of basis points\",\n\"min\":\"Minimum fee amount\",\n\"max\":\"Maximum fee amount\",\n\"flat\":\"Flat fee amount\",\n\"contract\":\"Address of fee contract\"\n}", + "id": 1194, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getFeeParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1147, + "nodeType": "ParameterList", + "parameters": [], + "src": "5760:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1160, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1149, + "name": "bps", + "nodeType": "VariableDeclaration", + "scope": 1194, + "src": "5784:8:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1148, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5784:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1151, + "name": "min", + "nodeType": "VariableDeclaration", + "scope": 1194, + "src": "5794:8:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1150, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5794:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1153, + "name": "max", + "nodeType": "VariableDeclaration", + "scope": 1194, + "src": "5804:8:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1152, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5804:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1155, + "name": "flat", + "nodeType": "VariableDeclaration", + "scope": 1194, + "src": "5814:9:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1154, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "5814:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1157, + "name": "feeMsg", + "nodeType": "VariableDeclaration", + "scope": 1194, + "src": "5825:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1156, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5825:5:5", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1159, + "name": "feeAccount", + "nodeType": "VariableDeclaration", + "scope": 1194, + "src": "5839:18:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1158, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5839:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5783:75:5" + }, + "scope": 1335, + "src": "5739:415:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1212, + "nodeType": "Block", + "src": "6453:82:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1206, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "6513:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1205, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6505:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1207, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6505:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1203, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "6486:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1204, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2720, + "src": "6486:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 1208, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6486:33:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1209, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1196, + "src": "6521:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1201, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "6468:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1202, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "calculateFees", + "nodeType": "MemberAccess", + "referencedDeclaration": 2988, + "src": "6468:17:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) view returns (uint256)" + } + }, + "id": 1210, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6468:60:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1200, + "id": 1211, + "nodeType": "Return", + "src": "6461:67:5" + } + ] + }, + "documentation": "@notice Calculates fee of a given transfer amount\n@param amount Amount to calculcate fee value\n@return {\"fees\": \"Returns the calculated transaction fees based on the fee contract parameters\"}", + "id": 1213, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "calculateFees", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1197, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1196, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1213, + "src": "6408:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1195, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "6408:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6407:13:5" + }, + "payable": false, + "returnParameters": { + "id": 1200, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1199, + "name": "fees", + "nodeType": "VariableDeclaration", + "scope": 1213, + "src": "6442:9:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1198, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "6442:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6441:11:5" + }, + "scope": 1335, + "src": "6385:150:5", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1242, + "nodeType": "Block", + "src": "6854:288:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1230, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "7008:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1229, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7000:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1231, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7000:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1227, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "6981:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1228, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2418, + "src": "6981:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1232, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6981:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1233, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1215, + "src": "7016:2:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1234, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1217, + "src": "7020:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "hexValue": "307830", + "id": 1235, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7028:5:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_77b7d82d931e1a403db0240b08c0716665eec4664af617c457918e4a67bc1810", + "typeString": "literal_string \"0x0\"" + }, + "value": "0x0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_stringliteral_77b7d82d931e1a403db0240b08c0716665eec4664af617c457918e4a67bc1810", + "typeString": "literal_string \"0x0\"" + } + ], + "expression": { + "argumentTypes": null, + "id": 1225, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "6968:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1226, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "transfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 3140, + "src": "6968:12:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,uint256,bytes memory) returns (bool)" + } + }, + "id": 1236, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6968:66:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207472616e736665722066756e64732e20506c6561736520636865636b20796f757220706172616d65746572732e", + "id": 1237, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7044:64:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7b56f975cae833aef0f2ad6bba848437a58a03519ddd4635658465a8db99bc8b", + "typeString": "literal_string \"Error: Unable to transfer funds. Please check your parameters.\"" + }, + "value": "Error: Unable to transfer funds. Please check your parameters." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7b56f975cae833aef0f2ad6bba848437a58a03519ddd4635658465a8db99bc8b", + "typeString": "literal_string \"Error: Unable to transfer funds. Please check your parameters.\"" + } + ], + "id": 1224, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "6951:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1238, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6951:165:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1239, + "nodeType": "ExpressionStatement", + "src": "6951:165:5" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1240, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7131:4:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1223, + "id": 1241, + "nodeType": "Return", + "src": "7124:11:5" + } + ] + }, + "documentation": "@notice transfers 'amount' from msg.sender to a receiving account 'to'\n@param to Receiving address\n@param amount Transfer amount\n@return {\"success\" : \"Returns true if transfer succeeds\"}", + "id": 1243, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 1220, + "modifierName": { + "argumentTypes": null, + "id": 1219, + "name": "notDeprecated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1334, + "src": "6817:13:5", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "6817:13:5" + } + ], + "name": "transfer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1218, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1215, + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 1243, + "src": "6785:10:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1214, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6785:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1217, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1243, + "src": "6797:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1216, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "6797:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6784:25:5" + }, + "payable": false, + "returnParameters": { + "id": 1223, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1222, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1243, + "src": "6840:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1221, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6840:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6839:14:5" + }, + "scope": 1335, + "src": "6767:375:5", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1275, + "nodeType": "Block", + "src": "7522:371:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1262, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "7685:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1261, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7677:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1263, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7677:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1259, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "7658:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1260, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenSymbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 2418, + "src": "7658:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (string memory)" + } + }, + "id": 1264, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7658:33:5", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1265, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1245, + "src": "7693:4:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1266, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1247, + "src": "7699:2:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1267, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1249, + "src": "7703:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "hexValue": "307830", + "id": 1268, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7711:5:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_77b7d82d931e1a403db0240b08c0716665eec4664af617c457918e4a67bc1810", + "typeString": "literal_string \"0x0\"" + }, + "value": "0x0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_stringliteral_77b7d82d931e1a403db0240b08c0716665eec4664af617c457918e4a67bc1810", + "typeString": "literal_string \"0x0\"" + } + ], + "expression": { + "argumentTypes": null, + "id": 1257, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "7641:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1258, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "transferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 3236, + "src": "7641:16:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,address,uint256,bytes memory) returns (bool)" + } + }, + "id": 1269, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7641:76:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207472616e736665722066756e64732e20506c6561736520636865636b20796f757220706172616d657465727320616e6420656e7375726520746865207370656e646572206861732074686520617070726f76656420616d6f756e74206f662066756e647320746f207472616e736665722e", + "id": 1270, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7727:132:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_90b3ee7dad40e5e7ebb3851f6571fdf83a7fec9d6544d7d132d092fa849919cf", + "typeString": "literal_string \"Error: Unable to transfer funds. Please check your parameters and ensure the spender has the approved amount of funds to transfer.\"" + }, + "value": "Error: Unable to transfer funds. Please check your parameters and ensure the spender has the approved amount of funds to transfer." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_90b3ee7dad40e5e7ebb3851f6571fdf83a7fec9d6544d7d132d092fa849919cf", + "typeString": "literal_string \"Error: Unable to transfer funds. Please check your parameters and ensure the spender has the approved amount of funds to transfer.\"" + } + ], + "id": 1256, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "7624:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1271, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7624:243:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1272, + "nodeType": "ExpressionStatement", + "src": "7624:243:5" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1273, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7882:4:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1255, + "id": 1274, + "nodeType": "Return", + "src": "7875:11:5" + } + ] + }, + "documentation": "@notice spender transfers from approvers account to the reciving account\n@param from Approver's address\n@param to Receiving address\n@param amount Transfer amount\n@return {\"success\" : \"Returns true if transferFrom succeeds\"}", + "id": 1276, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 1252, + "modifierName": { + "argumentTypes": null, + "id": 1251, + "name": "notDeprecated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1334, + "src": "7485:13:5", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "7485:13:5" + } + ], + "name": "transferFrom", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1250, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1245, + "name": "from", + "nodeType": "VariableDeclaration", + "scope": 1276, + "src": "7439:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1244, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7439:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1247, + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 1276, + "src": "7453:10:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1246, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7453:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1249, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1276, + "src": "7465:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1248, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "7465:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7438:39:5" + }, + "payable": false, + "returnParameters": { + "id": 1255, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1254, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1276, + "src": "7508:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1253, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7508:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7507:14:5" + }, + "scope": 1335, + "src": "7417:476:5", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1298, + "nodeType": "Block", + "src": "8190:315:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1290, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1278, + "src": "8326:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1291, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1280, + "src": "8335:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1288, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "8305:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1289, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "approveAllowance", + "nodeType": "MemberAccess", + "referencedDeclaration": 3508, + "src": "8305:20:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 1292, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8305:37:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20617070726f766520616c6c6f77616e636520666f72207370656e6465722e20506c6561736520656e73757265207370656e646572206973206e6f74206e756c6c20616e6420646f6573206e6f74206861766520612066726f7a656e2062616c616e63652e", + "id": 1293, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8352:119:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_10872a80d40cd7a7ea8407e27ca3b5f442e099403eb78ad6b966b1054a4f032f", + "typeString": "literal_string \"Error: Unable to approve allowance for spender. Please ensure spender is not null and does not have a frozen balance.\"" + }, + "value": "Error: Unable to approve allowance for spender. Please ensure spender is not null and does not have a frozen balance." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_10872a80d40cd7a7ea8407e27ca3b5f442e099403eb78ad6b966b1054a4f032f", + "typeString": "literal_string \"Error: Unable to approve allowance for spender. Please ensure spender is not null and does not have a frozen balance.\"" + } + ], + "id": 1287, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "8288:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1294, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8288:191:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1295, + "nodeType": "ExpressionStatement", + "src": "8288:191:5" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1296, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8494:4:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1286, + "id": 1297, + "nodeType": "Return", + "src": "8487:11:5" + } + ] + }, + "documentation": "@notice approves spender a given amount\n@param spender Spender's address\n@param amount Allowance amount\n@return {\"success\" : \"Returns true if approve succeeds\"}", + "id": 1299, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 1283, + "modifierName": { + "argumentTypes": null, + "id": 1282, + "name": "notDeprecated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1334, + "src": "8153:13:5", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "8153:13:5" + } + ], + "name": "approve", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1281, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1278, + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 1299, + "src": "8116:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1277, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8116:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1280, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1299, + "src": "8133:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1279, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "8133:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8115:30:5" + }, + "payable": false, + "returnParameters": { + "id": 1286, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1285, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1299, + "src": "8176:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1284, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8176:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8175:14:5" + }, + "scope": 1335, + "src": "8099:406:5", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1318, + "nodeType": "Block", + "src": "8723:131:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1310, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "8773:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1309, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8765:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1311, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8765:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1307, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "8739:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1308, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setDeprecatedContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 4172, + "src": "8739:25:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) returns (bool)" + } + }, + "id": 1312, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8739:40:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f2064657072656361746520636f6e747261637421", + "id": 1313, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8789:38:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f549c81276a394c8d1eccc4a6bca4eec7c9bb1e25bd84511bd278b767e7ca4e8", + "typeString": "literal_string \"Error: Unable to deprecate contract!\"" + }, + "value": "Error: Unable to deprecate contract!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_f549c81276a394c8d1eccc4a6bca4eec7c9bb1e25bd84511bd278b767e7ca4e8", + "typeString": "literal_string \"Error: Unable to deprecate contract!\"" + } + ], + "id": 1306, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "8731:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1314, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8731:97:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1315, + "nodeType": "ExpressionStatement", + "src": "8731:97:5" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1316, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8843:4:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1305, + "id": 1317, + "nodeType": "Return", + "src": "8836:11:5" + } + ] + }, + "documentation": "@notice gets currency status of contract\n@return {\"deprecated\" : \"Returns true if deprecated, false otherwise\"}", + "id": 1319, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 1302, + "modifierName": { + "argumentTypes": null, + "id": 1301, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "8687:9:5", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "8687:9:5" + } + ], + "name": "deprecateInterface", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1300, + "nodeType": "ParameterList", + "parameters": [], + "src": "8677:2:5" + }, + "payable": false, + "returnParameters": { + "id": 1305, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1304, + "name": "deprecated", + "nodeType": "VariableDeclaration", + "scope": 1319, + "src": "8706:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1303, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8706:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8705:17:5" + }, + "scope": 1335, + "src": "8650:204:5", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1333, + "nodeType": "Block", + "src": "8885:198:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1328, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "8952:40:5", + "subExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1325, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5267, + "src": "8986:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOERC20_$1335", + "typeString": "contract TokenIOERC20" + } + ], + "id": 1324, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8978:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1326, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8978:13:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1322, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 918, + "src": "8953:3:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1323, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "isContractDeprecated", + "nodeType": "MemberAccess", + "referencedDeclaration": 4198, + "src": "8953:24:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bool)" + } + }, + "id": 1327, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8953:39:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20436f6e747261637420686173206265656e20646570726563617465642c2063616e6e6f7420706572666f726d206f7065726174696f6e21", + "id": 1329, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9002:64:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_a6979b55ecdc4b5fbdddeea2b203ef30bc5c99bf716d9b4a8c9faef6ad0dbbcc", + "typeString": "literal_string \"Error: Contract has been deprecated, cannot perform operation!\"" + }, + "value": "Error: Contract has been deprecated, cannot perform operation!" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_a6979b55ecdc4b5fbdddeea2b203ef30bc5c99bf716d9b4a8c9faef6ad0dbbcc", + "typeString": "literal_string \"Error: Contract has been deprecated, cannot perform operation!\"" + } + ], + "id": 1321, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "8944:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1330, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8944:123:5", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1331, + "nodeType": "ExpressionStatement", + "src": "8944:123:5" + }, + { + "id": 1332, + "nodeType": "PlaceholderStatement", + "src": "9075:1:5" + } + ] + }, + "documentation": null, + "id": 1334, + "name": "notDeprecated", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 1320, + "nodeType": "ParameterList", + "parameters": [], + "src": "8882:2:5" + }, + "src": "8860:223:5", + "visibility": "internal" + } + ], + "scope": 1336, + "src": "1060:8028:5" + } + ], + "src": "0:9089:5" + }, + "compiler": { + "name": "solc", + "version": "0.4.24+commit.e67f0147.Emscripten.clang" + }, + "networks": { + "1": { + "events": {}, + "links": {}, + "address": "0xb8758d5dbec7202706b0420399571a65536a64c5", + "transactionHash": "0x0de5b672ffa6b410a8abba546ece92cb4b6b67c0008f552460107a17a6959a87" + }, + "4447": { + "events": {}, + "links": {}, + "address": "0x2a504b5e7ec284aca5b6f49716611237239f0b97", + "transactionHash": "0x733d92efa84b868fdddbfdbad0983443c97e202da65903f8aa82ea080338b376" + } + }, + "schemaVersion": "2.0.1", + "updatedAt": "2018-10-24T17:36:20.208Z" +} \ No newline at end of file diff --git a/deployed/mainnet-v1.0.1/TokenIOFX.json b/deployed/mainnet-v1.0.1/TokenIOFX.json new file mode 100644 index 0000000..f905273 --- /dev/null +++ b/deployed/mainnet-v1.0.1/TokenIOFX.json @@ -0,0 +1,2198 @@ +{ + "contractName": "TokenIOFX", + "abi": [ + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "allowOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "removeOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "", + "type": "address" + } + ], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "name": "_storageContract", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "AllowOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "RevokeOwnership", + "type": "event" + }, + { + "constant": false, + "inputs": [ + { + "name": "requester", + "type": "address" + }, + { + "name": "symbolA", + "type": "string" + }, + { + "name": "symbolB", + "type": "string" + }, + { + "name": "valueA", + "type": "uint256" + }, + { + "name": "valueB", + "type": "uint256" + }, + { + "name": "sigV", + "type": "uint8" + }, + { + "name": "sigR", + "type": "bytes32" + }, + { + "name": "sigS", + "type": "bytes32" + }, + { + "name": "expiration", + "type": "uint256" + } + ], + "name": "swap", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051602080611ee3833981016040908152905133600090815260208190529182208054600160ff19918216811783558054600160a060020a031916600160a060020a039094169390931783558154169091179055611e6d90819061007690396000f3006080604052600436106100535763ffffffff60e060020a6000350416634bbc142c8114610058578063666a34271461008d578063666e1b39146100ae578063987c6b9d146100cf578063f2fde38b14610194575b600080fd5b34801561006457600080fd5b50610079600160a060020a03600435166101b5565b604080519115158252519081900360200190f35b34801561009957600080fd5b50610079600160a060020a0360043516610295565b3480156100ba57600080fd5b50610079600160a060020a0360043516610372565b3480156100db57600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610079958335600160a060020a031695369560449491939091019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497505084359550505060208301359260ff60408201351692506060810135915060808101359060a00135610387565b3480156101a057600080fd5b50610079600160a060020a0360043516610454565b3360009081526020819052604081205460ff161515610244576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b3360009081526020819052604081205460ff161515610324576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b60006103a260018b8b8b8b8b8b8b8b8b63ffffffff6105b216565b1515610444576040805160e560020a62461bcd02815260206004820152604760248201527f4572726f723a20556e61626c6520746f20706572666f726d2061746f6d69632060448201527f63757272656e637920737761702e20506c6561736520636865636b207061726160648201527f6d65746572732e00000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b5060019998505050505050505050565b3360009081526020819052604081205460ff1615156104e3576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a0382161515610543576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b6000808a8a8a8a8a876040516020018087600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140186805190602001908083835b602083106106145780518252601f1990920191602091820191016105f5565b51815160209384036101000a600019018019909216911617905288519190930192880191508083835b6020831061065c5780518252601f19909201916020918201910161063d565b6001836020036101000a03801982511681845116808217855250505050505090500184815260200183815260200182815260200196505050505050506040516020818303038152906040526040518082805190602001908083835b602083106106d65780518252601f1990920191602091820191016106b7565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090506107108c338d610c3c565b151561078c576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a204f6e6c79207665726966696564206163636f756e747320636160448201527f6e20706572666f726d2063757272656e63792073776170732e00000000000000606482015290519081900360840190fd5b6107968c82610da0565b1515610812576040805160e560020a62461bcd02815260206004820152603560248201527f4572726f723a204661696c656420746f20736574207472616e73616374696f6e60448201527f2073746174757320746f2066756c66696c6c65642e0000000000000000000000606482015290519081900360840190fd5b4283101561086a576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a205472616e73616374696f6e2068617320657870697265642100604482015290519081900360640190fd5b604080516000808252602080830180855285905260ff8a168385015260608301899052608083018890529251600160a060020a038f169360019360a0808201949293601f198101939281900390910191865af11580156108ce573d6000803e3d6000fd5b50505060206040510351600160a060020a0316141515610984576040805160e560020a62461bcd02815260206004820152605660248201527f4572726f723a204164647265737320646572697665642066726f6d207472616e60448201527f73616374696f6e207369676e617475726520646f6573206e6f74206d6174636860648201527f2074686520726571756573746572206164647265737300000000000000000000608482015290519081900360a40190fd5b6109c78c8b338e8c6040805190810160405280600381526020017f307830000000000000000000000000000000000000000000000000000000000081525061105d565b1515610a43576040805160e560020a62461bcd02815260206004820152602b60248201527f4572726f723a20556e61626c6520746f207472616e736665722066756e64732060448201527f746f206163636f756e742e000000000000000000000000000000000000000000606482015290519081900360840190fd5b610a868c8a8d338b6040805190810160405280600381526020017f307830000000000000000000000000000000000000000000000000000000000081525061105d565b1515610b02576040805160e560020a62461bcd02815260206004820152602b60248201527f4572726f723a20556e61626c6520746f207472616e736665722066756e64732060448201527f746f206163636f756e742e000000000000000000000000000000000000000000606482015290519081900360840190fd5b7f8afc838de412aaa0858b29e225f1811126bc93a1e25da13505909c403d2097d18a8a8a8a87866040518080602001806020018781526020018681526020018581526020018460001916600019168152602001838103835289818151815260200191508051906020019080838360005b83811015610b8a578181015183820152602001610b72565b50505050905090810190601f168015610bb75780820380516001836020036101000a031916815260200191505b5083810382528851815288516020918201918a019080838360005b83811015610bea578181015183820152602001610bd2565b50505050905090810190601f168015610c175780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a15060019b9a5050505050505050505050565b6000610c488484611817565b1515610cea576040805160e560020a62461bcd02815260206004820152605a60248201527f4572726f723a204163636f756e74206973206e6f74207665726966696564206660448201527f6f72206f7065726174696f6e2e20506c6561736520656e73757265206163636f60648201527f756e7420686173206265656e204b594320617070726f7665642e000000000000608482015290519081900360a40190fd5b610cf48483611817565b1515610d96576040805160e560020a62461bcd02815260206004820152605a60248201527f4572726f723a204163636f756e74206973206e6f74207665726966696564206660448201527f6f72206f7065726174696f6e2e20506c6561736520656e73757265206163636f60648201527f756e7420686173206265656e204b594320617070726f7665642e000000000000608482015290519081900360a40190fd5b5060019392505050565b6000808260405160200180807f74782e737461747573000000000000000000000000000000000000000000000081525060090182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b60208310610e225780518252601f199092019160209182019101610e03565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050610e5b848461192e565b15610efc576040805160e560020a62461bcd02815260206004820152604e60248201527f4572726f723a205472616e73616374696f6e20737461747573206d757374206260448201527f652066616c7365206265666f72652073657474696e6720746865207472616e7360648201527f616374696f6e207374617475732e000000000000000000000000000000000000608482015290519081900360a40190fd5b8354604080517fabfdcced00000000000000000000000000000000000000000000000000000000815260048101849052600160248201529051600160a060020a039092169163abfdcced916044808201926020929091908290030181600087803b158015610f6957600080fd5b505af1158015610f7d573d6000803e3d6000fd5b505050506040513d6020811015610f9357600080fd5b50511515610d96576040805160e560020a62461bcd02815260206004820152606960248201527f4572726f723a20556e61626c6520746f207365742073746f726167652076616c60448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b60008080600160a060020a03861615156110e7576040805160e560020a62461bcd02815260206004820152602560248201527f4572726f723a2060746f602061646472657373206d757374206e6f742062652060448201527f6e756c6c2e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b876110f28a89611a71565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b6020831061114c5780518252601f19909201916020918201910161112d565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106111d75780518252601f1990920191602091820191016111b8565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209150876112118a88611a71565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b6020831061126b5780518252601f19909201916020918201910161124c565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106112f65780518252601f1990920191602091820191016112d7565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208f547fbd02d0f5000000000000000000000000000000000000000000000000000000008452600484018a90529451909750600160a060020a03909416955063e2a4853a945087936113c793508b92879263bd02d0f5926024808401938290030181600087803b15801561138f57600080fd5b505af11580156113a3573d6000803e3d6000fd5b505050506040513d60208110156113b957600080fd5b50519063ffffffff611bec16565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b15801561140f57600080fd5b505af1158015611423573d6000803e3d6000fd5b505050506040513d602081101561143957600080fd5b50511515611503576040805160e560020a62461bcd02815260206004820152606960248201527f4572726f723a20556e61626c6520746f207365742073746f726167652076616c60448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b8854604080517fbd02d0f5000000000000000000000000000000000000000000000000000000008152600481018490529051600160a060020a039092169163e2a4853a9184916115b0918a91869163bd02d0f59160248083019260209291908290030181600087803b15801561157857600080fd5b505af115801561158c573d6000803e3d6000fd5b505050506040513d60208110156115a257600080fd5b50519063ffffffff611c7116565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b1580156115f857600080fd5b505af115801561160c573d6000803e3d6000fd5b505050506040513d602081101561162257600080fd5b505115156116ec576040805160e560020a62461bcd02815260206004820152606960248201527f4572726f723a20556e61626c6520746f207365742073746f726167652076616c60448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b85600160a060020a031687600160a060020a03167f6f3dcde00ed34d4f404b335a65d18fb4adf74f5b817aa46f5d7c4f05c6d1e96e8a8888604051808060200184815260200180602001838103835286818151815260200191508051906020019080838360005b8381101561176b578181015183820152602001611753565b50505050905090810190601f1680156117985780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156117cb5781810151838201526020016117b3565b50505050905090810190601f1680156117f85780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a350600198975050505050505050565b60006118238383611cfb565b151561189f576040805160e560020a62461bcd02815260206004820152602a60248201527f4572726f723a204163636f756e7420646f6573206e6f742068617665204b594360448201527f20617070726f76616c2e00000000000000000000000000000000000000000000606482015290519081900360840190fd5b6118a98383611d9e565b1515611925576040805160e560020a62461bcd02815260206004820152602481018290527f4572726f723a204163636f756e7420737461747573206973206066616c73656060448201527f2e204163636f756e7420737461747573206d757374206265206074727565602e606482015290519081900360840190fd5b50600192915050565b6000808260405160200180807f74782e737461747573000000000000000000000000000000000000000000000081525060090182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b602083106119b05780518252601f199092019160209182019101611991565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547f7ae1cfca000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a039094169550637ae1cfca945060248083019491935090918290030181600087803b158015611a3d57600080fd5b505af1158015611a51573d6000803e3d6000fd5b505050506040513d6020811015611a6757600080fd5b5051949350505050565b60008060008360405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611b0e5780518252601f199092019160209182019101611aef565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015611b9b57600080fd5b505af1158015611baf573d6000803e3d6000fd5b505050506040513d6020811015611bc557600080fd5b50519050600160a060020a03811615611be057809250611be4565b8392505b505092915050565b600082821115611c6b576040805160e560020a62461bcd028152602060048201526024808201527f4572726f723a20556e73616665207375627472616374696f6e206f706572617460448201527f696f6e2100000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50900390565b600082820183811015611cf4576040805160e560020a62461bcd02815260206004820152602160248201527f4572726f723a20556e73616665206164646974696f6e206f7065726174696f6e60448201527f2100000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b9392505050565b600080611d088484611a71565b60405160200180807f6163636f756e742e6b7963000000000000000000000000000000000000000000815250600b0182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401915050604051602081830303815290604052604051808280519060200190808383602083106119b05780518252601f199092019160209182019101611991565b600080611dab8484611a71565b60405160200180807f6163636f756e742e616c6c6f7765640000000000000000000000000000000000815250600f0182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401915050604051602081830303815290604052604051808280519060200190808383602083106119b05780518252601f1990920191602091820191016119915600a165627a7a7230582020a7da2a9e4b437f969c65614da8c78fb61ffa8c962ab3046da9bc4a3e204c7f0029", + "deployedBytecode": "0x6080604052600436106100535763ffffffff60e060020a6000350416634bbc142c8114610058578063666a34271461008d578063666e1b39146100ae578063987c6b9d146100cf578063f2fde38b14610194575b600080fd5b34801561006457600080fd5b50610079600160a060020a03600435166101b5565b604080519115158252519081900360200190f35b34801561009957600080fd5b50610079600160a060020a0360043516610295565b3480156100ba57600080fd5b50610079600160a060020a0360043516610372565b3480156100db57600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610079958335600160a060020a031695369560449491939091019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497505084359550505060208301359260ff60408201351692506060810135915060808101359060a00135610387565b3480156101a057600080fd5b50610079600160a060020a0360043516610454565b3360009081526020819052604081205460ff161515610244576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b3360009081526020819052604081205460ff161515610324576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b60006103a260018b8b8b8b8b8b8b8b8b63ffffffff6105b216565b1515610444576040805160e560020a62461bcd02815260206004820152604760248201527f4572726f723a20556e61626c6520746f20706572666f726d2061746f6d69632060448201527f63757272656e637920737761702e20506c6561736520636865636b207061726160648201527f6d65746572732e00000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b5060019998505050505050505050565b3360009081526020819052604081205460ff1615156104e3576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a0382161515610543576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b6000808a8a8a8a8a876040516020018087600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140186805190602001908083835b602083106106145780518252601f1990920191602091820191016105f5565b51815160209384036101000a600019018019909216911617905288519190930192880191508083835b6020831061065c5780518252601f19909201916020918201910161063d565b6001836020036101000a03801982511681845116808217855250505050505090500184815260200183815260200182815260200196505050505050506040516020818303038152906040526040518082805190602001908083835b602083106106d65780518252601f1990920191602091820191016106b7565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090506107108c338d610c3c565b151561078c576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a204f6e6c79207665726966696564206163636f756e747320636160448201527f6e20706572666f726d2063757272656e63792073776170732e00000000000000606482015290519081900360840190fd5b6107968c82610da0565b1515610812576040805160e560020a62461bcd02815260206004820152603560248201527f4572726f723a204661696c656420746f20736574207472616e73616374696f6e60448201527f2073746174757320746f2066756c66696c6c65642e0000000000000000000000606482015290519081900360840190fd5b4283101561086a576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a205472616e73616374696f6e2068617320657870697265642100604482015290519081900360640190fd5b604080516000808252602080830180855285905260ff8a168385015260608301899052608083018890529251600160a060020a038f169360019360a0808201949293601f198101939281900390910191865af11580156108ce573d6000803e3d6000fd5b50505060206040510351600160a060020a0316141515610984576040805160e560020a62461bcd02815260206004820152605660248201527f4572726f723a204164647265737320646572697665642066726f6d207472616e60448201527f73616374696f6e207369676e617475726520646f6573206e6f74206d6174636860648201527f2074686520726571756573746572206164647265737300000000000000000000608482015290519081900360a40190fd5b6109c78c8b338e8c6040805190810160405280600381526020017f307830000000000000000000000000000000000000000000000000000000000081525061105d565b1515610a43576040805160e560020a62461bcd02815260206004820152602b60248201527f4572726f723a20556e61626c6520746f207472616e736665722066756e64732060448201527f746f206163636f756e742e000000000000000000000000000000000000000000606482015290519081900360840190fd5b610a868c8a8d338b6040805190810160405280600381526020017f307830000000000000000000000000000000000000000000000000000000000081525061105d565b1515610b02576040805160e560020a62461bcd02815260206004820152602b60248201527f4572726f723a20556e61626c6520746f207472616e736665722066756e64732060448201527f746f206163636f756e742e000000000000000000000000000000000000000000606482015290519081900360840190fd5b7f8afc838de412aaa0858b29e225f1811126bc93a1e25da13505909c403d2097d18a8a8a8a87866040518080602001806020018781526020018681526020018581526020018460001916600019168152602001838103835289818151815260200191508051906020019080838360005b83811015610b8a578181015183820152602001610b72565b50505050905090810190601f168015610bb75780820380516001836020036101000a031916815260200191505b5083810382528851815288516020918201918a019080838360005b83811015610bea578181015183820152602001610bd2565b50505050905090810190601f168015610c175780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a15060019b9a5050505050505050505050565b6000610c488484611817565b1515610cea576040805160e560020a62461bcd02815260206004820152605a60248201527f4572726f723a204163636f756e74206973206e6f74207665726966696564206660448201527f6f72206f7065726174696f6e2e20506c6561736520656e73757265206163636f60648201527f756e7420686173206265656e204b594320617070726f7665642e000000000000608482015290519081900360a40190fd5b610cf48483611817565b1515610d96576040805160e560020a62461bcd02815260206004820152605a60248201527f4572726f723a204163636f756e74206973206e6f74207665726966696564206660448201527f6f72206f7065726174696f6e2e20506c6561736520656e73757265206163636f60648201527f756e7420686173206265656e204b594320617070726f7665642e000000000000608482015290519081900360a40190fd5b5060019392505050565b6000808260405160200180807f74782e737461747573000000000000000000000000000000000000000000000081525060090182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b60208310610e225780518252601f199092019160209182019101610e03565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050610e5b848461192e565b15610efc576040805160e560020a62461bcd02815260206004820152604e60248201527f4572726f723a205472616e73616374696f6e20737461747573206d757374206260448201527f652066616c7365206265666f72652073657474696e6720746865207472616e7360648201527f616374696f6e207374617475732e000000000000000000000000000000000000608482015290519081900360a40190fd5b8354604080517fabfdcced00000000000000000000000000000000000000000000000000000000815260048101849052600160248201529051600160a060020a039092169163abfdcced916044808201926020929091908290030181600087803b158015610f6957600080fd5b505af1158015610f7d573d6000803e3d6000fd5b505050506040513d6020811015610f9357600080fd5b50511515610d96576040805160e560020a62461bcd02815260206004820152606960248201527f4572726f723a20556e61626c6520746f207365742073746f726167652076616c60448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b60008080600160a060020a03861615156110e7576040805160e560020a62461bcd02815260206004820152602560248201527f4572726f723a2060746f602061646472657373206d757374206e6f742062652060448201527f6e756c6c2e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b876110f28a89611a71565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b6020831061114c5780518252601f19909201916020918201910161112d565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106111d75780518252601f1990920191602091820191016111b8565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209150876112118a88611a71565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b6020831061126b5780518252601f19909201916020918201910161124c565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106112f65780518252601f1990920191602091820191016112d7565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208f547fbd02d0f5000000000000000000000000000000000000000000000000000000008452600484018a90529451909750600160a060020a03909416955063e2a4853a945087936113c793508b92879263bd02d0f5926024808401938290030181600087803b15801561138f57600080fd5b505af11580156113a3573d6000803e3d6000fd5b505050506040513d60208110156113b957600080fd5b50519063ffffffff611bec16565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b15801561140f57600080fd5b505af1158015611423573d6000803e3d6000fd5b505050506040513d602081101561143957600080fd5b50511515611503576040805160e560020a62461bcd02815260206004820152606960248201527f4572726f723a20556e61626c6520746f207365742073746f726167652076616c60448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b8854604080517fbd02d0f5000000000000000000000000000000000000000000000000000000008152600481018490529051600160a060020a039092169163e2a4853a9184916115b0918a91869163bd02d0f59160248083019260209291908290030181600087803b15801561157857600080fd5b505af115801561158c573d6000803e3d6000fd5b505050506040513d60208110156115a257600080fd5b50519063ffffffff611c7116565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b1580156115f857600080fd5b505af115801561160c573d6000803e3d6000fd5b505050506040513d602081101561162257600080fd5b505115156116ec576040805160e560020a62461bcd02815260206004820152606960248201527f4572726f723a20556e61626c6520746f207365742073746f726167652076616c60448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b85600160a060020a031687600160a060020a03167f6f3dcde00ed34d4f404b335a65d18fb4adf74f5b817aa46f5d7c4f05c6d1e96e8a8888604051808060200184815260200180602001838103835286818151815260200191508051906020019080838360005b8381101561176b578181015183820152602001611753565b50505050905090810190601f1680156117985780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156117cb5781810151838201526020016117b3565b50505050905090810190601f1680156117f85780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a350600198975050505050505050565b60006118238383611cfb565b151561189f576040805160e560020a62461bcd02815260206004820152602a60248201527f4572726f723a204163636f756e7420646f6573206e6f742068617665204b594360448201527f20617070726f76616c2e00000000000000000000000000000000000000000000606482015290519081900360840190fd5b6118a98383611d9e565b1515611925576040805160e560020a62461bcd02815260206004820152602481018290527f4572726f723a204163636f756e7420737461747573206973206066616c73656060448201527f2e204163636f756e7420737461747573206d757374206265206074727565602e606482015290519081900360840190fd5b50600192915050565b6000808260405160200180807f74782e737461747573000000000000000000000000000000000000000000000081525060090182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b602083106119b05780518252601f199092019160209182019101611991565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547f7ae1cfca000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a039094169550637ae1cfca945060248083019491935090918290030181600087803b158015611a3d57600080fd5b505af1158015611a51573d6000803e3d6000fd5b505050506040513d6020811015611a6757600080fd5b5051949350505050565b60008060008360405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611b0e5780518252601f199092019160209182019101611aef565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015611b9b57600080fd5b505af1158015611baf573d6000803e3d6000fd5b505050506040513d6020811015611bc557600080fd5b50519050600160a060020a03811615611be057809250611be4565b8392505b505092915050565b600082821115611c6b576040805160e560020a62461bcd028152602060048201526024808201527f4572726f723a20556e73616665207375627472616374696f6e206f706572617460448201527f696f6e2100000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50900390565b600082820183811015611cf4576040805160e560020a62461bcd02815260206004820152602160248201527f4572726f723a20556e73616665206164646974696f6e206f7065726174696f6e60448201527f2100000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b9392505050565b600080611d088484611a71565b60405160200180807f6163636f756e742e6b7963000000000000000000000000000000000000000000815250600b0182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401915050604051602081830303815290604052604051808280519060200190808383602083106119b05780518252601f199092019160209182019101611991565b600080611dab8484611a71565b60405160200180807f6163636f756e742e616c6c6f7765640000000000000000000000000000000000815250600f0182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401915050604051602081830303815290604052604051808280519060200190808383602083106119b05780518252601f1990920191602091820191016119915600a165627a7a7230582020a7da2a9e4b437f969c65614da8c78fb61ffa8c962ab3046da9bc4a3e204c7f0029", + "sourceMap": "1069:2138:6:-;;;1374:458;8:9:-1;5:2;;;30:1;27;20:12;5:2;1374:458:6;;;;;;;;;;;;;;;;1117:10:1;1111:5;:17;;;1374:458:6;1111:17:1;;;;;;:24;;1131:4;-1:-1:-1;;1111:24:1;;;;;;;1708:46:6;;-1:-1:-1;;;;;;1708:46:6;-1:-1:-1;;;;;1708:46:6;;;;;;;;;1804:24;;;;;;;;1069:2138;;;;;;;;", + "deployedSourceMap": "1069:2138:6:-;;;;;;;;;-1:-1:-1;;;1069:2138:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2127:185:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2127:185:1;-1:-1:-1;;;;;2127:185:1;;;;;;;;;;;;;;;;;;;;;;;2571:188;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2571:188:1;-1:-1:-1;;;;;2571:188:1;;;;;725:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;725:37:1;-1:-1:-1;;;;;725:37:1;;;;;2769:435:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2769:435:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2769:435:6;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2769:435:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2769:435:6;;;;-1:-1:-1;2769:435:6;-1:-1:-1;2769:435:6;;-1:-1:-1;2769:435:6;;;;;;;;-1:-1:-1;2769:435:6;;-1:-1:-1;;2769:435:6;;;-1:-1:-1;;;2769:435:6;;;;;;;;;;;;-1:-1:-1;2769:435:6;;;;;-1:-1:-1;2769:435:6;;;;;;;;;;1589:291:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1589:291:1;-1:-1:-1;;;;;1589:291:1;;;;;2127:185;1261:10;2201:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2221:21:1;;:5;:21;;;;;;;;;;;:28;;-1:-1:-1;;2221:28:1;2245:4;2221:28;;;2260:30;;;2221:5;2260:30;-1:-1:-1;2303:4:1;2127:185;;;:::o;2571:188::-;1261:10;2646:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2666:21:1;;2690:5;2666:21;;;;;;;;;;;:29;;-1:-1:-1;;2666:29:1;;;2706:31;;;2690:5;2706:31;-1:-1:-1;2750:4:1;2571:188;;;:::o;725:37::-;;;;;;;;;;;;;;;;:::o;2769:435:6:-;2973:12;3008:87;:3;3021:9;3032:7;3041;3050:6;3058;3066:4;3072;3078;3084:10;3008:87;:12;:87;:::i;:::-;2993:189;;;;;;;-1:-1:-1;;;;;2993:189:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3195:4:6;2769:435;;;;;;;;;;;:::o;1589:291:1:-;1261:10;1660:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1688:22:1;;;;1680:66;;;;;-1:-1:-1;;;;;1680:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1757:42;;-1:-1:-1;;;;;1757:42:1;;;1778:10;;1757:42;;;;;-1:-1:-1;;;;;;1805:15:1;:5;:15;;;;;;;;;;;:22;;1823:4;-1:-1:-1;;1805:22:1;;;;;;;;1839:10;1833:17;;;;;;:25;;;;;;;1823:4;1589:291::o;53098:1683:8:-;53331:12;53352:16;53398:9;53409:7;53418;53427:6;53435;53443:10;53381:73;;;;;;-1:-1:-1;;;;;53381:73:8;-1:-1:-1;;;;;53381:73:8;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;53381:73:8;;;;;;;;;;-1:-1:-1;53381:73:8;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;53381:73:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;53381:73:8;;;53371:84;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;53371:84:8;;;;;;;;;;;;;;;;53352:103;;53613:43;53628:4;53634:10;53646:9;53613:14;:43::i;:::-;53598:126;;;;;;;-1:-1:-1;;;;;53598:126:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53836:27;53848:4;53854:8;53836:11;:27::i;:::-;53821:106;;;;;;;-1:-1:-1;;;;;53821:106:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54006:3;53992:17;;;53984:61;;;;;-1:-1:-1;;;;;53984:61:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;54195:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;54195:50:8;;;:37;;;;;;;;;-1:-1:-1;;54195:37:8;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;54195:37:8;;;;;;;;-1:-1:-1;;;;;54195:50:8;;54180:162;;;;;;;-1:-1:-1;;;;;54180:162:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54422:66;54436:4;54442:7;54451:10;54463:9;54474:6;54422:66;;;;;;;;;;;;;;;;;;:13;:66::i;:::-;54407:135;;;;;;;-1:-1:-1;;;;;54407:135:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54564:66;54578:4;54584:7;54593:9;54604:10;54616:6;54564:66;;;;;;;;;;;;;;;;;;:13;:66::i;:::-;54549:135;;;;;;;-1:-1:-1;;;;;54549:135:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54696:62;54703:7;54712;54721:6;54729;54737:10;54749:8;54696:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;54696:62:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54696:62:8;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;54696:62:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54772:4:8;;53098:1683;-1:-1:-1;;;;;;;;;;;53098:1683:8:o;32271:451::-;32373:13;32409:29;32423:4;32429:8;32409:13;:29::i;:::-;32394:150;;;;;;;-1:-1:-1;;;;;32394:150:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32565:29;32579:4;32585:8;32565:13;:29::i;:::-;32550:150;;;;;;;-1:-1:-1;;;;;32550:150:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32713:4:8;32271:451;;;;;:::o;51451:574::-;51525:12;51545:10;51598:6;51568:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;51568:37:8;;;51558:48;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;51558:48:8;;;;;;;;;;;;;;;;51545:61;;51676:25;51688:4;51694:6;51676:11;:25::i;:::-;51675:26;51667:123;;;;;-1:-1:-1;;;;;51667:123:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51856:12;;:30;;;;;;;;;;;;:12;:30;;;;;;-1:-1:-1;;;;;51856:12:8;;;;:20;;:30;;;;;;;;;;;;;;;:12;;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;51856:30:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51856:30:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;51856:30:8;51848:154;;;;;;;-1:-1:-1;;;;;51848:154:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38207:943;38335:12;;;-1:-1:-1;;;;;38370:18:8;;;;38355:86;;;;;-1:-1:-1;;;;;38355:86:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38507:8;38517:31;38537:4;38543;38517:19;:31::i;:::-;38473:76;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38473:76:8;;;;;;;-1:-1:-1;;;;;38473:76:8;-1:-1:-1;;;;;38473:76:8;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;38473:76:8;;;38463:87;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38463:87:8;;;;;;;;;;;;;;;;38448:102;;38615:8;38625:29;38645:4;38651:2;38625:19;:29::i;:::-;38581:74;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38581:74:8;;;;;;;-1:-1:-1;;;;;38581:74:8;-1:-1:-1;;;;;38581:74:8;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;38581:74:8;;;38571:85;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;38571:85:8;;;;;;;;;;;;38678:12;;38705:26;;;;;;;;;;;38571:85;;-1:-1:-1;;;;;;38678:12:8;;;;-1:-1:-1;38678:20:8;;-1:-1:-1;38705:26:8;;:38;;-1:-1:-1;38736:6:8;;38678:12;;38705:20;;:26;;;;;;;;;;-1:-1:-1;38678:12:8;38705:26;;;5:2:-1;;;;30:1;27;20:12;5:2;38705:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38705:26:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38705:26:8;;:38;:30;:38;:::i;:::-;38678:66;;;;;-1:-1:-1;;;38678:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38678:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38678:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38678:66:8;38663:202;;;;;;;-1:-1:-1;;;;;38663:202:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38886:12;;38913:26;;;;;;;;;;;;;;-1:-1:-1;;;;;38886:12:8;;;;:20;;38907:4;;38913:38;;38944:6;;38886:12;;38913:20;;:26;;;;;;;;;;;;;;38886:12;;38913:26;;;5:2:-1;;;;30:1;27;20:12;5:2;38913:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38913:26:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38913:26:8;;:38;:30;:38;:::i;:::-;38886:66;;;;;-1:-1:-1;;;38886:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38886:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38886:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38886:66:8;38871:202;;;;;;;-1:-1:-1;;;;;38871:202:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39110:2;-1:-1:-1;;;;;39085:42:8;39104:4;-1:-1:-1;;;;;39085:42:8;;39094:8;39114:6;39122:4;39085:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;39085:42:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39085:42:8;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;39085:42:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39141:4:8;;38207:943;-1:-1:-1;;;;;;;;38207:943:8:o;33115:359::-;33197:13;33233:29;33248:4;33254:7;33233:14;:29::i;:::-;33218:102;;;;;;;-1:-1:-1;;;;;33218:102:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33341:31;33358:4;33364:7;33341:16;:31::i;:::-;33326:126;;;;;;;-1:-1:-1;;;;;33326:126:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33465:4:8;33115:359;;;;:::o;50927:203::-;51006:13;51027:10;51080:6;51050:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;51050:37:8;;;51040:48;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;51040:48:8;;;;;;;;;;;;51101:12;;:24;;;;;;;;;;;51040:48;;-1:-1:-1;;;;;;51101:12:8;;;;-1:-1:-1;51101:20:8;;-1:-1:-1;51101:24:8;;;;;263:2:-1;;-1:-1;51101:24:8;;;;;;;-1:-1:-1;51101:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;51101:24:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51101:24:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;51101:24:8;;50927:203;-1:-1:-1;;;;50927:203:8:o;16400:357::-;16488:25;16521:10;16594:23;16579:7;16544:43;;;;;;;;;;;;;-1:-1:-1;;;;;16544:43:8;-1:-1:-1;;;;;16544:43:8;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16544:43:8;;;16534:54;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;16534:54:8;;;;;;;;;;;;16620:12;;:27;;;;;;;;;;;16534:54;;-1:-1:-1;;;;;;16620:12:8;;;;-1:-1:-1;16620:23:8;;-1:-1:-1;16620:27:8;;;;;263:2:-1;;-1:-1;16620:27:8;;;;;;;-1:-1:-1;16620:12:8;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;16620:27:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16620:27:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16620:27:8;;-1:-1:-1;;;;;;16657:22:8;;;16653:100;;16696:15;16689:22;;;;16653:100;16739:7;16732:14;;16653:100;16400:357;;;;;;:::o;1143:234:2:-;1201:14;1307:6;;;;1299:55;;;;;-1:-1:-1;;;;;1299:55:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1367:5:2;;;1143:234::o;1540:174::-;1598:14;1632:5;;;1651:6;;;;1643:52;;;;;-1:-1:-1;;;;;1643:52:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1708:1;1540:174;-1:-1:-1;;;1540:174:2:o;17160:239:8:-;17243:11;17264:10;17319:34;17339:4;17345:7;17319:19;:34::i;:::-;17287:67;;;;;;;;;;;;;-1:-1:-1;;;;;17287:67:8;-1:-1:-1;;;;;17287:67:8;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;17287:67:8;;;17277:78;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;17808:241:8;17893:11;17912:10;17971:34;17991:4;17997:7;17971:19;:34::i;:::-;17935:71;;;;;;;;;;;;;-1:-1:-1;;;;;17935:71:8;-1:-1:-1;;;;;17935:71:8;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;17935:71:8;;;17925:82;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;", + "source": "pragma solidity 0.4.24;\n\nimport \"./Ownable.sol\";\nimport \"./TokenIOLib.sol\";\nimport \"./TokenIOStorage.sol\";\n\n\n/**\nCOPYRIGHT 2018 Token, Inc.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n@title Currency FX Contract for Token, Inc. Smart Money System\n\n@author Ryan Tate , Sean Pollock \n\n@notice Contract uses generalized storage contract, `TokenIOStorage`, for\nupgradeability of interface contract.\n\n@dev In the event that the main contract becomes deprecated, the upgraded contract\nwill be set as the owner of this contract, and use this contract's storage to\nmaintain data consistency between contract.\n\n*/\n\ncontract TokenIOFX is Ownable {\n\n /// @dev Set reference to TokenIOLib interface which proxies to TokenIOStorage\n using TokenIOLib for TokenIOLib.Data;\n TokenIOLib.Data lib;\n\n\n /**\n\t* @notice Constructor method for TokenIOFX contract\n\t* @param _storageContract Address of TokenIOStorage contract\n\t*/\n\tconstructor(address _storageContract) public {\n\t\t\t/// @dev Set the storage contract for the interface\n\t\t\t/// @dev NOTE: This contract will be unable to use the storage constract until\n\t\t\t/// @dev contract address is authorized with the storage contract\n\t\t\t/// @dev Once authorized, Use the `setParams` method to set storage values\n\t\t\tlib.Storage = TokenIOStorage(_storageContract);\n\n\t\t\t/// @dev set owner to contract initiator\n\t\t\towner[msg.sender] = true;\n\t}\n\n\n /**\n * @notice Accepts a signed fx request to swap currency pairs at a given amount;\n * @dev This method can be called directly between peers.\n * @param requester address Requester is the orginator of the offer and must\n * match the signature of the payload submitted by the fulfiller\n * @param symbolA Symbol of the currency desired\n * @param symbolB Symbol of the currency offered\n * @param valueA Amount of the currency desired\n * @param valueB Amount of the currency offered\n * @param sigV Ethereum secp256k1 signature V value; used by ecrecover()\n * @param sigR Ethereum secp256k1 signature R value; used by ecrecover()\n * @param sigS Ethereum secp256k1 signature S value; used by ecrecover()\n * @param expiration Expiration of the offer; Offer is good until expired\n * @return {\"success\" : \"Returns true if successfully called from another contract\"}\n */\n function swap(\n address requester,\n string symbolA,\n string symbolB,\n uint valueA,\n uint valueB,\n uint8 sigV,\n bytes32 sigR,\n bytes32 sigS,\n uint expiration\n ) public returns (bool success) {\n require(\n lib.execSwap(requester, symbolA, symbolB, valueA, valueB, sigV, sigR, sigS, expiration),\n \"Error: Unable to perform atomic currency swap. Please check parameters.\"\n );\n return true;\n }\n\n}\n", + "sourcePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOFX.sol", + "ast": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOFX.sol", + "exportedSymbols": { + "TokenIOFX": [ + 1411 + ] + }, + "id": 1412, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1337, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:6" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 1338, + "nodeType": "ImportDirective", + "scope": 1412, + "sourceUnit": 185, + "src": "25:23:6", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 1339, + "nodeType": "ImportDirective", + "scope": 1412, + "sourceUnit": 4607, + "src": "49:26:6", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 1340, + "nodeType": "ImportDirective", + "scope": 1412, + "sourceUnit": 5226, + "src": "76:30:6", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 1341, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "1091:7:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 1342, + "nodeType": "InheritanceSpecifier", + "src": "1091:7:6" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": "COPYRIGHT 2018 Token, Inc.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n@title Currency FX Contract for Token, Inc. Smart Money System\n@author Ryan Tate , Sean Pollock \n@notice Contract uses generalized storage contract, `TokenIOStorage`, for\nupgradeability of interface contract.\n@dev In the event that the main contract becomes deprecated, the upgraded contract\nwill be set as the owner of this contract, and use this contract's storage to\nmaintain data consistency between contract.", + "fullyImplemented": true, + "id": 1411, + "linearizedBaseContracts": [ + 1411, + 184 + ], + "name": "TokenIOFX", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 1345, + "libraryName": { + "contractScope": null, + "id": 1343, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4606, + "src": "1191:10:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4606", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "1185:37:6", + "typeName": { + "contractScope": null, + "id": 1344, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1206:15:6", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 1347, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 1411, + "src": "1225:19:6", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 1346, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1225:15:6", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 1367, + "nodeType": "Block", + "src": "1419:413:6", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 1358, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1352, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1347, + "src": "1708:3:6", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1354, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1629, + "src": "1708:11:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1356, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1349, + "src": "1737:16:6", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1355, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5225, + "src": "1722:14:6", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5225_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 1357, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1722:32:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1708:46:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "id": 1359, + "nodeType": "ExpressionStatement", + "src": "1708:46:6" + }, + { + "expression": { + "argumentTypes": null, + "id": 1365, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1360, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1804:5:6", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 1363, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1361, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "1810:3:6", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1362, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1810:10:6", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1804:17:6", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1364, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1824:4:6", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1804:24:6", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 1366, + "nodeType": "ExpressionStatement", + "src": "1804:24:6" + } + ] + }, + "documentation": "@notice Constructor method for TokenIOFX contract\n@param _storageContract Address of TokenIOStorage contract", + "id": 1368, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1350, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1349, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 1368, + "src": "1386:24:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1348, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1386:7:6", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1385:26:6" + }, + "payable": false, + "returnParameters": { + "id": 1351, + "nodeType": "ParameterList", + "parameters": [], + "src": "1419:0:6" + }, + "scope": 1411, + "src": "1374:458:6", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1409, + "nodeType": "Block", + "src": "2987:217:6", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1394, + "name": "requester", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1370, + "src": "3021:9:6", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1395, + "name": "symbolA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1372, + "src": "3032:7:6", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1396, + "name": "symbolB", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1374, + "src": "3041:7:6", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1397, + "name": "valueA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1376, + "src": "3050:6:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1398, + "name": "valueB", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1378, + "src": "3058:6:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1399, + "name": "sigV", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1380, + "src": "3066:4:6", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + { + "argumentTypes": null, + "id": 1400, + "name": "sigR", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1382, + "src": "3072:4:6", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "argumentTypes": null, + "id": 1401, + "name": "sigS", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1384, + "src": "3078:4:6", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "argumentTypes": null, + "id": 1402, + "name": "expiration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1386, + "src": "3084:10:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1392, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1347, + "src": "3008:3:6", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1393, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "execSwap", + "nodeType": "MemberAccess", + "referencedDeclaration": 4133, + "src": "3008:12:6", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint8_$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,string memory,string memory,uint256,uint256,uint8,bytes32,bytes32,uint256) returns (bool)" + } + }, + "id": 1403, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3008:87:6", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20706572666f726d2061746f6d69632063757272656e637920737761702e20506c6561736520636865636b20706172616d65746572732e", + "id": 1404, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3103:73:6", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_6ca463b35e5e08da21998ab6b3d6ced7b8f7a272da9305fde927b3e1999f0037", + "typeString": "literal_string \"Error: Unable to perform atomic currency swap. Please check parameters.\"" + }, + "value": "Error: Unable to perform atomic currency swap. Please check parameters." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_6ca463b35e5e08da21998ab6b3d6ced7b8f7a272da9305fde927b3e1999f0037", + "typeString": "literal_string \"Error: Unable to perform atomic currency swap. Please check parameters.\"" + } + ], + "id": 1391, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2993:7:6", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1405, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2993:189:6", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1406, + "nodeType": "ExpressionStatement", + "src": "2993:189:6" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1407, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3195:4:6", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1390, + "id": 1408, + "nodeType": "Return", + "src": "3188:11:6" + } + ] + }, + "documentation": "@notice Accepts a signed fx request to swap currency pairs at a given amount;\n@dev This method can be called directly between peers.\n@param requester address Requester is the orginator of the offer and must\nmatch the signature of the payload submitted by the fulfiller\n@param symbolA Symbol of the currency desired\n@param symbolB Symbol of the currency offered\n@param valueA Amount of the currency desired\n@param valueB Amount of the currency offered\n@param sigV Ethereum secp256k1 signature V value; used by ecrecover()\n@param sigR Ethereum secp256k1 signature R value; used by ecrecover()\n@param sigS Ethereum secp256k1 signature S value; used by ecrecover()\n@param expiration Expiration of the offer; Offer is good until expired\n@return {\"success\" : \"Returns true if successfully called from another contract\"}", + "id": 1410, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [], + "name": "swap", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1387, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1370, + "name": "requester", + "nodeType": "VariableDeclaration", + "scope": 1410, + "src": "2788:17:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1369, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2788:7:6", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1372, + "name": "symbolA", + "nodeType": "VariableDeclaration", + "scope": 1410, + "src": "2811:14:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1371, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2811:6:6", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1374, + "name": "symbolB", + "nodeType": "VariableDeclaration", + "scope": 1410, + "src": "2831:14:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1373, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2831:6:6", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1376, + "name": "valueA", + "nodeType": "VariableDeclaration", + "scope": 1410, + "src": "2851:11:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1375, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2851:4:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1378, + "name": "valueB", + "nodeType": "VariableDeclaration", + "scope": 1410, + "src": "2868:11:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1377, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2868:4:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1380, + "name": "sigV", + "nodeType": "VariableDeclaration", + "scope": 1410, + "src": "2885:10:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 1379, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "2885:5:6", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1382, + "name": "sigR", + "nodeType": "VariableDeclaration", + "scope": 1410, + "src": "2901:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1381, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2901:7:6", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1384, + "name": "sigS", + "nodeType": "VariableDeclaration", + "scope": 1410, + "src": "2919:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1383, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2919:7:6", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1386, + "name": "expiration", + "nodeType": "VariableDeclaration", + "scope": 1410, + "src": "2937:15:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1385, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2937:4:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2782:174:6" + }, + "payable": false, + "returnParameters": { + "id": 1390, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1389, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1410, + "src": "2973:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1388, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2973:4:6", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2972:14:6" + }, + "scope": 1411, + "src": "2769:435:6", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 1412, + "src": "1069:2138:6" + } + ], + "src": "0:3208:6" + }, + "legacyAST": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOFX.sol", + "exportedSymbols": { + "TokenIOFX": [ + 1411 + ] + }, + "id": 1412, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1337, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:6" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 1338, + "nodeType": "ImportDirective", + "scope": 1412, + "sourceUnit": 185, + "src": "25:23:6", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 1339, + "nodeType": "ImportDirective", + "scope": 1412, + "sourceUnit": 4607, + "src": "49:26:6", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 1340, + "nodeType": "ImportDirective", + "scope": 1412, + "sourceUnit": 5226, + "src": "76:30:6", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 1341, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "1091:7:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 1342, + "nodeType": "InheritanceSpecifier", + "src": "1091:7:6" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": "COPYRIGHT 2018 Token, Inc.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n@title Currency FX Contract for Token, Inc. Smart Money System\n@author Ryan Tate , Sean Pollock \n@notice Contract uses generalized storage contract, `TokenIOStorage`, for\nupgradeability of interface contract.\n@dev In the event that the main contract becomes deprecated, the upgraded contract\nwill be set as the owner of this contract, and use this contract's storage to\nmaintain data consistency between contract.", + "fullyImplemented": true, + "id": 1411, + "linearizedBaseContracts": [ + 1411, + 184 + ], + "name": "TokenIOFX", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 1345, + "libraryName": { + "contractScope": null, + "id": 1343, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4606, + "src": "1191:10:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4606", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "1185:37:6", + "typeName": { + "contractScope": null, + "id": 1344, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1206:15:6", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 1347, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 1411, + "src": "1225:19:6", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 1346, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1225:15:6", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 1367, + "nodeType": "Block", + "src": "1419:413:6", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 1358, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1352, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1347, + "src": "1708:3:6", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1354, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1629, + "src": "1708:11:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1356, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1349, + "src": "1737:16:6", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1355, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5225, + "src": "1722:14:6", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5225_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 1357, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1722:32:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1708:46:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "id": 1359, + "nodeType": "ExpressionStatement", + "src": "1708:46:6" + }, + { + "expression": { + "argumentTypes": null, + "id": 1365, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1360, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1804:5:6", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 1363, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1361, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "1810:3:6", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1362, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1810:10:6", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1804:17:6", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1364, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1824:4:6", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1804:24:6", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 1366, + "nodeType": "ExpressionStatement", + "src": "1804:24:6" + } + ] + }, + "documentation": "@notice Constructor method for TokenIOFX contract\n@param _storageContract Address of TokenIOStorage contract", + "id": 1368, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1350, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1349, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 1368, + "src": "1386:24:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1348, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1386:7:6", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1385:26:6" + }, + "payable": false, + "returnParameters": { + "id": 1351, + "nodeType": "ParameterList", + "parameters": [], + "src": "1419:0:6" + }, + "scope": 1411, + "src": "1374:458:6", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1409, + "nodeType": "Block", + "src": "2987:217:6", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1394, + "name": "requester", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1370, + "src": "3021:9:6", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1395, + "name": "symbolA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1372, + "src": "3032:7:6", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1396, + "name": "symbolB", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1374, + "src": "3041:7:6", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 1397, + "name": "valueA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1376, + "src": "3050:6:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1398, + "name": "valueB", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1378, + "src": "3058:6:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1399, + "name": "sigV", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1380, + "src": "3066:4:6", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + { + "argumentTypes": null, + "id": 1400, + "name": "sigR", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1382, + "src": "3072:4:6", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "argumentTypes": null, + "id": 1401, + "name": "sigS", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1384, + "src": "3078:4:6", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "argumentTypes": null, + "id": 1402, + "name": "expiration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1386, + "src": "3084:10:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1392, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1347, + "src": "3008:3:6", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1393, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "execSwap", + "nodeType": "MemberAccess", + "referencedDeclaration": 4133, + "src": "3008:12:6", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint8_$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,string memory,string memory,uint256,uint256,uint8,bytes32,bytes32,uint256) returns (bool)" + } + }, + "id": 1403, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3008:87:6", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20706572666f726d2061746f6d69632063757272656e637920737761702e20506c6561736520636865636b20706172616d65746572732e", + "id": 1404, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3103:73:6", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_6ca463b35e5e08da21998ab6b3d6ced7b8f7a272da9305fde927b3e1999f0037", + "typeString": "literal_string \"Error: Unable to perform atomic currency swap. Please check parameters.\"" + }, + "value": "Error: Unable to perform atomic currency swap. Please check parameters." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_6ca463b35e5e08da21998ab6b3d6ced7b8f7a272da9305fde927b3e1999f0037", + "typeString": "literal_string \"Error: Unable to perform atomic currency swap. Please check parameters.\"" + } + ], + "id": 1391, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2993:7:6", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1405, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2993:189:6", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1406, + "nodeType": "ExpressionStatement", + "src": "2993:189:6" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1407, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3195:4:6", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1390, + "id": 1408, + "nodeType": "Return", + "src": "3188:11:6" + } + ] + }, + "documentation": "@notice Accepts a signed fx request to swap currency pairs at a given amount;\n@dev This method can be called directly between peers.\n@param requester address Requester is the orginator of the offer and must\nmatch the signature of the payload submitted by the fulfiller\n@param symbolA Symbol of the currency desired\n@param symbolB Symbol of the currency offered\n@param valueA Amount of the currency desired\n@param valueB Amount of the currency offered\n@param sigV Ethereum secp256k1 signature V value; used by ecrecover()\n@param sigR Ethereum secp256k1 signature R value; used by ecrecover()\n@param sigS Ethereum secp256k1 signature S value; used by ecrecover()\n@param expiration Expiration of the offer; Offer is good until expired\n@return {\"success\" : \"Returns true if successfully called from another contract\"}", + "id": 1410, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [], + "name": "swap", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1387, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1370, + "name": "requester", + "nodeType": "VariableDeclaration", + "scope": 1410, + "src": "2788:17:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1369, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2788:7:6", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1372, + "name": "symbolA", + "nodeType": "VariableDeclaration", + "scope": 1410, + "src": "2811:14:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1371, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2811:6:6", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1374, + "name": "symbolB", + "nodeType": "VariableDeclaration", + "scope": 1410, + "src": "2831:14:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1373, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2831:6:6", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1376, + "name": "valueA", + "nodeType": "VariableDeclaration", + "scope": 1410, + "src": "2851:11:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1375, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2851:4:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1378, + "name": "valueB", + "nodeType": "VariableDeclaration", + "scope": 1410, + "src": "2868:11:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1377, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2868:4:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1380, + "name": "sigV", + "nodeType": "VariableDeclaration", + "scope": 1410, + "src": "2885:10:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 1379, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "2885:5:6", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1382, + "name": "sigR", + "nodeType": "VariableDeclaration", + "scope": 1410, + "src": "2901:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1381, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2901:7:6", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1384, + "name": "sigS", + "nodeType": "VariableDeclaration", + "scope": 1410, + "src": "2919:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1383, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2919:7:6", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1386, + "name": "expiration", + "nodeType": "VariableDeclaration", + "scope": 1410, + "src": "2937:15:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1385, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2937:4:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2782:174:6" + }, + "payable": false, + "returnParameters": { + "id": 1390, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1389, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1410, + "src": "2973:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1388, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2973:4:6", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2972:14:6" + }, + "scope": 1411, + "src": "2769:435:6", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 1412, + "src": "1069:2138:6" + } + ], + "src": "0:3208:6" + }, + "compiler": { + "name": "solc", + "version": "0.4.24+commit.e67f0147.Emscripten.clang" + }, + "networks": { + "1": { + "events": {}, + "links": {}, + "address": "0xb48141a94392502c92f9d29a2a75f129d98a416b", + "transactionHash": "0xee86421ca8e7684ea6744002a8057431b95a3aa8e02df785e81ded080dcdaaa0" + }, + "4447": { + "events": {}, + "links": {}, + "address": "0xf328c11c4df88d18fcbd30ad38d8b4714f4b33bf", + "transactionHash": "0xd471ba1732926c8e460ea9acced4183b9acda6fe2ecb96644d0239a461f13254" + } + }, + "schemaVersion": "2.0.1", + "updatedAt": "2018-10-24T17:41:08.923Z" +} \ No newline at end of file diff --git a/deployed/mainnet-v1.0.1/TokenIOFeeContract.json b/deployed/mainnet-v1.0.1/TokenIOFeeContract.json new file mode 100644 index 0000000..67e50fa --- /dev/null +++ b/deployed/mainnet-v1.0.1/TokenIOFeeContract.json @@ -0,0 +1,6211 @@ +{ + "contractName": "TokenIOFeeContract", + "abi": [ + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "allowOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "removeOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "", + "type": "address" + } + ], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "name": "_storageContract", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "AllowOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "RevokeOwnership", + "type": "event" + }, + { + "constant": false, + "inputs": [ + { + "name": "feeBps", + "type": "uint256" + }, + { + "name": "feeMin", + "type": "uint256" + }, + { + "name": "feeMax", + "type": "uint256" + }, + { + "name": "feeFlat", + "type": "uint256" + }, + { + "name": "feeMsg", + "type": "bytes" + } + ], + "name": "setFeeParams", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getFeeParams", + "outputs": [ + { + "name": "bps", + "type": "uint256" + }, + { + "name": "min", + "type": "uint256" + }, + { + "name": "max", + "type": "uint256" + }, + { + "name": "flat", + "type": "uint256" + }, + { + "name": "feeMsg", + "type": "bytes" + }, + { + "name": "feeContract", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "currency", + "type": "string" + } + ], + "name": "getTokenBalance", + "outputs": [ + { + "name": "balance", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "amount", + "type": "uint256" + } + ], + "name": "calculateFees", + "outputs": [ + { + "name": "fees", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "currency", + "type": "string" + }, + { + "name": "to", + "type": "address" + }, + { + "name": "amount", + "type": "uint256" + }, + { + "name": "data", + "type": "bytes" + } + ], + "name": "transferCollectedFees", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b506040516020806126a4833981016040908152905133600090815260208190529182208054600160ff19918216811783558054600160a060020a031916600160a060020a03909416939093178355815416909117905561262e90819061007690396000f30060806040526004361061007f5763ffffffff60e060020a600035041663025abd58811461008457806313b4312f146100ef5780634bbc142c146101b057806352238fdd146101d1578063666a3427146101e9578063666e1b391461020a578063aa08dfd31461022b578063be6fc18114610296578063f2fde38b14610358575b600080fd5b34801561009057600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100dd9436949293602493928401919081908401838280828437509497506103799650505050505050565b60408051918252519081900360200190f35b3480156100fb57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261019c94369492936024939284019190819084018382808284375050604080516020888301358a018035601f8101839004830284018301909452838352979a8935600160a060020a03169a8a8301359a919990985060609091019650919450908101925081908401838280828437509497506103939650505050505050565b604080519115158252519081900360200190f35b3480156101bc57600080fd5b5061019c600160a060020a036004351661049a565b3480156101dd57600080fd5b506100dd600435610556565b3480156101f557600080fd5b5061019c600160a060020a036004351661056a565b34801561021657600080fd5b5061019c600160a060020a0360043516610623565b34801561023757600080fd5b50604080516020601f60843560048181013592830184900484028501840190955281845261019c948035946024803595604435956064359536959460a49490939101919081908401838280828437509497506106389650505050505050565b3480156102a257600080fd5b506102ab610916565b604051808781526020018681526020018581526020018481526020018060200183600160a060020a0316600160a060020a03168152602001828103825284818151815260200191508051906020019080838360005b83811015610318578181015183820152602001610300565b50505050905090810190601f1680156103455780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b34801561036457600080fd5b5061019c600160a060020a0360043516610987565b600061038d6001833063ffffffff610ac116565b92915050565b3360009081526020819052604081205460ff1615156103fe576040805160e560020a62461bcd02815260206004820152603960248201526000805160206125e383398151915260448201526000805160206125a3833981519152606482015290519081900360840190fd5b6104136001863087878763ffffffff610c5716565b151561048f576040805160e560020a62461bcd02815260206004820152602a60248201527f4572726f723a20756e61626c6520746f207472616e736665722066656573207460448201527f6f206163636f756e742e00000000000000000000000000000000000000000000606482015290519081900360840190fd5b506001949350505050565b3360009081526020819052604081205460ff161515610505576040805160e560020a62461bcd02815260206004820152603960248201526000805160206125e383398151915260448201526000805160206125a3833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b600061038d6001308463ffffffff6113d316565b3360009081526020819052604081205460ff1615156105d5576040805160e560020a62461bcd02815260206004820152603960248201526000805160206125e383398151915260448201526000805160206125a3833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b3360009081526020819052604081205460ff1615156106a3576040805160e560020a62461bcd02815260206004820152603960248201526000805160206125e383398151915260448201526000805160206125a3833981519152606482015290519081900360840190fd5b6106b460018763ffffffff6118c416565b151561071e576040805160e560020a62461bcd02815260206004820152602f60248201526000805160206125c383398151915260448201527f7420626173697320706f696e74732e0000000000000000000000000000000000606482015290519081900360840190fd5b61072f60018663ffffffff611ad716565b1515610799576040805160e560020a62461bcd02815260206004820152602e60248201526000805160206125c383398151915260448201527f74206d696e696d756d206665652e000000000000000000000000000000000000606482015290519081900360840190fd5b6107aa60018563ffffffff611b5516565b1515610814576040805160e560020a62461bcd02815260206004820152602e60248201526000805160206125c383398151915260448201527f74206d6178696d756d206665652e000000000000000000000000000000000000606482015290519081900360840190fd5b61082560018463ffffffff611bd316565b151561088f576040805160e560020a62461bcd02815260206004820152602b60248201526000805160206125c383398151915260448201527f7420666c6174206665652e000000000000000000000000000000000000000000606482015290519081900360840190fd5b6108a060018363ffffffff611c5116565b151561090a576040805160e560020a62461bcd02815260206004820152603260248201526000805160206125c383398151915260448201527f742064656661756c74206d6573736167652e0000000000000000000000000000606482015290519081900360840190fd5b50600195945050505050565b600080808060608161092f60013063ffffffff611dc816565b61094060013063ffffffff611f0516565b61095160013063ffffffff611f9616565b61096260013063ffffffff61202716565b61097360013063ffffffff6120b816565b939a92995090975095509093503092509050565b3360009081526020819052604081205460ff1615156109f2576040805160e560020a62461bcd02815260206004820152603960248201526000805160206125e383398151915260448201526000805160206125a3833981519152606482015290519081900360840190fd5b600160a060020a0382161515610a52576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b60008083610acf868561226b565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b60208310610b295780518252601f199092019160209182019101610b0a565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610bab5780518252601f199092019160209182019101610b8c565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b158015610c2257600080fd5b505af1158015610c36573d6000803e3d6000fd5b505050506040513d6020811015610c4c57600080fd5b505195945050505050565b60008080600160a060020a0386161515610ce1576040805160e560020a62461bcd02815260206004820152602560248201527f4572726f723a2060746f602061646472657373206d757374206e6f742062652060448201527f6e756c6c2e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b87610cec8a8961226b565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b60208310610d465780518252601f199092019160209182019101610d27565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610dc85780518252601f199092019160209182019101610da9565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020915087610e028a8861226b565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b60208310610e5c5780518252601f199092019160209182019101610e3d565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610ede5780518252601f199092019160209182019101610ebf565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208f5460e060020a63bd02d0f5028452600484018a90529451909750600160a060020a03909416955063e2a4853a94508793610f9993508b92879263bd02d0f5926024808401938290030181600087803b158015610f6157600080fd5b505af1158015610f75573d6000803e3d6000fd5b505050506040513d6020811015610f8b57600080fd5b50519063ffffffff6123dd16565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015610fe157600080fd5b505af1158015610ff5573d6000803e3d6000fd5b505050506040513d602081101561100b57600080fd5b505115156110d5576040805160e560020a62461bcd02815260206004820152606960248201527f4572726f723a20556e61626c6520746f207365742073746f726167652076616c60448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b88546040805160e060020a63bd02d0f5028152600481018490529051600160a060020a039092169163e2a4853a91849161116c918a91869163bd02d0f59160248083019260209291908290030181600087803b15801561113457600080fd5b505af1158015611148573d6000803e3d6000fd5b505050506040513d602081101561115e57600080fd5b50519063ffffffff61246216565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b1580156111b457600080fd5b505af11580156111c8573d6000803e3d6000fd5b505050506040513d60208110156111de57600080fd5b505115156112a8576040805160e560020a62461bcd02815260206004820152606960248201527f4572726f723a20556e61626c6520746f207365742073746f726167652076616c60448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b85600160a060020a031687600160a060020a03167f6f3dcde00ed34d4f404b335a65d18fb4adf74f5b817aa46f5d7c4f05c6d1e96e8a8888604051808060200184815260200180602001838103835286818151815260200191508051906020019080838360005b8381101561132757818101518382015260200161130f565b50505050905090810190601f1680156113545780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561138757818101518382015260200161136f565b50505050905090810190601f1680156113b45780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a350600198975050505050505050565b8254604080517f6665652e6d617800000000000000000000000000000000000000000000000000602080830191909152600160a060020a03868116606060020a0260278401528351808403601b018152603b9093019384905282516000958695869586958695869594169363bd02d0f593918291908401908083835b6020831061146e5780518252601f19909201916020918201910161144f565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b1580156114cf57600080fd5b505af11580156114e3573d6000803e3d6000fd5b505050506040513d60208110156114f957600080fd5b50518954604080517f6665652e6d696e00000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260278401528351808403601b018152603b909301938490528251959a509093169363bd02d0f5939192918291908401908083835b6020831061158f5780518252601f199092019160209182019101611570565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b1580156115f057600080fd5b505af1158015611604573d6000803e3d6000fd5b505050506040513d602081101561161a57600080fd5b50518954604080517f6665652e62707300000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260278401528351808403601b018152603b9093019384905282519599509093169363bd02d0f5939192918291908401908083835b602083106116b05780518252601f199092019160209182019101611691565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b15801561171157600080fd5b505af1158015611725573d6000803e3d6000fd5b505050506040513d602081101561173b57600080fd5b50518954604080517f6665652e666c6174000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260288401528351808403601c018152603c9093019384905282519598509093169363bd02d0f5939192918291908401908083835b602083106117d15780518252601f1990920191602091820191016117b2565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b15801561183257600080fd5b505af1158015611846573d6000803e3d6000fd5b505050506040513d602081101561185c57600080fd5b505191506118928261188661271061187a8b8863ffffffff6124ec16565b9063ffffffff61258b16565b9063ffffffff61246216565b9050848111156118a4578495506118b8565b838110156118b4578395506118b8565b8095505b50505050509392505050565b604080517f6665652e62707300000000000000000000000000000000000000000000000000602080830191909152606060020a300260278301528251601b818403018152603b909201928390528151600093849392909182918401908083835b602083106119435780518252601f199092019160209182019101611924565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547fe2a4853a00000000000000000000000000000000000000000000000000000000845260048401829052602484018b90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b1580156119d757600080fd5b505af11580156119eb573d6000803e3d6000fd5b505050506040513d6020811015611a0157600080fd5b50511515611acb576040805160e560020a62461bcd02815260206004820152606860248201527f4572726f723a20556e61626c6520746f207365742073746f726167652076616c60448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b600191505b5092915050565b604080517f6665652e6d696e00000000000000000000000000000000000000000000000000602080830191909152606060020a300260278301528251601b818403018152603b90920192839052815160009384939290918291840190808383602083106119435780518252601f199092019160209182019101611924565b604080517f6665652e6d617800000000000000000000000000000000000000000000000000602080830191909152606060020a300260278301528251601b818403018152603b90920192839052815160009384939290918291840190808383602083106119435780518252601f199092019160209182019101611924565b604080517f6665652e666c6174000000000000000000000000000000000000000000000000602080830191909152606060020a300260288301528251601c818403018152603c90920192839052815160009384939290918291840190808383602083106119435780518252601f199092019160209182019101611924565b604080517f6665652e6d736700000000000000000000000000000000000000000000000000602080830191909152606060020a300260278301528251601b818403018152603b909201928390528151600093849392909182918401908083835b60208310611cd05780518252601f199092019160209182019101611cb1565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547f2e28d08400000000000000000000000000000000000000000000000000000000845260048401828152602485019687528b5160448601528b51929950600160a060020a039091169750632e28d084965088958b9550909390926064909101919085019080838360005b83811015611d7b578181015183820152602001611d63565b50505050905090810190601f168015611da85780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b1580156119d757600080fd5b6000808260405160200180807f6665652e6270730000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611e5a5780518252601f199092019160209182019101611e3b565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b158015611ed157600080fd5b505af1158015611ee5573d6000803e3d6000fd5b505050506040513d6020811015611efb57600080fd5b5051949350505050565b6000808260405160200180807f6665652e6d696e0000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e5a5780518252601f199092019160209182019101611e3b565b6000808260405160200180807f6665652e6d61780000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e5a5780518252601f199092019160209182019101611e3b565b6000808260405160200180807f6665652e666c617400000000000000000000000000000000000000000000000081525060080182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e5a5780518252601f199092019160209182019101611e3b565b606060008260405160200180807f6665652e6d73670000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b6020831061214b5780518252601f19909201916020918201910161212c565b5181516020939093036101000a60001901801990911692169190911790526040805191909301819003812089547fc031a180000000000000000000000000000000000000000000000000000000008352600483018290529351909650600160a060020a03909316945063c031a1809350602480820193600093509182900301818387803b1580156121db57600080fd5b505af11580156121ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561221857600080fd5b81019080805164010000000081111561223057600080fd5b8201602081018481111561224357600080fd5b815164010000000081118282018710171561225d57600080fd5b509098975050505050505050565b60008060008360405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106122ff5780518252601f1990920191602091820191016122e0565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b15801561238c57600080fd5b505af11580156123a0573d6000803e3d6000fd5b505050506040513d60208110156123b657600080fd5b50519050600160a060020a038116156123d1578092506123d5565b8392505b505092915050565b60008282111561245c576040805160e560020a62461bcd028152602060048201526024808201527f4572726f723a20556e73616665207375627472616374696f6e206f706572617460448201527f696f6e2100000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50900390565b6000828201838110156124e5576040805160e560020a62461bcd02815260206004820152602160248201527f4572726f723a20556e73616665206164646974696f6e206f7065726174696f6e60448201527f2100000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b9392505050565b6000808315156124ff5760009150611ad0565b5082820282848281151561250f57fe5b04146124e5576040805160e560020a62461bcd02815260206004820152602760248201527f4572726f723a20556e73616665206d756c7469706c69636174696f6e206f706560448201527f726174696f6e2100000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600080828481151561259957fe5b04949350505050560020616c6c6f7765642062792074686520636f6e74726163742e000000000000004572726f723a20556e61626c6520746f207365742066656520636f6e747261634572726f723a205472616e73616374696f6e2073656e646572206973206e6f74a165627a7a72305820215aae74e74e53e62457eae102d94e8ca00bc9ad6f55716da8455533040c8f5f0029", + "deployedBytecode": "0x60806040526004361061007f5763ffffffff60e060020a600035041663025abd58811461008457806313b4312f146100ef5780634bbc142c146101b057806352238fdd146101d1578063666a3427146101e9578063666e1b391461020a578063aa08dfd31461022b578063be6fc18114610296578063f2fde38b14610358575b600080fd5b34801561009057600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100dd9436949293602493928401919081908401838280828437509497506103799650505050505050565b60408051918252519081900360200190f35b3480156100fb57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261019c94369492936024939284019190819084018382808284375050604080516020888301358a018035601f8101839004830284018301909452838352979a8935600160a060020a03169a8a8301359a919990985060609091019650919450908101925081908401838280828437509497506103939650505050505050565b604080519115158252519081900360200190f35b3480156101bc57600080fd5b5061019c600160a060020a036004351661049a565b3480156101dd57600080fd5b506100dd600435610556565b3480156101f557600080fd5b5061019c600160a060020a036004351661056a565b34801561021657600080fd5b5061019c600160a060020a0360043516610623565b34801561023757600080fd5b50604080516020601f60843560048181013592830184900484028501840190955281845261019c948035946024803595604435956064359536959460a49490939101919081908401838280828437509497506106389650505050505050565b3480156102a257600080fd5b506102ab610916565b604051808781526020018681526020018581526020018481526020018060200183600160a060020a0316600160a060020a03168152602001828103825284818151815260200191508051906020019080838360005b83811015610318578181015183820152602001610300565b50505050905090810190601f1680156103455780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b34801561036457600080fd5b5061019c600160a060020a0360043516610987565b600061038d6001833063ffffffff610ac116565b92915050565b3360009081526020819052604081205460ff1615156103fe576040805160e560020a62461bcd02815260206004820152603960248201526000805160206125e383398151915260448201526000805160206125a3833981519152606482015290519081900360840190fd5b6104136001863087878763ffffffff610c5716565b151561048f576040805160e560020a62461bcd02815260206004820152602a60248201527f4572726f723a20756e61626c6520746f207472616e736665722066656573207460448201527f6f206163636f756e742e00000000000000000000000000000000000000000000606482015290519081900360840190fd5b506001949350505050565b3360009081526020819052604081205460ff161515610505576040805160e560020a62461bcd02815260206004820152603960248201526000805160206125e383398151915260448201526000805160206125a3833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b600061038d6001308463ffffffff6113d316565b3360009081526020819052604081205460ff1615156105d5576040805160e560020a62461bcd02815260206004820152603960248201526000805160206125e383398151915260448201526000805160206125a3833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b3360009081526020819052604081205460ff1615156106a3576040805160e560020a62461bcd02815260206004820152603960248201526000805160206125e383398151915260448201526000805160206125a3833981519152606482015290519081900360840190fd5b6106b460018763ffffffff6118c416565b151561071e576040805160e560020a62461bcd02815260206004820152602f60248201526000805160206125c383398151915260448201527f7420626173697320706f696e74732e0000000000000000000000000000000000606482015290519081900360840190fd5b61072f60018663ffffffff611ad716565b1515610799576040805160e560020a62461bcd02815260206004820152602e60248201526000805160206125c383398151915260448201527f74206d696e696d756d206665652e000000000000000000000000000000000000606482015290519081900360840190fd5b6107aa60018563ffffffff611b5516565b1515610814576040805160e560020a62461bcd02815260206004820152602e60248201526000805160206125c383398151915260448201527f74206d6178696d756d206665652e000000000000000000000000000000000000606482015290519081900360840190fd5b61082560018463ffffffff611bd316565b151561088f576040805160e560020a62461bcd02815260206004820152602b60248201526000805160206125c383398151915260448201527f7420666c6174206665652e000000000000000000000000000000000000000000606482015290519081900360840190fd5b6108a060018363ffffffff611c5116565b151561090a576040805160e560020a62461bcd02815260206004820152603260248201526000805160206125c383398151915260448201527f742064656661756c74206d6573736167652e0000000000000000000000000000606482015290519081900360840190fd5b50600195945050505050565b600080808060608161092f60013063ffffffff611dc816565b61094060013063ffffffff611f0516565b61095160013063ffffffff611f9616565b61096260013063ffffffff61202716565b61097360013063ffffffff6120b816565b939a92995090975095509093503092509050565b3360009081526020819052604081205460ff1615156109f2576040805160e560020a62461bcd02815260206004820152603960248201526000805160206125e383398151915260448201526000805160206125a3833981519152606482015290519081900360840190fd5b600160a060020a0382161515610a52576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b60008083610acf868561226b565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b60208310610b295780518252601f199092019160209182019101610b0a565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610bab5780518252601f199092019160209182019101610b8c565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b158015610c2257600080fd5b505af1158015610c36573d6000803e3d6000fd5b505050506040513d6020811015610c4c57600080fd5b505195945050505050565b60008080600160a060020a0386161515610ce1576040805160e560020a62461bcd02815260206004820152602560248201527f4572726f723a2060746f602061646472657373206d757374206e6f742062652060448201527f6e756c6c2e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b87610cec8a8961226b565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b60208310610d465780518252601f199092019160209182019101610d27565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610dc85780518252601f199092019160209182019101610da9565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020915087610e028a8861226b565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b60208310610e5c5780518252601f199092019160209182019101610e3d565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610ede5780518252601f199092019160209182019101610ebf565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208f5460e060020a63bd02d0f5028452600484018a90529451909750600160a060020a03909416955063e2a4853a94508793610f9993508b92879263bd02d0f5926024808401938290030181600087803b158015610f6157600080fd5b505af1158015610f75573d6000803e3d6000fd5b505050506040513d6020811015610f8b57600080fd5b50519063ffffffff6123dd16565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015610fe157600080fd5b505af1158015610ff5573d6000803e3d6000fd5b505050506040513d602081101561100b57600080fd5b505115156110d5576040805160e560020a62461bcd02815260206004820152606960248201527f4572726f723a20556e61626c6520746f207365742073746f726167652076616c60448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b88546040805160e060020a63bd02d0f5028152600481018490529051600160a060020a039092169163e2a4853a91849161116c918a91869163bd02d0f59160248083019260209291908290030181600087803b15801561113457600080fd5b505af1158015611148573d6000803e3d6000fd5b505050506040513d602081101561115e57600080fd5b50519063ffffffff61246216565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b1580156111b457600080fd5b505af11580156111c8573d6000803e3d6000fd5b505050506040513d60208110156111de57600080fd5b505115156112a8576040805160e560020a62461bcd02815260206004820152606960248201527f4572726f723a20556e61626c6520746f207365742073746f726167652076616c60448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b85600160a060020a031687600160a060020a03167f6f3dcde00ed34d4f404b335a65d18fb4adf74f5b817aa46f5d7c4f05c6d1e96e8a8888604051808060200184815260200180602001838103835286818151815260200191508051906020019080838360005b8381101561132757818101518382015260200161130f565b50505050905090810190601f1680156113545780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561138757818101518382015260200161136f565b50505050905090810190601f1680156113b45780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a350600198975050505050505050565b8254604080517f6665652e6d617800000000000000000000000000000000000000000000000000602080830191909152600160a060020a03868116606060020a0260278401528351808403601b018152603b9093019384905282516000958695869586958695869594169363bd02d0f593918291908401908083835b6020831061146e5780518252601f19909201916020918201910161144f565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b1580156114cf57600080fd5b505af11580156114e3573d6000803e3d6000fd5b505050506040513d60208110156114f957600080fd5b50518954604080517f6665652e6d696e00000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260278401528351808403601b018152603b909301938490528251959a509093169363bd02d0f5939192918291908401908083835b6020831061158f5780518252601f199092019160209182019101611570565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b1580156115f057600080fd5b505af1158015611604573d6000803e3d6000fd5b505050506040513d602081101561161a57600080fd5b50518954604080517f6665652e62707300000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260278401528351808403601b018152603b9093019384905282519599509093169363bd02d0f5939192918291908401908083835b602083106116b05780518252601f199092019160209182019101611691565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b15801561171157600080fd5b505af1158015611725573d6000803e3d6000fd5b505050506040513d602081101561173b57600080fd5b50518954604080517f6665652e666c6174000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260288401528351808403601c018152603c9093019384905282519598509093169363bd02d0f5939192918291908401908083835b602083106117d15780518252601f1990920191602091820191016117b2565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b15801561183257600080fd5b505af1158015611846573d6000803e3d6000fd5b505050506040513d602081101561185c57600080fd5b505191506118928261188661271061187a8b8863ffffffff6124ec16565b9063ffffffff61258b16565b9063ffffffff61246216565b9050848111156118a4578495506118b8565b838110156118b4578395506118b8565b8095505b50505050509392505050565b604080517f6665652e62707300000000000000000000000000000000000000000000000000602080830191909152606060020a300260278301528251601b818403018152603b909201928390528151600093849392909182918401908083835b602083106119435780518252601f199092019160209182019101611924565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547fe2a4853a00000000000000000000000000000000000000000000000000000000845260048401829052602484018b90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b1580156119d757600080fd5b505af11580156119eb573d6000803e3d6000fd5b505050506040513d6020811015611a0157600080fd5b50511515611acb576040805160e560020a62461bcd02815260206004820152606860248201527f4572726f723a20556e61626c6520746f207365742073746f726167652076616c60448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b600191505b5092915050565b604080517f6665652e6d696e00000000000000000000000000000000000000000000000000602080830191909152606060020a300260278301528251601b818403018152603b90920192839052815160009384939290918291840190808383602083106119435780518252601f199092019160209182019101611924565b604080517f6665652e6d617800000000000000000000000000000000000000000000000000602080830191909152606060020a300260278301528251601b818403018152603b90920192839052815160009384939290918291840190808383602083106119435780518252601f199092019160209182019101611924565b604080517f6665652e666c6174000000000000000000000000000000000000000000000000602080830191909152606060020a300260288301528251601c818403018152603c90920192839052815160009384939290918291840190808383602083106119435780518252601f199092019160209182019101611924565b604080517f6665652e6d736700000000000000000000000000000000000000000000000000602080830191909152606060020a300260278301528251601b818403018152603b909201928390528151600093849392909182918401908083835b60208310611cd05780518252601f199092019160209182019101611cb1565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547f2e28d08400000000000000000000000000000000000000000000000000000000845260048401828152602485019687528b5160448601528b51929950600160a060020a039091169750632e28d084965088958b9550909390926064909101919085019080838360005b83811015611d7b578181015183820152602001611d63565b50505050905090810190601f168015611da85780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b1580156119d757600080fd5b6000808260405160200180807f6665652e6270730000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611e5a5780518252601f199092019160209182019101611e3b565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a5460e060020a63bd02d0f5028452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b158015611ed157600080fd5b505af1158015611ee5573d6000803e3d6000fd5b505050506040513d6020811015611efb57600080fd5b5051949350505050565b6000808260405160200180807f6665652e6d696e0000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e5a5780518252601f199092019160209182019101611e3b565b6000808260405160200180807f6665652e6d61780000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e5a5780518252601f199092019160209182019101611e3b565b6000808260405160200180807f6665652e666c617400000000000000000000000000000000000000000000000081525060080182600160a060020a0316600160a060020a0316606060020a02815260140191505060405160208183030381529060405260405180828051906020019080838360208310611e5a5780518252601f199092019160209182019101611e3b565b606060008260405160200180807f6665652e6d73670000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b6020831061214b5780518252601f19909201916020918201910161212c565b5181516020939093036101000a60001901801990911692169190911790526040805191909301819003812089547fc031a180000000000000000000000000000000000000000000000000000000008352600483018290529351909650600160a060020a03909316945063c031a1809350602480820193600093509182900301818387803b1580156121db57600080fd5b505af11580156121ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561221857600080fd5b81019080805164010000000081111561223057600080fd5b8201602081018481111561224357600080fd5b815164010000000081118282018710171561225d57600080fd5b509098975050505050505050565b60008060008360405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106122ff5780518252601f1990920191602091820191016122e0565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b15801561238c57600080fd5b505af11580156123a0573d6000803e3d6000fd5b505050506040513d60208110156123b657600080fd5b50519050600160a060020a038116156123d1578092506123d5565b8392505b505092915050565b60008282111561245c576040805160e560020a62461bcd028152602060048201526024808201527f4572726f723a20556e73616665207375627472616374696f6e206f706572617460448201527f696f6e2100000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50900390565b6000828201838110156124e5576040805160e560020a62461bcd02815260206004820152602160248201527f4572726f723a20556e73616665206164646974696f6e206f7065726174696f6e60448201527f2100000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b9392505050565b6000808315156124ff5760009150611ad0565b5082820282848281151561250f57fe5b04146124e5576040805160e560020a62461bcd02815260206004820152602760248201527f4572726f723a20556e73616665206d756c7469706c69636174696f6e206f706560448201527f726174696f6e2100000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600080828481151561259957fe5b04949350505050560020616c6c6f7765642062792074686520636f6e74726163742e000000000000004572726f723a20556e61626c6520746f207365742066656520636f6e747261634572726f723a205472616e73616374696f6e2073656e646572206973206e6f74a165627a7a72305820215aae74e74e53e62457eae102d94e8ca00bc9ad6f55716da8455533040c8f5f0029", + "sourceMap": "1070:3794:7:-;;;1380:458;8:9:-1;5:2;;;30:1;27;20:12;5:2;1380:458:7;;;;;;;;;;;;;;;;1117:10:1;1111:5;:17;;;1380:458:7;1111:17:1;;;;;;:24;;1131:4;-1:-1:-1;;1111:24:1;;;;;;;1714:46:7;;-1:-1:-1;;;;;;1714:46:7;-1:-1:-1;;;;;1714:46:7;;;;;;;;;1810:24;;;;;;;;1070:3794;;;;;;;;", + "deployedSourceMap": "1070:3794:7:-;;;;;;;;;-1:-1:-1;;;1070:3794:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3729:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3729:135:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3729:135:7;;-1:-1:-1;3729:135:7;;-1:-1:-1;;;;;;;3729:135:7;;;;;;;;;;;;;;;;;4587:273;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4587:273:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4587:273:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4587:273:7;;;;;;;;;;;-1:-1:-1;4587:273:7;;;;;-1:-1:-1;4587:273:7;;-1:-1:-1;4587:273:7;;;;-1:-1:-1;4587:273:7;;;;;;;;;;-1:-1:-1;4587:273:7;;-1:-1:-1;4587:273:7;;-1:-1:-1;;;;;;;4587:273:7;;;;;;;;;;;;;;;;;;;2127:185:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2127:185:1;-1:-1:-1;;;;;2127:185:1;;;;;4033:123:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4033:123:7;;;;;2571:188:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2571:188:1;-1:-1:-1;;;;;2571:188:1;;;;;725:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;725:37:1;-1:-1:-1;;;;;725:37:1;;;;;2242:572:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2242:572:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2242:572:7;;-1:-1:-1;2242:572:7;;-1:-1:-1;;;;;;;2242:572:7;3159:338;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3159:338:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3159:338:7;-1:-1:-1;;;;;3159:338:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3159:338:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1589:291:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1589:291:1;-1:-1:-1;;;;;1589:291:1;;;;;3729:135:7;3791:12;3816:44;:3;3836:8;3854:4;3816:44;:19;:44;:::i;:::-;3809:51;3729:135;-1:-1:-1;;3729:135:7:o;4587:273::-;1261:10:1;4698:12:7;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;4728:60:7;:3;4746:8;4764:4;4771:2;4775:6;4783:4;4728:60;:17;:60;:::i;:::-;4716:125;;;;;;;-1:-1:-1;;;;;4716:125:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4852:4:7;4587:273;;;;;;:::o;2127:185:1:-;1261:10;2201:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;2221:21:1;;:5;:21;;;;;;;;;;;:28;;-1:-1:-1;;2221:28:1;2245:4;2221:28;;;2260:30;;;2221:5;2260:30;-1:-1:-1;2303:4:1;2127:185;;;:::o;4033:123:7:-;4090:9;4112:40;:3;4138:4;4145:6;4112:40;:17;:40;:::i;2571:188:1:-;1261:10;2646:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;2666:21:1;;2690:5;2666:21;;;;;;;;;;;:29;;-1:-1:-1;;2666:29:1;;;2706:31;;;2690:5;2706:31;-1:-1:-1;2750:4:1;2571:188;;;:::o;725:37::-;;;;;;;;;;;;;;;;:::o;2242:572:7:-;1261:10:1;2357:12:7;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;2383:21:7;:3;2397:6;2383:21;:13;:21;:::i;:::-;2375:81;;;;;;;-1:-1:-1;;;;;2375:81:7;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2375:81:7;;;;;;;;;;;;;;;;;;;;2468:21;:3;2482:6;2468:21;:13;:21;:::i;:::-;2460:80;;;;;;;-1:-1:-1;;;;;2460:80:7;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2460:80:7;;;;;;;;;;;;;;;;;;;;2552:21;:3;2566:6;2552:21;:13;:21;:::i;:::-;2544:80;;;;;;;-1:-1:-1;;;;;2544:80:7;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2544:80:7;;;;;;;;;;;;;;;;;;;;2636:23;:3;2651:7;2636:23;:14;:23;:::i;:::-;2628:79;;;;;;;-1:-1:-1;;;;;2628:79:7;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2628:79:7;;;;;;;;;;;;;;;;;;;;2719:21;:3;2733:6;2719:21;:13;:21;:::i;:::-;2711:84;;;;;;;-1:-1:-1;;;;;2711:84:7;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2711:84:7;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2806:4:7;2242:572;;;;;;;:::o;3159:338::-;3204:8;;;;3245:12;3204:8;3299:28;:3;3321:4;3299:28;:13;:28;:::i;:::-;3334;:3;3356:4;3334:28;:13;:28;:::i;:::-;3369;:3;3391:4;3369:28;:13;:28;:::i;:::-;3404:29;:3;3427:4;3404:29;:14;:29;:::i;:::-;3440:28;:3;3462:4;3440:28;:13;:28;:::i;:::-;3285:208;;;;-1:-1:-1;3285:208:7;;-1:-1:-1;3285:208:7;-1:-1:-1;3285:208:7;;-1:-1:-1;3483:4:7;;-1:-1:-1;3159:338:7;-1:-1:-1;3159:338:7:o;1589:291:1:-;1261:10;1660:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;1688:22:1;;;;1680:66;;;;;-1:-1:-1;;;;;1680:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1757:42;;-1:-1:-1;;;;;1757:42:1;;;1778:10;;1757:42;;;;;-1:-1:-1;;;;;;1805:15:1;:5;:15;;;;;;;;;;;:22;;1823:4;-1:-1:-1;;1805:22:1;;;;;;;;1839:10;1833:17;;;;;;:25;;;;;;;1823:4;1589:291::o;28789:266:8:-;28890:12;28910:10;28967:8;28977:34;28997:4;29003:7;28977:19;:34::i;:::-;28933:79;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;28933:79:8;;;;;;;-1:-1:-1;;;;;28933:79:8;-1:-1:-1;;;;;28933:79:8;-1:-1:-1;;;28933:79:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;28933:79:8;;;28923:90;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;28923:90:8;;;;;;;;;;;;29026:12;;-1:-1:-1;;;;;29026:24:8;;;;;;;;;;28923:90;;-1:-1:-1;;;;;;29026:12:8;;;;-1:-1:-1;29026:20:8;;-1:-1:-1;29026:24:8;;;;;263:2:-1;;-1:-1;29026:24:8;;;;;;;-1:-1:-1;29026:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;29026:24:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29026:24:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29026:24:8;;28789:266;-1:-1:-1;;;;;28789:266:8:o;38207:943::-;38335:12;;;-1:-1:-1;;;;;38370:18:8;;;;38355:86;;;;;-1:-1:-1;;;;;38355:86:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38507:8;38517:31;38537:4;38543;38517:19;:31::i;:::-;38473:76;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38473:76:8;;;;;;;-1:-1:-1;;;;;38473:76:8;-1:-1:-1;;;;;38473:76:8;-1:-1:-1;;;38473:76:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;38473:76:8;;;38463:87;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38463:87:8;;;;;;;;;;;;;;;;38448:102;;38615:8;38625:29;38645:4;38651:2;38625:19;:29::i;:::-;38581:74;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38581:74:8;;;;;;;-1:-1:-1;;;;;38581:74:8;-1:-1:-1;;;;;38581:74:8;-1:-1:-1;;;38581:74:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;38581:74:8;;;38571:85;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;38571:85:8;;;;;;;;;;;;38678:12;;-1:-1:-1;;;;;38705:26:8;;;;;;;;;;38571:85;;-1:-1:-1;;;;;;38678:12:8;;;;-1:-1:-1;38678:20:8;;-1:-1:-1;38705:26:8;;:38;;-1:-1:-1;38736:6:8;;38678:12;;38705:20;;:26;;;;;;;;;;-1:-1:-1;38678:12:8;38705:26;;;5:2:-1;;;;30:1;27;20:12;5:2;38705:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38705:26:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38705:26:8;;:38;:30;:38;:::i;:::-;38678:66;;;;;-1:-1:-1;;;38678:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38678:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38678:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38678:66:8;38663:202;;;;;;;-1:-1:-1;;;;;38663:202:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38886:12;;38913:26;;;-1:-1:-1;;;;;38913:26:8;;;;;;;;;;-1:-1:-1;;;;;38886:12:8;;;;:20;;38907:4;;38913:38;;38944:6;;38886:12;;38913:20;;:26;;;;;;;;;;;;;;38886:12;;38913:26;;;5:2:-1;;;;30:1;27;20:12;5:2;38913:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38913:26:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38913:26:8;;:38;:30;:38;:::i;:::-;38886:66;;;;;-1:-1:-1;;;38886:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38886:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38886:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38886:66:8;38871:202;;;;;;;-1:-1:-1;;;;;38871:202:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39110:2;-1:-1:-1;;;;;39085:42:8;39104:4;-1:-1:-1;;;;;39085:42:8;;39094:8;39114:6;39122:4;39085:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;39085:42:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39085:42:8;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;39085:42:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39141:4:8;;38207:943;-1:-1:-1;;;;;;;;38207:943:8:o;31066:722::-;31211:12;;31242:44;;;;;;;;;;;;-1:-1:-1;;;;;31242:44:8;;;-1:-1:-1;;;31242:44:8;;;;;;;26:21:-1;;;22:32;;6:49;;31242:44:8;;;;;;;;31232:55;;-1:-1:-1;;;;;;;;;;;;31211:12:8;;;:20;;31242:44;;;31232:55;;;;;31242:44;31232:55;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;31232:55:8;;;;;;;;;;;;31211:77;;;-1:-1:-1;;;31211:77:8;;;;;;;;;;;;;;-1:-1:-1;263:2;;-1:-1;31211:77:8;;;;;;;-1:-1:-1;31211:77:8;-1:-1:-1;31211:77:8;;;;5:2:-1;;;;30:1;27;20:12;5:2;31211:77:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31211:77:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31211:77:8;31308:12;;31339:44;;;;31211:77;31339:44;;;;;;;-1:-1:-1;;;;;31339:44:8;;;-1:-1:-1;;;31339:44:8;;;;;;;26:21:-1;;;22:32;;6:49;;31339:44:8;;;;;;;;31329:55;;31211:77;;-1:-1:-1;31308:12:8;;;;:20;;31339:44;;;;;31329:55;;;;;31339:44;31329:55;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;31329:55:8;;;;;;;;;;;;31308:77;;;-1:-1:-1;;;31308:77:8;;;;;;;;;;;;;;-1:-1:-1;263:2;;-1:-1;31308:77:8;;;;;;;-1:-1:-1;31308:77:8;-1:-1:-1;31308:77:8;;;;5:2:-1;;;;30:1;27;20:12;5:2;31308:77:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31308:77:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31308:77:8;31405:12;;31436:44;;;;31308:77;31436:44;;;;;;;-1:-1:-1;;;;;31436:44:8;;;-1:-1:-1;;;31436:44:8;;;;;;;26:21:-1;;;22:32;;6:49;;31436:44:8;;;;;;;;31426:55;;31308:77;;-1:-1:-1;31405:12:8;;;;:20;;31436:44;;;;;31426:55;;;;;31436:44;31426:55;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;31426:55:8;;;;;;;;;;;;31405:77;;;-1:-1:-1;;;31405:77:8;;;;;;;;;;;;;;-1:-1:-1;263:2;;-1:-1;31405:77:8;;;;;;;-1:-1:-1;31405:77:8;-1:-1:-1;31405:77:8;;;;5:2:-1;;;;30:1;27;20:12;5:2;31405:77:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31405:77:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31405:77:8;31503:12;;31534:45;;;;31405:77;31534:45;;;;;;;-1:-1:-1;;;;;31534:45:8;;;-1:-1:-1;;;31534:45:8;;;;;;;26:21:-1;;;22:32;;6:49;;31534:45:8;;;;;;;;31524:56;;31405:77;;-1:-1:-1;31503:12:8;;;;:20;;31534:45;;;;;31524:56;;;;;31534:45;31524:56;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;31524:56:8;;;;;;;;;;;;31503:78;;;-1:-1:-1;;;31503:78:8;;;;;;;;;;;;;;-1:-1:-1;263:2;;-1:-1;31503:78:8;;;;;;;-1:-1:-1;31503:78:8;-1:-1:-1;31503:78:8;;;;5:2:-1;;;;30:1;27;20:12;5:2;31503:78:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31503:78:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31503:78:8;;-1:-1:-1;31599:46:8;31503:78;31600:31;31625:5;31601:18;:6;31612;31601:18;:10;:18;:::i;:::-;31600:24;:31;:24;:31;:::i;:::-;31599:37;:46;:37;:46;:::i;:::-;31587:58;;31663:6;31656:4;:13;31652:132;;;31686:6;31679:13;;;;31652:132;31716:6;31709:4;:13;31705:79;;;31739:6;31732:13;;;;31705:79;31773:4;31766:11;;31705:79;31066:722;;;;;;;;;;:::o;6804:350::-;6916:42;;;;;;;;;;;;-1:-1:-1;;;6952:4:8;6916:42;;;;;;;22:32:-1;26:21;;;22:32;6:49;;6916:42:8;;;;;;;;6906:53;;6873:12;;;;6916:42;;;;;6906:53;;;;6916:42;6906:53;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;6906:53:8;;;;;;;;;;;;6980:12;;:32;;;;;;;;;;;;;;;;;6906:53;;-1:-1:-1;;;;;;6980:12:8;;;;-1:-1:-1;6980:20:8;;-1:-1:-1;6980:32:8;;;;;263:2:-1;;-1:-1;6980:32:8;;;;;;;-1:-1:-1;6980:12:8;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;6980:32:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6980:32:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6980:32:8;6965:167;;;;;;;-1:-1:-1;;;;;6965:167:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7145:4;7138:11;;6804:350;;;;;;:::o;7622:::-;7734:42;;;;;;;;;;;;-1:-1:-1;;;7770:4:8;7734:42;;;;;;;22:32:-1;26:21;;;22:32;6:49;;7734:42:8;;;;;;;;7724:53;;7691:12;;;;7734:42;;;;;7724:53;;;;7734:42;7724:53;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;8440:350:8;8552:42;;;;;;;;;;;;-1:-1:-1;;;8588:4:8;8552:42;;;;;;;22:32:-1;26:21;;;22:32;6:49;;8552:42:8;;;;;;;;8542:53;;8509:12;;;;8552:42;;;;;8542:53;;;;8552:42;8542:53;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;9253:354:8;9367:43;;;;;;;;;;;;-1:-1:-1;;;9404:4:8;9367:43;;;;;;;22:32:-1;26:21;;;22:32;6:49;;9367:43:8;;;;;;;;9357:54;;9324:12;;;;9367:43;;;;;9357:54;;;;9367:43;9357:54;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;10104:352:8;10217:42;;;;;;;;;;;;-1:-1:-1;;;10253:4:8;10217:42;;;;;;;22:32:-1;26:21;;;22:32;6:49;;10217:42:8;;;;;;;;10207:53;;10174:12;;;;10217:42;;;;;10207:53;;;;10217:42;10207:53;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;10207:53:8;;;;;;;;;;;;10281:12;;:33;;;;;;;;;;;;;;;;;;;;;;;10207:53;;-1:-1:-1;;;;;;10281:12:8;;;;-1:-1:-1;10281:21:8;;-1:-1:-1;10207:53:8;;10281:33;;-1:-1:-1;10281:33:8;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;10281:33:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;22194:215:8;22280:11;22299:10;22350:15;22322:44;;;;;;;;;;;;;-1:-1:-1;;;;;22322:44:8;-1:-1:-1;;;;;22322:44:8;-1:-1:-1;;;22322:44:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;22322:44:8;;;22312:55;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;22312:55:8;;;;;;;;;;;;22380:12;;-1:-1:-1;;;;;22380:24:8;;;;;;;;;;22312:55;;-1:-1:-1;;;;;;22380:12:8;;;;-1:-1:-1;22380:20:8;;-1:-1:-1;22380:24:8;;;;;263:2:-1;;-1:-1;22380:24:8;;;;;;;-1:-1:-1;22380:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;22380:24:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22380:24:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22380:24:8;;22194:215;-1:-1:-1;;;;22194:215:8:o;22789:::-;22875:11;22894:10;22945:15;22917:44;;;;;;;;;;;;;-1:-1:-1;;;;;22917:44:8;-1:-1:-1;;;;;22917:44:8;-1:-1:-1;;;22917:44:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;22917:44:8;;;22907:55;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;23384:215:8;23470:11;23489:10;23540:15;23512:44;;;;;;;;;;;;;-1:-1:-1;;;;;23512:44:8;-1:-1:-1;;;;;23512:44:8;-1:-1:-1;;;23512:44:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;23512:44:8;;;23502:55;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;23974:218:8;24061:12;24081:10;24133:15;24104:45;;;;;;;;;;;;;-1:-1:-1;;;;;24104:45:8;-1:-1:-1;;;;;24104:45:8;-1:-1:-1;;;24104:45:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;24104:45:8;;;24094:56;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;24580:217:8;24666:12;24686:10;24737:15;24709:44;;;;;;;;;;;;;-1:-1:-1;;;;;24709:44:8;-1:-1:-1;;;;;24709:44:8;-1:-1:-1;;;24709:44:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;24709:44:8;;;24699:55;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;24699:55:8;;;;;;;;;;;;24767:12;;:25;;;;;;;;;;;24699:55;;-1:-1:-1;;;;;;24767:12:8;;;;-1:-1:-1;24767:21:8;;-1:-1:-1;24767:25:8;;;;;-1:-1:-1;;;24767:25:8;;;;;;-1:-1:-1;24767:12:8;:25;;;5:2:-1;;;;30:1;27;20:12;5:2;24767:25:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24767:25:8;;;;;;39:16:-1;36:1;17:17;2:54;101:4;24767:25:8;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;24767:25:8;;;;;;20:11:-1;15:3;12:20;9:2;;;45:1;42;35:12;9:2;64:21;;126:4;117:14;;142:31;;;139:2;;;186:1;183;176:12;139:2;218:10;;268:11;251:29;;293:43;;;290:58;-1:-1;239:118;236:2;;;370:1;367;360:12;236:2;-1:-1;24767:25:8;;24580:217;-1:-1:-1;;;;;;;;24580:217:8:o;16400:357::-;16488:25;16521:10;16594:23;16579:7;16544:43;;;;;;;;;;;;;-1:-1:-1;;;;;16544:43:8;-1:-1:-1;;;;;16544:43:8;-1:-1:-1;;;16544:43:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16544:43:8;;;16534:54;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;16534:54:8;;;;;;;;;;;;16620:12;;:27;;;;;;;;;;;16534:54;;-1:-1:-1;;;;;;16620:12:8;;;;-1:-1:-1;16620:23:8;;-1:-1:-1;16620:27:8;;;;;263:2:-1;;-1:-1;16620:27:8;;;;;;;-1:-1:-1;16620:12:8;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;16620:27:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16620:27:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16620:27:8;;-1:-1:-1;;;;;;16657:22:8;;;16653:100;;16696:15;16689:22;;;;16653:100;16739:7;16732:14;;16653:100;16400:357;;;;;;:::o;1143:234:2:-;1201:14;1307:6;;;;1299:55;;;;;-1:-1:-1;;;;;1299:55:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1367:5:2;;;1143:234::o;1540:174::-;1598:14;1632:5;;;1651:6;;;;1643:52;;;;;-1:-1:-1;;;;;1643:52:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1708:1;1540:174;-1:-1:-1;;;1540:174:2:o;301:224::-;359:14;;385:6;;381:35;;;408:1;401:8;;;;381:35;-1:-1:-1;433:5:2;;;437:1;433;:5;452;;;;;;;;:10;444:62;;;;;-1:-1:-1;;;;;444:62:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;697:284;755:14;857:9;873:1;869;:5;;;;;;;;;697:284;-1:-1:-1;;;;697:284:2:o", + "source": "pragma solidity 0.4.24;\n\nimport \"./Ownable.sol\";\nimport \"./TokenIOStorage.sol\";\nimport \"./TokenIOLib.sol\";\n\n\n/*\nCOPYRIGHT 2018 Token, Inc.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n@title Standard Fee Contract for Token, Inc. Smart Money System\n\n@author Ryan Tate , Sean Pollock \n\n@notice Contract uses generalized storage contract, `TokenIOStorage`, for\nupgradeability of interface contract.\n\n@dev In the event that the main contract becomes deprecated, the upgraded contract\nwill be set as the owner of this contract, and use this contract's storage to\nmaintain data consistency between contract.\n\n*/\n\n\ncontract TokenIOFeeContract is Ownable {\n\n\t/// @dev Set reference to TokenIOLib interface which proxies to TokenIOStorage\n\tusing TokenIOLib for TokenIOLib.Data;\n\tTokenIOLib.Data lib;\n\n\n\t/**\n\t* @notice Constructor method for ERC20 contract\n\t* @param _storageContract address of TokenIOStorage contract\n\t*/\n\tconstructor(address _storageContract) public {\n\t\t\t/// @dev Set the storage contract for the interface\n\t\t\t/// @dev NOTE: This contract will be unable to use the storage constract until\n\t\t\t/// @dev contract address is authorized with the storage contract\n\t\t\t/// @dev Once authorized, Use the `setParams` method to set storage values\n\t\t\tlib.Storage = TokenIOStorage(_storageContract);\n\n\t\t\t/// @dev set owner to contract initiator\n\t\t\towner[msg.sender] = true;\n\t}\n\n\t/**\n\t * @notice Set Fee Parameters for Fee Contract\n\t * @dev The min, max, flat transaction fees should be relative to decimal precision\n\t * @param feeBps Basis points transaction fee\n\t * @param feeMin Minimum transaction fees\n\t * @param feeMax Maximum transaction fee\n\t * @param feeFlat Flat transaction fee\n\t * returns {\"success\" : \"Returns true if successfully called from another contract\"}\n\t */\n\tfunction setFeeParams(uint feeBps, uint feeMin, uint feeMax, uint feeFlat, bytes feeMsg) public onlyOwner returns (bool success) {\n\t\trequire(lib.setFeeBPS(feeBps), \"Error: Unable to set fee contract basis points.\");\n\t\trequire(lib.setFeeMin(feeMin), \"Error: Unable to set fee contract minimum fee.\");\n\t\trequire(lib.setFeeMax(feeMax), \"Error: Unable to set fee contract maximum fee.\");\n\t\trequire(lib.setFeeFlat(feeFlat), \"Error: Unable to set fee contract flat fee.\");\n\t\trequire(lib.setFeeMsg(feeMsg), \"Error: Unable to set fee contract default message.\");\n\t\treturn true;\n\t}\n\n\t/**\n\t \t* @notice Gets fee parameters\n\t\t* @return {\n\t\t\"bps\":\"Returns the basis points fee of the TokenIOFeeContract\",\n\t\t\"min\":\"Returns the min fee of the TokenIOFeeContract\",\n\t\t\"max\":\"Returns the max fee of the TokenIOFeeContract\",\n\t\t\"flat\":\"Returns the flat fee of the TokenIOFeeContract\",\n\t\t\"feeContract\": \"Address of this contract\"\n\t}\n\t*/\n\tfunction getFeeParams() public view returns (uint bps, uint min, uint max, uint flat, bytes feeMsg, address feeContract) {\n\t\t\treturn (\n\t\t\t\t\tlib.getFeeBPS(address(this)),\n\t\t\t\t\tlib.getFeeMin(address(this)),\n\t\t\t\t\tlib.getFeeMax(address(this)),\n\t\t\t\t\tlib.getFeeFlat(address(this)),\n\t\t\t\t\tlib.getFeeMsg(address(this)),\n\t\t\t\t\taddress(this)\n\t\t\t);\n\t}\n\n\t/**\n\t * @notice Returns balance of this contract associated with currency symbol.\n\t * @param currency Currency symbol of the token (e.g. USDx, JYPx, GBPx)\n\t * @return {\"balance\": \"Balance of TokenIO TSM currency account\"}\n\t */\n\tfunction getTokenBalance(string currency) public view returns(uint balance) {\n\t\treturn lib.getTokenBalance(currency, address(this));\n\t}\n\n\t/** @notice Calculates fee of a given transfer amount\n\t * @param amount transfer amount\n\t * @return { \"fees\": \"Returns the fees associated with this contract\"}\n\t */\n\tfunction calculateFees(uint amount) public view returns (uint fees) {\n\t\treturn lib.calculateFees(address(this), amount);\n\t}\n\n\n\t/**\n\t * @notice Transfer collected fees to another account; onlyOwner\n\t * @param currency Currency symbol of the token (e.g. USDx, JYPx, GBPx)\n\t * @param to \t\t\tEthereum address of account to send token amount to\n\t * @param amount\t Amount of tokens to transfer\n\t * @param data\t\t Arbitrary bytes data message to include in transfer\n\t * @return {\"success\": \"Returns ture if successfully called from another contract\"}\n\t */\n\tfunction transferCollectedFees(string currency, address to, uint amount, bytes data) public onlyOwner returns (bool success) {\n\t\trequire(\n\t\t\tlib.forceTransfer(currency, address(this), to, amount, data),\n\t\t\t\"Error: unable to transfer fees to account.\"\n\t\t);\n\t\treturn true;\n\t}\n\n\n}\n", + "sourcePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOFeeContract.sol", + "ast": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOFeeContract.sol", + "exportedSymbols": { + "TokenIOFeeContract": [ + 1620 + ] + }, + "id": 1621, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1413, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:7" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 1414, + "nodeType": "ImportDirective", + "scope": 1621, + "sourceUnit": 185, + "src": "25:23:7", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 1415, + "nodeType": "ImportDirective", + "scope": 1621, + "sourceUnit": 5226, + "src": "49:30:7", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 1416, + "nodeType": "ImportDirective", + "scope": 1621, + "sourceUnit": 4607, + "src": "80:26:7", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 1417, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "1101:7:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 1418, + "nodeType": "InheritanceSpecifier", + "src": "1101:7:7" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 1620, + "linearizedBaseContracts": [ + 1620, + 184 + ], + "name": "TokenIOFeeContract", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 1421, + "libraryName": { + "contractScope": null, + "id": 1419, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4606, + "src": "1199:10:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4606", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "1193:37:7", + "typeName": { + "contractScope": null, + "id": 1420, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1214:15:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 1423, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 1620, + "src": "1232:19:7", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 1422, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1232:15:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 1443, + "nodeType": "Block", + "src": "1425:413:7", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 1434, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1428, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "1714:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1430, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1629, + "src": "1714:11:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1432, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1425, + "src": "1743:16:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1431, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5225, + "src": "1728:14:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5225_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 1433, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1728:32:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1714:46:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "id": 1435, + "nodeType": "ExpressionStatement", + "src": "1714:46:7" + }, + { + "expression": { + "argumentTypes": null, + "id": 1441, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1436, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1810:5:7", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 1439, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1437, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "1816:3:7", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1438, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1816:10:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1810:17:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1440, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1830:4:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1810:24:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 1442, + "nodeType": "ExpressionStatement", + "src": "1810:24:7" + } + ] + }, + "documentation": "@notice Constructor method for ERC20 contract\n@param _storageContract address of TokenIOStorage contract", + "id": 1444, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1426, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1425, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 1444, + "src": "1392:24:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1424, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1392:7:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1391:26:7" + }, + "payable": false, + "returnParameters": { + "id": 1427, + "nodeType": "ParameterList", + "parameters": [], + "src": "1425:0:7" + }, + "scope": 1620, + "src": "1380:458:7", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1503, + "nodeType": "Block", + "src": "2371:443:7", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1464, + "name": "feeBps", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1446, + "src": "2397:6:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1462, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "2383:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1463, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeBPS", + "nodeType": "MemberAccess", + "referencedDeclaration": 1916, + "src": "2383:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,uint256) returns (bool)" + } + }, + "id": 1465, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2383:21:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e747261637420626173697320706f696e74732e", + "id": 1466, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2406:49:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_fabd5d1fd4f46cccda6663dddcde851f014c68fb6b477db4d11f0ae282983893", + "typeString": "literal_string \"Error: Unable to set fee contract basis points.\"" + }, + "value": "Error: Unable to set fee contract basis points." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_fabd5d1fd4f46cccda6663dddcde851f014c68fb6b477db4d11f0ae282983893", + "typeString": "literal_string \"Error: Unable to set fee contract basis points.\"" + } + ], + "id": 1461, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2375:7:7", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1467, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2375:81:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1468, + "nodeType": "ExpressionStatement", + "src": "2375:81:7" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1472, + "name": "feeMin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1448, + "src": "2482:6:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1470, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "2468:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1471, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeMin", + "nodeType": "MemberAccess", + "referencedDeclaration": 1950, + "src": "2468:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,uint256) returns (bool)" + } + }, + "id": 1473, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2468:21:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e7472616374206d696e696d756d206665652e", + "id": 1474, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2491:48:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_9d061faaf87dcb8cd3753e1f1579fa198544ef425a6a0fa7431375fb437439d3", + "typeString": "literal_string \"Error: Unable to set fee contract minimum fee.\"" + }, + "value": "Error: Unable to set fee contract minimum fee." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_9d061faaf87dcb8cd3753e1f1579fa198544ef425a6a0fa7431375fb437439d3", + "typeString": "literal_string \"Error: Unable to set fee contract minimum fee.\"" + } + ], + "id": 1469, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2460:7:7", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1475, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2460:80:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1476, + "nodeType": "ExpressionStatement", + "src": "2460:80:7" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1480, + "name": "feeMax", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1450, + "src": "2566:6:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1478, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "2552:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1479, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeMax", + "nodeType": "MemberAccess", + "referencedDeclaration": 1984, + "src": "2552:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,uint256) returns (bool)" + } + }, + "id": 1481, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2552:21:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e7472616374206d6178696d756d206665652e", + "id": 1482, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2575:48:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_169ffce6c52c466e162efa9907d18f3ba172d8306517a48ca6d1e404adce90b4", + "typeString": "literal_string \"Error: Unable to set fee contract maximum fee.\"" + }, + "value": "Error: Unable to set fee contract maximum fee." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_169ffce6c52c466e162efa9907d18f3ba172d8306517a48ca6d1e404adce90b4", + "typeString": "literal_string \"Error: Unable to set fee contract maximum fee.\"" + } + ], + "id": 1477, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2544:7:7", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1483, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2544:80:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1484, + "nodeType": "ExpressionStatement", + "src": "2544:80:7" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1488, + "name": "feeFlat", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1452, + "src": "2651:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1486, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "2636:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1487, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeFlat", + "nodeType": "MemberAccess", + "referencedDeclaration": 2018, + "src": "2636:14:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,uint256) returns (bool)" + } + }, + "id": 1489, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2636:23:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e747261637420666c6174206665652e", + "id": 1490, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2661:45:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_ee0d3dfb62386e6a3c97e5024bd5d251b38044fd1dc8082b8b6b030fd34e14cf", + "typeString": "literal_string \"Error: Unable to set fee contract flat fee.\"" + }, + "value": "Error: Unable to set fee contract flat fee." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_ee0d3dfb62386e6a3c97e5024bd5d251b38044fd1dc8082b8b6b030fd34e14cf", + "typeString": "literal_string \"Error: Unable to set fee contract flat fee.\"" + } + ], + "id": 1485, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2628:7:7", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1491, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2628:79:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1492, + "nodeType": "ExpressionStatement", + "src": "2628:79:7" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1496, + "name": "feeMsg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1454, + "src": "2733:6:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 1494, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "2719:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1495, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeMsg", + "nodeType": "MemberAccess", + "referencedDeclaration": 2052, + "src": "2719:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,bytes memory) returns (bool)" + } + }, + "id": 1497, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2719:21:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e74726163742064656661756c74206d6573736167652e", + "id": 1498, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2742:52:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_4dd72252a38b4e1a2efba252c9ae574b50710ebb7f2ad4764fe84352ca2d020f", + "typeString": "literal_string \"Error: Unable to set fee contract default message.\"" + }, + "value": "Error: Unable to set fee contract default message." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_4dd72252a38b4e1a2efba252c9ae574b50710ebb7f2ad4764fe84352ca2d020f", + "typeString": "literal_string \"Error: Unable to set fee contract default message.\"" + } + ], + "id": 1493, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2711:7:7", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1499, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2711:84:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1500, + "nodeType": "ExpressionStatement", + "src": "2711:84:7" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1501, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2806:4:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1460, + "id": 1502, + "nodeType": "Return", + "src": "2799:11:7" + } + ] + }, + "documentation": "@notice Set Fee Parameters for Fee Contract\n@dev The min, max, flat transaction fees should be relative to decimal precision\n@param feeBps Basis points transaction fee\n@param feeMin Minimum transaction fees\n@param feeMax Maximum transaction fee\n@param feeFlat Flat transaction fee\nreturns {\"success\" : \"Returns true if successfully called from another contract\"}", + "id": 1504, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 1457, + "modifierName": { + "argumentTypes": null, + "id": 1456, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "2338:9:7", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2338:9:7" + } + ], + "name": "setFeeParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1455, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1446, + "name": "feeBps", + "nodeType": "VariableDeclaration", + "scope": 1504, + "src": "2264:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1445, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2264:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1448, + "name": "feeMin", + "nodeType": "VariableDeclaration", + "scope": 1504, + "src": "2277:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1447, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2277:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1450, + "name": "feeMax", + "nodeType": "VariableDeclaration", + "scope": 1504, + "src": "2290:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1449, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2290:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1452, + "name": "feeFlat", + "nodeType": "VariableDeclaration", + "scope": 1504, + "src": "2303:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1451, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2303:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1454, + "name": "feeMsg", + "nodeType": "VariableDeclaration", + "scope": 1504, + "src": "2317:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1453, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2317:5:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2263:67:7" + }, + "payable": false, + "returnParameters": { + "id": 1460, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1459, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1504, + "src": "2357:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1458, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2357:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2356:14:7" + }, + "scope": 1620, + "src": "2242:572:7", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1554, + "nodeType": "Block", + "src": "3280:217:7", + "statements": [ + { + "expression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1522, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5271, + "src": "3321:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1521, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3313:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1523, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3313:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1519, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "3299:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1520, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeBPS", + "nodeType": "MemberAccess", + "referencedDeclaration": 2522, + "src": "3299:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1524, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3299:28:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1528, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5271, + "src": "3356:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1527, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3348:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1529, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3348:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1525, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "3334:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1526, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMin", + "nodeType": "MemberAccess", + "referencedDeclaration": 2548, + "src": "3334:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1530, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3334:28:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1534, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5271, + "src": "3391:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1533, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3383:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1535, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3383:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1531, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "3369:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1532, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMax", + "nodeType": "MemberAccess", + "referencedDeclaration": 2574, + "src": "3369:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1536, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3369:28:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1540, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5271, + "src": "3427:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1539, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3419:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1541, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3419:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1537, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "3404:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1538, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeFlat", + "nodeType": "MemberAccess", + "referencedDeclaration": 2600, + "src": "3404:14:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1542, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3404:29:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1546, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5271, + "src": "3462:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1545, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3454:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1547, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3454:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1543, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "3440:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1544, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMsg", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "3440:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bytes memory)" + } + }, + "id": 1548, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3440:28:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1550, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5271, + "src": "3483:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1549, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3475:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1551, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3475:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 1552, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3292:201:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_address_$", + "typeString": "tuple(uint256,uint256,uint256,uint256,bytes memory,address)" + } + }, + "functionReturnParameters": 1518, + "id": 1553, + "nodeType": "Return", + "src": "3285:208:7" + } + ] + }, + "documentation": "@notice Gets fee parameters\n@return {\n\"bps\":\"Returns the basis points fee of the TokenIOFeeContract\",\n\"min\":\"Returns the min fee of the TokenIOFeeContract\",\n\"max\":\"Returns the max fee of the TokenIOFeeContract\",\n\"flat\":\"Returns the flat fee of the TokenIOFeeContract\",\n\"feeContract\": \"Address of this contract\"\n}", + "id": 1555, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getFeeParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1505, + "nodeType": "ParameterList", + "parameters": [], + "src": "3180:2:7" + }, + "payable": false, + "returnParameters": { + "id": 1518, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1507, + "name": "bps", + "nodeType": "VariableDeclaration", + "scope": 1555, + "src": "3204:8:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1506, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3204:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1509, + "name": "min", + "nodeType": "VariableDeclaration", + "scope": 1555, + "src": "3214:8:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1508, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3214:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1511, + "name": "max", + "nodeType": "VariableDeclaration", + "scope": 1555, + "src": "3224:8:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1510, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3224:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1513, + "name": "flat", + "nodeType": "VariableDeclaration", + "scope": 1555, + "src": "3234:9:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1512, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3234:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1515, + "name": "feeMsg", + "nodeType": "VariableDeclaration", + "scope": 1555, + "src": "3245:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1514, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3245:5:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1517, + "name": "feeContract", + "nodeType": "VariableDeclaration", + "scope": 1555, + "src": "3259:19:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1516, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3259:7:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3203:76:7" + }, + "scope": 1620, + "src": "3159:338:7", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1570, + "nodeType": "Block", + "src": "3805:59:7", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1564, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1557, + "src": "3836:8:7", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1566, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5271, + "src": "3854:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1565, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3846:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1567, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3846:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1562, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "3816:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1563, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenBalance", + "nodeType": "MemberAccess", + "referencedDeclaration": 2816, + "src": "3816:19:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address) view returns (uint256)" + } + }, + "id": 1568, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3816:44:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1561, + "id": 1569, + "nodeType": "Return", + "src": "3809:51:7" + } + ] + }, + "documentation": "@notice Returns balance of this contract associated with currency symbol.\n@param currency Currency symbol of the token (e.g. USDx, JYPx, GBPx)\n@return {\"balance\": \"Balance of TokenIO TSM currency account\"}", + "id": 1571, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getTokenBalance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1558, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1557, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 1571, + "src": "3754:15:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1556, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3754:6:7", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3753:17:7" + }, + "payable": false, + "returnParameters": { + "id": 1561, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1560, + "name": "balance", + "nodeType": "VariableDeclaration", + "scope": 1571, + "src": "3791:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1559, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3791:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3790:14:7" + }, + "scope": 1620, + "src": "3729:135:7", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1586, + "nodeType": "Block", + "src": "4101:55:7", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1581, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5271, + "src": "4138:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1580, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4130:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1582, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4130:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1583, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1573, + "src": "4145:6:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1578, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "4112:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1579, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "calculateFees", + "nodeType": "MemberAccess", + "referencedDeclaration": 2988, + "src": "4112:17:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) view returns (uint256)" + } + }, + "id": 1584, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4112:40:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1577, + "id": 1585, + "nodeType": "Return", + "src": "4105:47:7" + } + ] + }, + "documentation": "@notice Calculates fee of a given transfer amount\n@param amount transfer amount\n@return { \"fees\": \"Returns the fees associated with this contract\"}", + "id": 1587, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "calculateFees", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1574, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1573, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1587, + "src": "4056:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1572, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "4056:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4055:13:7" + }, + "payable": false, + "returnParameters": { + "id": 1577, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1576, + "name": "fees", + "nodeType": "VariableDeclaration", + "scope": 1587, + "src": "4090:9:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1575, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "4090:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4089:11:7" + }, + "scope": 1620, + "src": "4033:123:7", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1618, + "nodeType": "Block", + "src": "4712:148:7", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1605, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1589, + "src": "4746:8:7", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1607, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5271, + "src": "4764:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1606, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4756:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1608, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4756:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1609, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1591, + "src": "4771:2:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1610, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1593, + "src": "4775:6:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1611, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1595, + "src": "4783:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 1603, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "4728:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1604, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "forceTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 3335, + "src": "4728:17:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,address,uint256,bytes memory) returns (bool)" + } + }, + "id": 1612, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4728:60:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20756e61626c6520746f207472616e73666572206665657320746f206163636f756e742e", + "id": 1613, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4793:44:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_1a0e1b57a2efd16cddba9f3dc60eebac17ba4db509e733796cdcf13851421b2c", + "typeString": "literal_string \"Error: unable to transfer fees to account.\"" + }, + "value": "Error: unable to transfer fees to account." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_1a0e1b57a2efd16cddba9f3dc60eebac17ba4db509e733796cdcf13851421b2c", + "typeString": "literal_string \"Error: unable to transfer fees to account.\"" + } + ], + "id": 1602, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "4716:7:7", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1614, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4716:125:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1615, + "nodeType": "ExpressionStatement", + "src": "4716:125:7" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1616, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4852:4:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1601, + "id": 1617, + "nodeType": "Return", + "src": "4845:11:7" + } + ] + }, + "documentation": "@notice Transfer collected fees to another account; onlyOwner\n@param currency Currency symbol of the token (e.g. USDx, JYPx, GBPx)\n@param to \t\t\tEthereum address of account to send token amount to\n@param amount\t Amount of tokens to transfer\n@param data\t\t Arbitrary bytes data message to include in transfer\n@return {\"success\": \"Returns ture if successfully called from another contract\"}", + "id": 1619, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 1598, + "modifierName": { + "argumentTypes": null, + "id": 1597, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "4679:9:7", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "4679:9:7" + } + ], + "name": "transferCollectedFees", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1596, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1589, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 1619, + "src": "4618:15:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1588, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "4618:6:7", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1591, + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 1619, + "src": "4635:10:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1590, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4635:7:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1593, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1619, + "src": "4647:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1592, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "4647:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1595, + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 1619, + "src": "4660:10:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1594, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4660:5:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4617:54:7" + }, + "payable": false, + "returnParameters": { + "id": 1601, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1600, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1619, + "src": "4698:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1599, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4698:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4697:14:7" + }, + "scope": 1620, + "src": "4587:273:7", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 1621, + "src": "1070:3794:7" + } + ], + "src": "0:4865:7" + }, + "legacyAST": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOFeeContract.sol", + "exportedSymbols": { + "TokenIOFeeContract": [ + 1620 + ] + }, + "id": 1621, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1413, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:7" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 1414, + "nodeType": "ImportDirective", + "scope": 1621, + "sourceUnit": 185, + "src": "25:23:7", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 1415, + "nodeType": "ImportDirective", + "scope": 1621, + "sourceUnit": 5226, + "src": "49:30:7", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 1416, + "nodeType": "ImportDirective", + "scope": 1621, + "sourceUnit": 4607, + "src": "80:26:7", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 1417, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "1101:7:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 1418, + "nodeType": "InheritanceSpecifier", + "src": "1101:7:7" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 1620, + "linearizedBaseContracts": [ + 1620, + 184 + ], + "name": "TokenIOFeeContract", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 1421, + "libraryName": { + "contractScope": null, + "id": 1419, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4606, + "src": "1199:10:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4606", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "1193:37:7", + "typeName": { + "contractScope": null, + "id": 1420, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1214:15:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 1423, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 1620, + "src": "1232:19:7", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 1422, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1232:15:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 1443, + "nodeType": "Block", + "src": "1425:413:7", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 1434, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1428, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "1714:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1430, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1629, + "src": "1714:11:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1432, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1425, + "src": "1743:16:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1431, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5225, + "src": "1728:14:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5225_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 1433, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1728:32:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1714:46:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "id": 1435, + "nodeType": "ExpressionStatement", + "src": "1714:46:7" + }, + { + "expression": { + "argumentTypes": null, + "id": 1441, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1436, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1810:5:7", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 1439, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1437, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "1816:3:7", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1438, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1816:10:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1810:17:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1440, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1830:4:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1810:24:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 1442, + "nodeType": "ExpressionStatement", + "src": "1810:24:7" + } + ] + }, + "documentation": "@notice Constructor method for ERC20 contract\n@param _storageContract address of TokenIOStorage contract", + "id": 1444, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1426, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1425, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 1444, + "src": "1392:24:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1424, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1392:7:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1391:26:7" + }, + "payable": false, + "returnParameters": { + "id": 1427, + "nodeType": "ParameterList", + "parameters": [], + "src": "1425:0:7" + }, + "scope": 1620, + "src": "1380:458:7", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1503, + "nodeType": "Block", + "src": "2371:443:7", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1464, + "name": "feeBps", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1446, + "src": "2397:6:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1462, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "2383:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1463, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeBPS", + "nodeType": "MemberAccess", + "referencedDeclaration": 1916, + "src": "2383:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,uint256) returns (bool)" + } + }, + "id": 1465, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2383:21:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e747261637420626173697320706f696e74732e", + "id": 1466, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2406:49:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_fabd5d1fd4f46cccda6663dddcde851f014c68fb6b477db4d11f0ae282983893", + "typeString": "literal_string \"Error: Unable to set fee contract basis points.\"" + }, + "value": "Error: Unable to set fee contract basis points." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_fabd5d1fd4f46cccda6663dddcde851f014c68fb6b477db4d11f0ae282983893", + "typeString": "literal_string \"Error: Unable to set fee contract basis points.\"" + } + ], + "id": 1461, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2375:7:7", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1467, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2375:81:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1468, + "nodeType": "ExpressionStatement", + "src": "2375:81:7" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1472, + "name": "feeMin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1448, + "src": "2482:6:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1470, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "2468:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1471, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeMin", + "nodeType": "MemberAccess", + "referencedDeclaration": 1950, + "src": "2468:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,uint256) returns (bool)" + } + }, + "id": 1473, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2468:21:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e7472616374206d696e696d756d206665652e", + "id": 1474, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2491:48:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_9d061faaf87dcb8cd3753e1f1579fa198544ef425a6a0fa7431375fb437439d3", + "typeString": "literal_string \"Error: Unable to set fee contract minimum fee.\"" + }, + "value": "Error: Unable to set fee contract minimum fee." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_9d061faaf87dcb8cd3753e1f1579fa198544ef425a6a0fa7431375fb437439d3", + "typeString": "literal_string \"Error: Unable to set fee contract minimum fee.\"" + } + ], + "id": 1469, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2460:7:7", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1475, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2460:80:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1476, + "nodeType": "ExpressionStatement", + "src": "2460:80:7" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1480, + "name": "feeMax", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1450, + "src": "2566:6:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1478, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "2552:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1479, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeMax", + "nodeType": "MemberAccess", + "referencedDeclaration": 1984, + "src": "2552:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,uint256) returns (bool)" + } + }, + "id": 1481, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2552:21:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e7472616374206d6178696d756d206665652e", + "id": 1482, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2575:48:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_169ffce6c52c466e162efa9907d18f3ba172d8306517a48ca6d1e404adce90b4", + "typeString": "literal_string \"Error: Unable to set fee contract maximum fee.\"" + }, + "value": "Error: Unable to set fee contract maximum fee." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_169ffce6c52c466e162efa9907d18f3ba172d8306517a48ca6d1e404adce90b4", + "typeString": "literal_string \"Error: Unable to set fee contract maximum fee.\"" + } + ], + "id": 1477, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2544:7:7", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1483, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2544:80:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1484, + "nodeType": "ExpressionStatement", + "src": "2544:80:7" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1488, + "name": "feeFlat", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1452, + "src": "2651:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1486, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "2636:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1487, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeFlat", + "nodeType": "MemberAccess", + "referencedDeclaration": 2018, + "src": "2636:14:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,uint256) returns (bool)" + } + }, + "id": 1489, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2636:23:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e747261637420666c6174206665652e", + "id": 1490, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2661:45:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_ee0d3dfb62386e6a3c97e5024bd5d251b38044fd1dc8082b8b6b030fd34e14cf", + "typeString": "literal_string \"Error: Unable to set fee contract flat fee.\"" + }, + "value": "Error: Unable to set fee contract flat fee." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_ee0d3dfb62386e6a3c97e5024bd5d251b38044fd1dc8082b8b6b030fd34e14cf", + "typeString": "literal_string \"Error: Unable to set fee contract flat fee.\"" + } + ], + "id": 1485, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2628:7:7", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1491, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2628:79:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1492, + "nodeType": "ExpressionStatement", + "src": "2628:79:7" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1496, + "name": "feeMsg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1454, + "src": "2733:6:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 1494, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "2719:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1495, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeMsg", + "nodeType": "MemberAccess", + "referencedDeclaration": 2052, + "src": "2719:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,bytes memory) returns (bool)" + } + }, + "id": 1497, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2719:21:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e74726163742064656661756c74206d6573736167652e", + "id": 1498, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2742:52:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_4dd72252a38b4e1a2efba252c9ae574b50710ebb7f2ad4764fe84352ca2d020f", + "typeString": "literal_string \"Error: Unable to set fee contract default message.\"" + }, + "value": "Error: Unable to set fee contract default message." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_4dd72252a38b4e1a2efba252c9ae574b50710ebb7f2ad4764fe84352ca2d020f", + "typeString": "literal_string \"Error: Unable to set fee contract default message.\"" + } + ], + "id": 1493, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2711:7:7", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1499, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2711:84:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1500, + "nodeType": "ExpressionStatement", + "src": "2711:84:7" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1501, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2806:4:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1460, + "id": 1502, + "nodeType": "Return", + "src": "2799:11:7" + } + ] + }, + "documentation": "@notice Set Fee Parameters for Fee Contract\n@dev The min, max, flat transaction fees should be relative to decimal precision\n@param feeBps Basis points transaction fee\n@param feeMin Minimum transaction fees\n@param feeMax Maximum transaction fee\n@param feeFlat Flat transaction fee\nreturns {\"success\" : \"Returns true if successfully called from another contract\"}", + "id": 1504, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 1457, + "modifierName": { + "argumentTypes": null, + "id": 1456, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "2338:9:7", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2338:9:7" + } + ], + "name": "setFeeParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1455, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1446, + "name": "feeBps", + "nodeType": "VariableDeclaration", + "scope": 1504, + "src": "2264:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1445, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2264:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1448, + "name": "feeMin", + "nodeType": "VariableDeclaration", + "scope": 1504, + "src": "2277:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1447, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2277:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1450, + "name": "feeMax", + "nodeType": "VariableDeclaration", + "scope": 1504, + "src": "2290:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1449, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2290:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1452, + "name": "feeFlat", + "nodeType": "VariableDeclaration", + "scope": 1504, + "src": "2303:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1451, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2303:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1454, + "name": "feeMsg", + "nodeType": "VariableDeclaration", + "scope": 1504, + "src": "2317:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1453, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2317:5:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2263:67:7" + }, + "payable": false, + "returnParameters": { + "id": 1460, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1459, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1504, + "src": "2357:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1458, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2357:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2356:14:7" + }, + "scope": 1620, + "src": "2242:572:7", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1554, + "nodeType": "Block", + "src": "3280:217:7", + "statements": [ + { + "expression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1522, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5271, + "src": "3321:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1521, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3313:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1523, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3313:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1519, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "3299:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1520, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeBPS", + "nodeType": "MemberAccess", + "referencedDeclaration": 2522, + "src": "3299:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1524, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3299:28:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1528, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5271, + "src": "3356:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1527, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3348:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1529, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3348:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1525, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "3334:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1526, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMin", + "nodeType": "MemberAccess", + "referencedDeclaration": 2548, + "src": "3334:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1530, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3334:28:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1534, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5271, + "src": "3391:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1533, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3383:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1535, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3383:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1531, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "3369:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1532, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMax", + "nodeType": "MemberAccess", + "referencedDeclaration": 2574, + "src": "3369:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1536, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3369:28:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1540, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5271, + "src": "3427:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1539, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3419:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1541, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3419:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1537, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "3404:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1538, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeFlat", + "nodeType": "MemberAccess", + "referencedDeclaration": 2600, + "src": "3404:14:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 1542, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3404:29:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1546, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5271, + "src": "3462:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1545, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3454:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1547, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3454:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1543, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "3440:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1544, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMsg", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "3440:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bytes memory)" + } + }, + "id": 1548, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3440:28:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1550, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5271, + "src": "3483:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1549, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3475:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1551, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3475:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 1552, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3292:201:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_address_$", + "typeString": "tuple(uint256,uint256,uint256,uint256,bytes memory,address)" + } + }, + "functionReturnParameters": 1518, + "id": 1553, + "nodeType": "Return", + "src": "3285:208:7" + } + ] + }, + "documentation": "@notice Gets fee parameters\n@return {\n\"bps\":\"Returns the basis points fee of the TokenIOFeeContract\",\n\"min\":\"Returns the min fee of the TokenIOFeeContract\",\n\"max\":\"Returns the max fee of the TokenIOFeeContract\",\n\"flat\":\"Returns the flat fee of the TokenIOFeeContract\",\n\"feeContract\": \"Address of this contract\"\n}", + "id": 1555, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getFeeParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1505, + "nodeType": "ParameterList", + "parameters": [], + "src": "3180:2:7" + }, + "payable": false, + "returnParameters": { + "id": 1518, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1507, + "name": "bps", + "nodeType": "VariableDeclaration", + "scope": 1555, + "src": "3204:8:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1506, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3204:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1509, + "name": "min", + "nodeType": "VariableDeclaration", + "scope": 1555, + "src": "3214:8:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1508, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3214:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1511, + "name": "max", + "nodeType": "VariableDeclaration", + "scope": 1555, + "src": "3224:8:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1510, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3224:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1513, + "name": "flat", + "nodeType": "VariableDeclaration", + "scope": 1555, + "src": "3234:9:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1512, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3234:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1515, + "name": "feeMsg", + "nodeType": "VariableDeclaration", + "scope": 1555, + "src": "3245:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1514, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3245:5:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1517, + "name": "feeContract", + "nodeType": "VariableDeclaration", + "scope": 1555, + "src": "3259:19:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1516, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3259:7:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3203:76:7" + }, + "scope": 1620, + "src": "3159:338:7", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1570, + "nodeType": "Block", + "src": "3805:59:7", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1564, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1557, + "src": "3836:8:7", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1566, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5271, + "src": "3854:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1565, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3846:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1567, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3846:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1562, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "3816:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1563, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenBalance", + "nodeType": "MemberAccess", + "referencedDeclaration": 2816, + "src": "3816:19:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address) view returns (uint256)" + } + }, + "id": 1568, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3816:44:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1561, + "id": 1569, + "nodeType": "Return", + "src": "3809:51:7" + } + ] + }, + "documentation": "@notice Returns balance of this contract associated with currency symbol.\n@param currency Currency symbol of the token (e.g. USDx, JYPx, GBPx)\n@return {\"balance\": \"Balance of TokenIO TSM currency account\"}", + "id": 1571, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getTokenBalance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1558, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1557, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 1571, + "src": "3754:15:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1556, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3754:6:7", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3753:17:7" + }, + "payable": false, + "returnParameters": { + "id": 1561, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1560, + "name": "balance", + "nodeType": "VariableDeclaration", + "scope": 1571, + "src": "3791:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1559, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3791:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3790:14:7" + }, + "scope": 1620, + "src": "3729:135:7", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1586, + "nodeType": "Block", + "src": "4101:55:7", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1581, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5271, + "src": "4138:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1580, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4130:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1582, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4130:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1583, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1573, + "src": "4145:6:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1578, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "4112:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1579, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "calculateFees", + "nodeType": "MemberAccess", + "referencedDeclaration": 2988, + "src": "4112:17:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) view returns (uint256)" + } + }, + "id": 1584, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4112:40:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 1577, + "id": 1585, + "nodeType": "Return", + "src": "4105:47:7" + } + ] + }, + "documentation": "@notice Calculates fee of a given transfer amount\n@param amount transfer amount\n@return { \"fees\": \"Returns the fees associated with this contract\"}", + "id": 1587, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "calculateFees", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1574, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1573, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1587, + "src": "4056:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1572, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "4056:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4055:13:7" + }, + "payable": false, + "returnParameters": { + "id": 1577, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1576, + "name": "fees", + "nodeType": "VariableDeclaration", + "scope": 1587, + "src": "4090:9:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1575, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "4090:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4089:11:7" + }, + "scope": 1620, + "src": "4033:123:7", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 1618, + "nodeType": "Block", + "src": "4712:148:7", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1605, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1589, + "src": "4746:8:7", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1607, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5271, + "src": "4764:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOFeeContract_$1620", + "typeString": "contract TokenIOFeeContract" + } + ], + "id": 1606, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4756:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 1608, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4756:13:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1609, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1591, + "src": "4771:2:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1610, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1593, + "src": "4775:6:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1611, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1595, + "src": "4783:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 1603, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1423, + "src": "4728:3:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 1604, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "forceTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 3335, + "src": "4728:17:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,address,uint256,bytes memory) returns (bool)" + } + }, + "id": 1612, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4728:60:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20756e61626c6520746f207472616e73666572206665657320746f206163636f756e742e", + "id": 1613, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4793:44:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_1a0e1b57a2efd16cddba9f3dc60eebac17ba4db509e733796cdcf13851421b2c", + "typeString": "literal_string \"Error: unable to transfer fees to account.\"" + }, + "value": "Error: unable to transfer fees to account." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_1a0e1b57a2efd16cddba9f3dc60eebac17ba4db509e733796cdcf13851421b2c", + "typeString": "literal_string \"Error: unable to transfer fees to account.\"" + } + ], + "id": 1602, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "4716:7:7", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1614, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4716:125:7", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1615, + "nodeType": "ExpressionStatement", + "src": "4716:125:7" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 1616, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4852:4:7", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 1601, + "id": 1617, + "nodeType": "Return", + "src": "4845:11:7" + } + ] + }, + "documentation": "@notice Transfer collected fees to another account; onlyOwner\n@param currency Currency symbol of the token (e.g. USDx, JYPx, GBPx)\n@param to \t\t\tEthereum address of account to send token amount to\n@param amount\t Amount of tokens to transfer\n@param data\t\t Arbitrary bytes data message to include in transfer\n@return {\"success\": \"Returns ture if successfully called from another contract\"}", + "id": 1619, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 1598, + "modifierName": { + "argumentTypes": null, + "id": 1597, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "4679:9:7", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "4679:9:7" + } + ], + "name": "transferCollectedFees", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1596, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1589, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 1619, + "src": "4618:15:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1588, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "4618:6:7", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1591, + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 1619, + "src": "4635:10:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1590, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4635:7:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1593, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1619, + "src": "4647:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1592, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "4647:4:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1595, + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 1619, + "src": "4660:10:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1594, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4660:5:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4617:54:7" + }, + "payable": false, + "returnParameters": { + "id": 1601, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1600, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 1619, + "src": "4698:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1599, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4698:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4697:14:7" + }, + "scope": 1620, + "src": "4587:273:7", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 1621, + "src": "1070:3794:7" + } + ], + "src": "0:4865:7" + }, + "compiler": { + "name": "solc", + "version": "0.4.24+commit.e67f0147.Emscripten.clang" + }, + "networks": { + "1": { + "events": {}, + "links": {}, + "address": "0x1bbaa40d9eca29b2a109cc21fe6ac9bc00198185", + "transactionHash": "0xdf92296ca60d2e91bc85f7053fdbb8eee6b18bf44b7511e0c109993b04f577a3" + }, + "4447": { + "events": {}, + "links": {}, + "address": "0x30753e4a8aad7f8597332e813735def5dd395028", + "transactionHash": "0x5b6bcdbba94186d4778c21f60091171e7889a57e9efa7e7bdb2a445a0efbf496" + } + }, + "schemaVersion": "2.0.1", + "updatedAt": "2018-10-24T17:29:03.346Z" +} \ No newline at end of file diff --git a/deployed/mainnet-v1.0.1/TokenIOMerchant.json b/deployed/mainnet-v1.0.1/TokenIOMerchant.json new file mode 100644 index 0000000..dc65972 --- /dev/null +++ b/deployed/mainnet-v1.0.1/TokenIOMerchant.json @@ -0,0 +1,7204 @@ +{ + "contractName": "TokenIOMerchant", + "abi": [ + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "allowOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "removeOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "", + "type": "address" + } + ], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "name": "_storageContract", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "AllowOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "RevokeOwnership", + "type": "event" + }, + { + "constant": false, + "inputs": [ + { + "name": "feeContract", + "type": "address" + } + ], + "name": "setParams", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getFeeParams", + "outputs": [ + { + "name": "bps", + "type": "uint256" + }, + { + "name": "min", + "type": "uint256" + }, + { + "name": "max", + "type": "uint256" + }, + { + "name": "flat", + "type": "uint256" + }, + { + "name": "feeMsg", + "type": "bytes" + }, + { + "name": "feeAccount", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "amount", + "type": "uint256" + } + ], + "name": "calculateFees", + "outputs": [ + { + "name": "fees", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "currency", + "type": "string" + }, + { + "name": "merchant", + "type": "address" + }, + { + "name": "amount", + "type": "uint256" + }, + { + "name": "merchantPaysFees", + "type": "bool" + }, + { + "name": "data", + "type": "bytes" + } + ], + "name": "pay", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051602080612e2b833981016040908152905133600090815260208190529182208054600160ff19918216811783558054600160a060020a031916600160a060020a039094169390931783558154169091179055612db590819061007690396000f3006080604052600436106100745763ffffffff60e060020a6000350416634bbc142c81146100795780634e49acac146100ae57806352238fdd146100cf578063666a3427146100f9578063666e1b391461011a5780636db31c251461013b578063be6fc181146101ef578063f2fde38b146102b1575b600080fd5b34801561008557600080fd5b5061009a600160a060020a03600435166102d2565b604080519115158252519081900360200190f35b3480156100ba57600080fd5b5061009a600160a060020a036004351661038e565b3480156100db57600080fd5b506100e76004356104b4565b60408051918252519081900360200190f35b34801561010557600080fd5b5061009a600160a060020a03600435166104df565b34801561012657600080fd5b5061009a600160a060020a0360043516610598565b34801561014757600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261009a94369492936024939284019190819084018382808284375050604080516020601f60608a01358b0180359182018390048302840183018552818452989b600160a060020a038b35169b838c01359b9586013515159a9199509750608090940195509193509182019181908401838280828437509497506105ad9650505050505050565b3480156101fb57600080fd5b50610204610855565b604051808781526020018681526020018581526020018481526020018060200183600160a060020a0316600160a060020a03168152602001828103825284818151815260200191508051906020019080838360005b83811015610271578181015183820152602001610259565b50505050905090810190601f16801561029e5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b3480156102bd57600080fd5b5061009a600160a060020a036004351661092b565b3360009081526020819052604081205460ff16151561033d576040805160e560020a62461bcd0281526020600482015260396024820152600080516020612d6a8339815191526044820152600080516020612d2a833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b3360009081526020819052604081205460ff1615156103f9576040805160e560020a62461bcd0281526020600482015260396024820152600080516020612d6a8339815191526044820152600080516020612d2a833981519152606482015290519081900360840190fd5b61040a60018363ffffffff610a6516565b15156104ac576040805160e560020a62461bcd02815260206004820152605260248201527f4572726f723a20556e61626c6520746f207365742066656520636f6e7472616360448201527f742e20456e7375726520636f6e747261637420697320616c6c6f77656420627960648201527f2073746f7261676520636f6e74726163742e0000000000000000000000000000608482015290519081900360a40190fd5b506001919050565b60006104d96104ca60013063ffffffff610c6816565b6001908463ffffffff610de316565b92915050565b3360009081526020819052604081205460ff16151561054a576040805160e560020a62461bcd0281526020600482015260396024820152600080516020612d6a8339815191526044820152600080516020612d2a833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b60008060006105bb866104b4565b91506105e2336105d360018b8a63ffffffff6112d416565b6001919063ffffffff61136c16565b151561065e576040805160e560020a62461bcd02815260206004820152602d60248201527f4572726f723a20556e61626c6520746f20736574206163636f756e742073706560448201527f6e64696e6720616d6f756e742e00000000000000000000000000000000000000606482015290519081900360840190fd5b610673600189338a8a8963ffffffff6116b016565b15156106ef576040805160e560020a62461bcd02815260206004820152602a60248201527f4572726f723a20556e61626c6520746f207472616e736665722066756e64732060448201527f746f206163636f756e7400000000000000000000000000000000000000000000606482015290519081900360840190fd5b61070060013063ffffffff610c6816565b905084156107b3576107328888838561072060018363ffffffff611e3416565b6001949392919063ffffffff6116b016565b15156107ae576040805160e560020a62461bcd02815260206004820152602f60248201527f4572726f723a20556e61626c6520746f207472616e736665722066656573207460448201527f6f2066656520636f6e74726163742e0000000000000000000000000000000000606482015290519081900360840190fd5b610847565b6107cb8833838561072060018363ffffffff611e3416565b1515610847576040805160e560020a62461bcd02815260206004820152602f60248201527f4572726f723a20556e61626c6520746f207472616e736665722066656573207460448201527f6f2066656520636f6e74726163742e0000000000000000000000000000000000606482015290519081900360840190fd5b506001979650505050505050565b600080808060608161087f61087160013063ffffffff610c6816565b60019063ffffffff611fe716565b6108a161089360013063ffffffff610c6816565b60019063ffffffff61213a16565b6108c36108b560013063ffffffff610c6816565b60019063ffffffff6121cb16565b6108e56108d760013063ffffffff610c6816565b60019063ffffffff61225c16565b6109076108f960013063ffffffff610c6816565b60019063ffffffff611e3416565b61091860013063ffffffff610c6816565b949b939a50919850965094509092509050565b3360009081526020819052604081205460ff161515610996576040805160e560020a62461bcd0281526020600482015260396024820152600080516020612d6a8339815191526044820152600080516020612d2a833981519152606482015290519081900360840190fd5b600160a060020a03821615156109f6576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b604080517f6665652e6163636f756e74000000000000000000000000000000000000000000602080830191909152606060020a3002602b8301528251601f818403018152603f909201928390528151600093849392909182918401908083835b60208310610ae45780518252601f199092019160209182019101610ac5565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547fca446dd900000000000000000000000000000000000000000000000000000000845260048401829052600160a060020a038b81166024860152955191985094909416955063ca446dd9945060448083019491935090918290030181600087803b158015610b7a57600080fd5b505af1158015610b8e573d6000803e3d6000fd5b505050506040513d6020811015610ba457600080fd5b50511515610c5c576040805160e560020a62461bcd0281526020600482015260686024820152600080516020612d4a83398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b600191505b5092915050565b60008060008360405160200180807f6665652e6163636f756e74000000000000000000000000000000000000000000815250600b0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310610cfc5780518252601f199092019160209182019101610cdd565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015610d8957600080fd5b505af1158015610d9d573d6000803e3d6000fd5b505050506040513d6020811015610db357600080fd5b50519050600160a060020a0381161515610dd757610dd0856122ed565b9250610ddb565b8092505b505092915050565b8254604080517f6665652e6d617800000000000000000000000000000000000000000000000000602080830191909152600160a060020a03868116606060020a0260278401528351808403601b018152603b9093019384905282516000958695869586958695869594169363bd02d0f593918291908401908083835b60208310610e7e5780518252601f199092019160209182019101610e5f565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b158015610edf57600080fd5b505af1158015610ef3573d6000803e3d6000fd5b505050506040513d6020811015610f0957600080fd5b50518954604080517f6665652e6d696e00000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260278401528351808403601b018152603b909301938490528251959a509093169363bd02d0f5939192918291908401908083835b60208310610f9f5780518252601f199092019160209182019101610f80565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b15801561100057600080fd5b505af1158015611014573d6000803e3d6000fd5b505050506040513d602081101561102a57600080fd5b50518954604080517f6665652e62707300000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260278401528351808403601b018152603b9093019384905282519599509093169363bd02d0f5939192918291908401908083835b602083106110c05780518252601f1990920191602091820191016110a1565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b15801561112157600080fd5b505af1158015611135573d6000803e3d6000fd5b505050506040513d602081101561114b57600080fd5b50518954604080517f6665652e666c6174000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260288401528351808403601c018152603c9093019384905282519598509093169363bd02d0f5939192918291908401908083835b602083106111e15780518252601f1990920191602091820191016111c2565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b15801561124257600080fd5b505af1158015611256573d6000803e3d6000fd5b505050506040513d602081101561126c57600080fd5b505191506112a28261129661271061128a8b8863ffffffff61241f16565b9063ffffffff6124c516565b9063ffffffff6124dc16565b9050848111156112b4578495506112c8565b838110156112c4578395506112c8565b8095505b50505050509392505050565b600080600080611319876040805190810160405280600481526020017f555344780000000000000000000000000000000000000000000000000000000081525061255f565b9250611325878761255f565b915061136182600a0a61128a85600a0a61135561271061128a6113488e8e61261f565b8c9063ffffffff61241f16565b9063ffffffff61241f16565b979650505050505050565b600080600061137b868661267c565b15156113f7576040805160e560020a62461bcd02815260206004820152603060248201527f4572726f723a20556e61626c6520746f20757064617465206163636f756e742060448201527f7370656e64696e6720706572696f642e00000000000000000000000000000000606482015290519081900360840190fd5b61140584611296888861275f565b9150816114128787612801565b101561148e576040805160e560020a62461bcd02815260206004820152603360248201527f4572726f723a204163636f756e742063616e6e6f74206578636565642069747360448201527f206461696c79207370656e64206c696d69742e00000000000000000000000000606482015290519081900360840190fd5b846114998787612892565b60405160200180807f6163636f756e742e7370656e64696e672e616d6f756e7400000000000000000081525060170183600160a060020a0316600160a060020a0316606060020a028152601401828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061152e5780518252601f19909201916020918201910161150f565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208c547fe2a4853a00000000000000000000000000000000000000000000000000000000845260048401829052602484018a90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b1580156115c257600080fd5b505af11580156115d6573d6000803e3d6000fd5b505050506040513d60208110156115ec57600080fd5b505115156116a4576040805160e560020a62461bcd0281526020600482015260686024820152600080516020612d4a83398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b50600195945050505050565b60008080600160a060020a038616151561173a576040805160e560020a62461bcd02815260206004820152602560248201527f4572726f723a2060746f602061646472657373206d757374206e6f742062652060448201527f6e756c6c2e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b876117458a89612923565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b6020831061179f5780518252601f199092019160209182019101611780565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106118215780518252601f199092019160209182019101611802565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902091508761185b8a88612923565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b602083106118b55780518252601f199092019160209182019101611896565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106119375780518252601f199092019160209182019101611918565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208f547fbd02d0f5000000000000000000000000000000000000000000000000000000008452600484018a90529451909750600160a060020a03909416955063e2a4853a94508793611a0893508b92879263bd02d0f5926024808401938290030181600087803b1580156119d057600080fd5b505af11580156119e4573d6000803e3d6000fd5b505050506040513d60208110156119fa57600080fd5b50519063ffffffff612a9116565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015611a5057600080fd5b505af1158015611a64573d6000803e3d6000fd5b505050506040513d6020811015611a7a57600080fd5b50511515611b32576040805160e560020a62461bcd0281526020600482015260696024820152600080516020612d4a83398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b8854604080517fbd02d0f5000000000000000000000000000000000000000000000000000000008152600481018490529051600160a060020a039092169163e2a4853a918491611bdf918a91869163bd02d0f59160248083019260209291908290030181600087803b158015611ba757600080fd5b505af1158015611bbb573d6000803e3d6000fd5b505050506040513d6020811015611bd157600080fd5b50519063ffffffff6124dc16565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015611c2757600080fd5b505af1158015611c3b573d6000803e3d6000fd5b505050506040513d6020811015611c5157600080fd5b50511515611d09576040805160e560020a62461bcd0281526020600482015260696024820152600080516020612d4a83398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b85600160a060020a031687600160a060020a03167f6f3dcde00ed34d4f404b335a65d18fb4adf74f5b817aa46f5d7c4f05c6d1e96e8a8888604051808060200184815260200180602001838103835286818151815260200191508051906020019080838360005b83811015611d88578181015183820152602001611d70565b50505050905090810190601f168015611db55780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611de8578181015183820152602001611dd0565b50505050905090810190601f168015611e155780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a350600198975050505050505050565b606060008260405160200180807f6665652e6d73670000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611ec75780518252601f199092019160209182019101611ea8565b5181516020939093036101000a60001901801990911692169190911790526040805191909301819003812089547fc031a180000000000000000000000000000000000000000000000000000000008352600483018290529351909650600160a060020a03909316945063c031a1809350602480820193600093509182900301818387803b158015611f5757600080fd5b505af1158015611f6b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611f9457600080fd5b810190808051640100000000811115611fac57600080fd5b82016020810184811115611fbf57600080fd5b8151640100000000811182820187101715611fd957600080fd5b509098975050505050505050565b6000808260405160200180807f6665652e6270730000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106120795780518252601f19909201916020918201910161205a565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547fbd02d0f5000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b15801561210657600080fd5b505af115801561211a573d6000803e3d6000fd5b505050506040513d602081101561213057600080fd5b5051949350505050565b6000808260405160200180807f6665652e6d696e0000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b6000808260405160200180807f6665652e6d61780000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b6000808260405160200180807f6665652e666c617400000000000000000000000000000000000000000000000081525060080182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b60008060405160200180807f6665652e636f6e74726163742e6d61737465720000000000000000000000000081525060130190506040516020818303038152906040526040518082805190602001908083835b6020831061235f5780518252601f199092019160209182019101612340565b51815160209384036101000a60001901801990921691161790526040805192909401829003822089547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b1580156123ec57600080fd5b505af1158015612400573d6000803e3d6000fd5b505050506040513d602081101561241657600080fd5b50519392505050565b6000808315156124325760009150610c61565b5082820282848281151561244257fe5b04146124be576040805160e560020a62461bcd02815260206004820152602760248201527f4572726f723a20556e73616665206d756c7469706c69636174696f6e206f706560448201527f726174696f6e2100000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b9392505050565b60008082848115156124d357fe5b04949350505050565b6000828201838110156124be576040805160e560020a62461bcd02815260206004820152602160248201527f4572726f723a20556e73616665206164646974696f6e206f7065726174696f6e60448201527f2100000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000808260405160200180807f746f6b656e2e646563696d616c73000000000000000000000000000000000000815250600e0182805190602001908083835b602083106125bd5780518252601f19909201916020918201910161259e565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b6000808260405160200180807f66782e7573642e72617465000000000000000000000000000000000000000000815250600b018280519060200190808383602083106125bd5780518252601f19909201916020918201910161259e565b600080600061268b8585612892565b91504282111561269e5760019250610ddb565b50620151806126da85856126d56126c88561135560016112968361128a428d63ffffffff612a9116565b869063ffffffff6124dc16565b612b16565b1515612756576040805160e560020a62461bcd02815260206004820152603060248201527f4572726f723a20556e61626c6520746f20757064617465206163636f756e742060448201527f7370656e64696e6720706572696f642e00000000000000000000000000000000606482015290519081900360840190fd5b60019250610ddb565b6000808261276d8585612892565b60405160200180807f6163636f756e742e7370656e64696e672e616d6f756e7400000000000000000081525060170183600160a060020a0316600160a060020a0316606060020a02815260140182815260200192505050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b6000808260405160200180807f6163636f756e742e7370656e64696e672e6c696d69740000000000000000000081525060160182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b6000808260405160200180807f6c696d69742e7370656e64696e672e706572696f64000000000000000000000081525060150182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b60008060008360405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106129b75780518252601f199092019160209182019101612998565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015612a4457600080fd5b505af1158015612a58573d6000803e3d6000fd5b505050506040513d6020811015612a6e57600080fd5b50519050600160a060020a03811615612a8957809250610ddb565b839250610ddb565b600082821115612b10576040805160e560020a62461bcd028152602060048201526024808201527f4572726f723a20556e73616665207375627472616374696f6e206f706572617460448201527f696f6e2100000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50900390565b6000808360405160200180807f6c696d69742e7370656e64696e672e706572696f64000000000000000000000081525060150182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310612ba85780518252601f199092019160209182019101612b89565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547fe2a4853a00000000000000000000000000000000000000000000000000000000845260048401829052602484018b90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b158015612c3c57600080fd5b505af1158015612c50573d6000803e3d6000fd5b505050506040513d6020811015612c6657600080fd5b50511515612d1e576040805160e560020a62461bcd0281526020600482015260686024820152600080516020612d4a83398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b506001949350505050560020616c6c6f7765642062792074686520636f6e74726163742e000000000000004572726f723a20556e61626c6520746f207365742073746f726167652076616c4572726f723a205472616e73616374696f6e2073656e646572206973206e6f74a165627a7a723058201db28dac1d03a32ffcd5545f7d0479d1bf52011d0a29675bf682a8fdf395fae40029", + "deployedBytecode": "0x6080604052600436106100745763ffffffff60e060020a6000350416634bbc142c81146100795780634e49acac146100ae57806352238fdd146100cf578063666a3427146100f9578063666e1b391461011a5780636db31c251461013b578063be6fc181146101ef578063f2fde38b146102b1575b600080fd5b34801561008557600080fd5b5061009a600160a060020a03600435166102d2565b604080519115158252519081900360200190f35b3480156100ba57600080fd5b5061009a600160a060020a036004351661038e565b3480156100db57600080fd5b506100e76004356104b4565b60408051918252519081900360200190f35b34801561010557600080fd5b5061009a600160a060020a03600435166104df565b34801561012657600080fd5b5061009a600160a060020a0360043516610598565b34801561014757600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261009a94369492936024939284019190819084018382808284375050604080516020601f60608a01358b0180359182018390048302840183018552818452989b600160a060020a038b35169b838c01359b9586013515159a9199509750608090940195509193509182019181908401838280828437509497506105ad9650505050505050565b3480156101fb57600080fd5b50610204610855565b604051808781526020018681526020018581526020018481526020018060200183600160a060020a0316600160a060020a03168152602001828103825284818151815260200191508051906020019080838360005b83811015610271578181015183820152602001610259565b50505050905090810190601f16801561029e5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b3480156102bd57600080fd5b5061009a600160a060020a036004351661092b565b3360009081526020819052604081205460ff16151561033d576040805160e560020a62461bcd0281526020600482015260396024820152600080516020612d6a8339815191526044820152600080516020612d2a833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b3360009081526020819052604081205460ff1615156103f9576040805160e560020a62461bcd0281526020600482015260396024820152600080516020612d6a8339815191526044820152600080516020612d2a833981519152606482015290519081900360840190fd5b61040a60018363ffffffff610a6516565b15156104ac576040805160e560020a62461bcd02815260206004820152605260248201527f4572726f723a20556e61626c6520746f207365742066656520636f6e7472616360448201527f742e20456e7375726520636f6e747261637420697320616c6c6f77656420627960648201527f2073746f7261676520636f6e74726163742e0000000000000000000000000000608482015290519081900360a40190fd5b506001919050565b60006104d96104ca60013063ffffffff610c6816565b6001908463ffffffff610de316565b92915050565b3360009081526020819052604081205460ff16151561054a576040805160e560020a62461bcd0281526020600482015260396024820152600080516020612d6a8339815191526044820152600080516020612d2a833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b60008060006105bb866104b4565b91506105e2336105d360018b8a63ffffffff6112d416565b6001919063ffffffff61136c16565b151561065e576040805160e560020a62461bcd02815260206004820152602d60248201527f4572726f723a20556e61626c6520746f20736574206163636f756e742073706560448201527f6e64696e6720616d6f756e742e00000000000000000000000000000000000000606482015290519081900360840190fd5b610673600189338a8a8963ffffffff6116b016565b15156106ef576040805160e560020a62461bcd02815260206004820152602a60248201527f4572726f723a20556e61626c6520746f207472616e736665722066756e64732060448201527f746f206163636f756e7400000000000000000000000000000000000000000000606482015290519081900360840190fd5b61070060013063ffffffff610c6816565b905084156107b3576107328888838561072060018363ffffffff611e3416565b6001949392919063ffffffff6116b016565b15156107ae576040805160e560020a62461bcd02815260206004820152602f60248201527f4572726f723a20556e61626c6520746f207472616e736665722066656573207460448201527f6f2066656520636f6e74726163742e0000000000000000000000000000000000606482015290519081900360840190fd5b610847565b6107cb8833838561072060018363ffffffff611e3416565b1515610847576040805160e560020a62461bcd02815260206004820152602f60248201527f4572726f723a20556e61626c6520746f207472616e736665722066656573207460448201527f6f2066656520636f6e74726163742e0000000000000000000000000000000000606482015290519081900360840190fd5b506001979650505050505050565b600080808060608161087f61087160013063ffffffff610c6816565b60019063ffffffff611fe716565b6108a161089360013063ffffffff610c6816565b60019063ffffffff61213a16565b6108c36108b560013063ffffffff610c6816565b60019063ffffffff6121cb16565b6108e56108d760013063ffffffff610c6816565b60019063ffffffff61225c16565b6109076108f960013063ffffffff610c6816565b60019063ffffffff611e3416565b61091860013063ffffffff610c6816565b949b939a50919850965094509092509050565b3360009081526020819052604081205460ff161515610996576040805160e560020a62461bcd0281526020600482015260396024820152600080516020612d6a8339815191526044820152600080516020612d2a833981519152606482015290519081900360840190fd5b600160a060020a03821615156109f6576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b604080517f6665652e6163636f756e74000000000000000000000000000000000000000000602080830191909152606060020a3002602b8301528251601f818403018152603f909201928390528151600093849392909182918401908083835b60208310610ae45780518252601f199092019160209182019101610ac5565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547fca446dd900000000000000000000000000000000000000000000000000000000845260048401829052600160a060020a038b81166024860152955191985094909416955063ca446dd9945060448083019491935090918290030181600087803b158015610b7a57600080fd5b505af1158015610b8e573d6000803e3d6000fd5b505050506040513d6020811015610ba457600080fd5b50511515610c5c576040805160e560020a62461bcd0281526020600482015260686024820152600080516020612d4a83398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b600191505b5092915050565b60008060008360405160200180807f6665652e6163636f756e74000000000000000000000000000000000000000000815250600b0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310610cfc5780518252601f199092019160209182019101610cdd565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015610d8957600080fd5b505af1158015610d9d573d6000803e3d6000fd5b505050506040513d6020811015610db357600080fd5b50519050600160a060020a0381161515610dd757610dd0856122ed565b9250610ddb565b8092505b505092915050565b8254604080517f6665652e6d617800000000000000000000000000000000000000000000000000602080830191909152600160a060020a03868116606060020a0260278401528351808403601b018152603b9093019384905282516000958695869586958695869594169363bd02d0f593918291908401908083835b60208310610e7e5780518252601f199092019160209182019101610e5f565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b158015610edf57600080fd5b505af1158015610ef3573d6000803e3d6000fd5b505050506040513d6020811015610f0957600080fd5b50518954604080517f6665652e6d696e00000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260278401528351808403601b018152603b909301938490528251959a509093169363bd02d0f5939192918291908401908083835b60208310610f9f5780518252601f199092019160209182019101610f80565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b15801561100057600080fd5b505af1158015611014573d6000803e3d6000fd5b505050506040513d602081101561102a57600080fd5b50518954604080517f6665652e62707300000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260278401528351808403601b018152603b9093019384905282519599509093169363bd02d0f5939192918291908401908083835b602083106110c05780518252601f1990920191602091820191016110a1565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b15801561112157600080fd5b505af1158015611135573d6000803e3d6000fd5b505050506040513d602081101561114b57600080fd5b50518954604080517f6665652e666c6174000000000000000000000000000000000000000000000000602080830191909152600160a060020a038d8116606060020a0260288401528351808403601c018152603c9093019384905282519598509093169363bd02d0f5939192918291908401908083835b602083106111e15780518252601f1990920191602091820191016111c2565b51815160209384036101000a60001901801990921691161790526040805192909401829003822063ffffffff881660e060020a0283526004830152925160248083019650939450929083900301905081600087803b15801561124257600080fd5b505af1158015611256573d6000803e3d6000fd5b505050506040513d602081101561126c57600080fd5b505191506112a28261129661271061128a8b8863ffffffff61241f16565b9063ffffffff6124c516565b9063ffffffff6124dc16565b9050848111156112b4578495506112c8565b838110156112c4578395506112c8565b8095505b50505050509392505050565b600080600080611319876040805190810160405280600481526020017f555344780000000000000000000000000000000000000000000000000000000081525061255f565b9250611325878761255f565b915061136182600a0a61128a85600a0a61135561271061128a6113488e8e61261f565b8c9063ffffffff61241f16565b9063ffffffff61241f16565b979650505050505050565b600080600061137b868661267c565b15156113f7576040805160e560020a62461bcd02815260206004820152603060248201527f4572726f723a20556e61626c6520746f20757064617465206163636f756e742060448201527f7370656e64696e6720706572696f642e00000000000000000000000000000000606482015290519081900360840190fd5b61140584611296888861275f565b9150816114128787612801565b101561148e576040805160e560020a62461bcd02815260206004820152603360248201527f4572726f723a204163636f756e742063616e6e6f74206578636565642069747360448201527f206461696c79207370656e64206c696d69742e00000000000000000000000000606482015290519081900360840190fd5b846114998787612892565b60405160200180807f6163636f756e742e7370656e64696e672e616d6f756e7400000000000000000081525060170183600160a060020a0316600160a060020a0316606060020a028152601401828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061152e5780518252601f19909201916020918201910161150f565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208c547fe2a4853a00000000000000000000000000000000000000000000000000000000845260048401829052602484018a90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b1580156115c257600080fd5b505af11580156115d6573d6000803e3d6000fd5b505050506040513d60208110156115ec57600080fd5b505115156116a4576040805160e560020a62461bcd0281526020600482015260686024820152600080516020612d4a83398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b50600195945050505050565b60008080600160a060020a038616151561173a576040805160e560020a62461bcd02815260206004820152602560248201527f4572726f723a2060746f602061646472657373206d757374206e6f742062652060448201527f6e756c6c2e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b876117458a89612923565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b6020831061179f5780518252601f199092019160209182019101611780565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106118215780518252601f199092019160209182019101611802565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902091508761185b8a88612923565b60405160200180807f746f6b656e2e62616c616e636500000000000000000000000000000000000000815250600d0183805190602001908083835b602083106118b55780518252601f199092019160209182019101611896565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a0316606060020a028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106119375780518252601f199092019160209182019101611918565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208f547fbd02d0f5000000000000000000000000000000000000000000000000000000008452600484018a90529451909750600160a060020a03909416955063e2a4853a94508793611a0893508b92879263bd02d0f5926024808401938290030181600087803b1580156119d057600080fd5b505af11580156119e4573d6000803e3d6000fd5b505050506040513d60208110156119fa57600080fd5b50519063ffffffff612a9116565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015611a5057600080fd5b505af1158015611a64573d6000803e3d6000fd5b505050506040513d6020811015611a7a57600080fd5b50511515611b32576040805160e560020a62461bcd0281526020600482015260696024820152600080516020612d4a83398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b8854604080517fbd02d0f5000000000000000000000000000000000000000000000000000000008152600481018490529051600160a060020a039092169163e2a4853a918491611bdf918a91869163bd02d0f59160248083019260209291908290030181600087803b158015611ba757600080fd5b505af1158015611bbb573d6000803e3d6000fd5b505050506040513d6020811015611bd157600080fd5b50519063ffffffff6124dc16565b6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015611c2757600080fd5b505af1158015611c3b573d6000803e3d6000fd5b505050506040513d6020811015611c5157600080fd5b50511515611d09576040805160e560020a62461bcd0281526020600482015260696024820152600080516020612d4a83398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420686173206160648201527f6c6c6f776564207065726d697373696f6e7320776974682073746f726167652060848201527f636f6e74726163742e000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b85600160a060020a031687600160a060020a03167f6f3dcde00ed34d4f404b335a65d18fb4adf74f5b817aa46f5d7c4f05c6d1e96e8a8888604051808060200184815260200180602001838103835286818151815260200191508051906020019080838360005b83811015611d88578181015183820152602001611d70565b50505050905090810190601f168015611db55780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611de8578181015183820152602001611dd0565b50505050905090810190601f168015611e155780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a350600198975050505050505050565b606060008260405160200180807f6665652e6d73670000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611ec75780518252601f199092019160209182019101611ea8565b5181516020939093036101000a60001901801990911692169190911790526040805191909301819003812089547fc031a180000000000000000000000000000000000000000000000000000000008352600483018290529351909650600160a060020a03909316945063c031a1809350602480820193600093509182900301818387803b158015611f5757600080fd5b505af1158015611f6b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611f9457600080fd5b810190808051640100000000811115611fac57600080fd5b82016020810184811115611fbf57600080fd5b8151640100000000811182820187101715611fd957600080fd5b509098975050505050505050565b6000808260405160200180807f6665652e6270730000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106120795780518252601f19909201916020918201910161205a565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547fbd02d0f5000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a03909416955063bd02d0f5945060248083019491935090918290030181600087803b15801561210657600080fd5b505af115801561211a573d6000803e3d6000fd5b505050506040513d602081101561213057600080fd5b5051949350505050565b6000808260405160200180807f6665652e6d696e0000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b6000808260405160200180807f6665652e6d61780000000000000000000000000000000000000000000000000081525060070182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b6000808260405160200180807f6665652e666c617400000000000000000000000000000000000000000000000081525060080182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b60008060405160200180807f6665652e636f6e74726163742e6d61737465720000000000000000000000000081525060130190506040516020818303038152906040526040518082805190602001908083835b6020831061235f5780518252601f199092019160209182019101612340565b51815160209384036101000a60001901801990921691161790526040805192909401829003822089547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b1580156123ec57600080fd5b505af1158015612400573d6000803e3d6000fd5b505050506040513d602081101561241657600080fd5b50519392505050565b6000808315156124325760009150610c61565b5082820282848281151561244257fe5b04146124be576040805160e560020a62461bcd02815260206004820152602760248201527f4572726f723a20556e73616665206d756c7469706c69636174696f6e206f706560448201527f726174696f6e2100000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b9392505050565b60008082848115156124d357fe5b04949350505050565b6000828201838110156124be576040805160e560020a62461bcd02815260206004820152602160248201527f4572726f723a20556e73616665206164646974696f6e206f7065726174696f6e60448201527f2100000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000808260405160200180807f746f6b656e2e646563696d616c73000000000000000000000000000000000000815250600e0182805190602001908083835b602083106125bd5780518252601f19909201916020918201910161259e565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b6000808260405160200180807f66782e7573642e72617465000000000000000000000000000000000000000000815250600b018280519060200190808383602083106125bd5780518252601f19909201916020918201910161259e565b600080600061268b8585612892565b91504282111561269e5760019250610ddb565b50620151806126da85856126d56126c88561135560016112968361128a428d63ffffffff612a9116565b869063ffffffff6124dc16565b612b16565b1515612756576040805160e560020a62461bcd02815260206004820152603060248201527f4572726f723a20556e61626c6520746f20757064617465206163636f756e742060448201527f7370656e64696e6720706572696f642e00000000000000000000000000000000606482015290519081900360840190fd5b60019250610ddb565b6000808261276d8585612892565b60405160200180807f6163636f756e742e7370656e64696e672e616d6f756e7400000000000000000081525060170183600160a060020a0316600160a060020a0316606060020a02815260140182815260200192505050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b6000808260405160200180807f6163636f756e742e7370656e64696e672e6c696d69740000000000000000000081525060160182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b6000808260405160200180807f6c696d69742e7370656e64696e672e706572696f64000000000000000000000081525060150182600160a060020a0316600160a060020a0316606060020a028152601401915050604051602081830303815290604052604051808280519060200190808383602083106120795780518252601f19909201916020918201910161205a565b60008060008360405160200180807f6d61737465722e6163636f756e74000000000000000000000000000000000000815250600e0182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106129b75780518252601f199092019160209182019101612998565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909850600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b158015612a4457600080fd5b505af1158015612a58573d6000803e3d6000fd5b505050506040513d6020811015612a6e57600080fd5b50519050600160a060020a03811615612a8957809250610ddb565b839250610ddb565b600082821115612b10576040805160e560020a62461bcd028152602060048201526024808201527f4572726f723a20556e73616665207375627472616374696f6e206f706572617460448201527f696f6e2100000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50900390565b6000808360405160200180807f6c696d69742e7370656e64696e672e706572696f64000000000000000000000081525060150182600160a060020a0316600160a060020a0316606060020a0281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310612ba85780518252601f199092019160209182019101612b89565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208b547fe2a4853a00000000000000000000000000000000000000000000000000000000845260048401829052602484018b90529451909750600160a060020a03909416955063e2a4853a945060448083019491935090918290030181600087803b158015612c3c57600080fd5b505af1158015612c50573d6000803e3d6000fd5b505050506040513d6020811015612c6657600080fd5b50511515612d1e576040805160e560020a62461bcd0281526020600482015260686024820152600080516020612d4a83398151915260448201527f75652e20506c6561736520656e7375726520636f6e747261637420696e74657260648201527f6661636520697320616c6c6f776564206279207468652073746f72616765206360848201527f6f6e74726163742e00000000000000000000000000000000000000000000000060a482015290519081900360c40190fd5b506001949350505050560020616c6c6f7765642062792074686520636f6e74726163742e000000000000004572726f723a20556e61626c6520746f207365742073746f726167652076616c4572726f723a205472616e73616374696f6e2073656e646572206973206e6f74a165627a7a723058201db28dac1d03a32ffcd5545f7d0479d1bf52011d0a29675bf682a8fdf395fae40029", + "sourceMap": "874:4078:9:-;;;1215:515;8:9:-1;5:2;;;30:1;27;20:12;5:2;1215:515:9;;;;;;;;;;;;;;;;1117:10:1;1111:5;:17;;;1215:515:9;1111:17:1;;;;;;:24;;1131:4;-1:-1:-1;;1111:24:1;;;;;;;1593:46:9;;-1:-1:-1;;;;;;1593:46:9;-1:-1:-1;;;;;1593:46:9;;;;;;;;;1699:24;;;;;;;;874:4078;;;;;;;;", + "deployedSourceMap": "874:4078:9:-;;;;;;;;;-1:-1:-1;;;874:4078:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2127:185:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2127:185:1;-1:-1:-1;;;;;2127:185:1;;;;;;;;;;;;;;;;;;;;;;;1937:260:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1937:260:9;-1:-1:-1;;;;;1937:260:9;;;;;3177:150;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3177:150:9;;;;;;;;;;;;;;;;;;;;;2571:188:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2571:188:1;-1:-1:-1;;;;;2571:188:1;;;;;725:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;725:37:1;-1:-1:-1;;;;;725:37:1;;;;;3861:1088:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3861:1088:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3861:1088:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3861:1088:9;;;;;;;;;;;;;;;;;;-1:-1:-1;3861:1088:9;-1:-1:-1;3861:1088:9;;;;;-1:-1:-1;3861:1088:9;;-1:-1:-1;3861:1088:9;;;;;;;;;;;;;;-1:-1:-1;3861:1088:9;;-1:-1:-1;3861:1088:9;;-1:-1:-1;;;;;;;3861:1088:9;2462:484;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2462:484:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2462:484:9;-1:-1:-1;;;;;2462:484:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2462:484:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1589:291:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1589:291:1;-1:-1:-1;;;;;1589:291:1;;;;;2127:185;1261:10;2201:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;2221:21:1;;:5;:21;;;;;;;;;;;:28;;-1:-1:-1;;2221:28:1;2245:4;2221:28;;;2260:30;;;2221:5;2260:30;-1:-1:-1;2303:4:1;2127:185;;;:::o;1937:260:9:-;1261:10:1;2015:12:9;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;2045:31:9;:3;2064:11;2045:31;:18;:31;:::i;:::-;2037:134;;;;;;;-1:-1:-1;;;;;2037:134:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2186:4:9;1937:260;;;:::o;3177:150::-;3234:9;3260:60;3278:33;:3;3305:4;3278:33;:18;:33;:::i;:::-;3260:3;;3313:6;3260:60;:17;:60;:::i;:::-;3253:67;3177:150;-1:-1:-1;;3177:150:9:o;2571:188:1:-;1261:10;2646:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;2666:21:1;;2690:5;2666:21;;;;;;;;;;;:29;;-1:-1:-1;;2666:29:1;;;2706:31;;;2690:5;2706:31;-1:-1:-1;2750:4:1;2571:188;;;:::o;725:37::-;;;;;;;;;;;;;;;;:::o;3861:1088:9:-;3973:12;3995:9;4386:19;4007:21;4021:6;4007:13;:21::i;:::-;3995:33;-1:-1:-1;4107:78:9;4136:10;4148:36;:3;4167:8;4177:6;4148:36;:18;:36;:::i;:::-;4107:3;;:78;;:28;:78;:::i;:::-;4099:144;;;;;;;-1:-1:-1;;;;;4099:144:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4259:63;:3;4277:8;4287:10;4299:8;4309:6;4317:4;4259:63;:17;:63;:::i;:::-;4251:126;;;;;;;-1:-1:-1;;;;;4251:126:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4408:33;:3;4435:4;4408:33;:18;:33;:::i;:::-;4386:55;;4549:16;4545:378;;;4585:84;4603:8;4613;4623:11;4636:4;4642:26;:3;4623:11;4642:26;:13;:26;:::i;:::-;4585:3;;:84;;;;;:17;:84;:::i;:::-;4577:154;;;;;;;-1:-1:-1;;;;;4577:154:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4545:378;;;4765:86;4783:8;4793:10;4805:11;4818:4;4824:26;:3;4805:11;4824:26;:13;:26;:::i;4765:86::-;4757:156;;;;;;;-1:-1:-1;;;;;4757:156:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4938:4:9;;3861:1088;-1:-1:-1;;;;;;;3861:1088:9:o;2462:484::-;2507:8;;;;2548:12;2507:8;2607:48;2621:33;:3;2648:4;2621:33;:18;:33;:::i;:::-;2607:3;;:48;:13;:48;:::i;:::-;2665;2679:33;:3;2706:4;2679:33;:18;:33;:::i;:::-;2665:3;;:48;:13;:48;:::i;:::-;2723;2737:33;:3;2764:4;2737:33;:18;:33;:::i;:::-;2723:3;;:48;:13;:48;:::i;:::-;2781:49;2796:33;:3;2823:4;2796:33;:18;:33;:::i;:::-;2781:3;;:49;:14;:49;:::i;:::-;2840:48;2854:33;:3;2881:4;2854:33;:18;:33;:::i;:::-;2840:3;;:48;:13;:48;:::i;:::-;2898:33;:3;2925:4;2898:33;:18;:33;:::i;:::-;2590:349;;;;-1:-1:-1;2590:349:9;;-1:-1:-1;2590:349:9;-1:-1:-1;2590:349:9;-1:-1:-1;2590:349:9;;-1:-1:-1;2462:484:9;-1:-1:-1;2462:484:9:o;1589:291:1:-;1261:10;1660:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;1688:22:1;;;;1680:66;;;;;-1:-1:-1;;;;;1680:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1757:42;;-1:-1:-1;;;;;1757:42:1;;;1778:10;;1757:42;;;;;-1:-1:-1;;;;;;1805:15:1;:5;:15;;;;;;;;;;;:22;;1823:4;-1:-1:-1;;1805:22:1;;;;;;;;1839:10;1833:17;;;;;;:25;;;;;;;1823:4;1589:291::o;11025:375:8:-;11150:46;;;;;;;;;;;;-1:-1:-1;;;11190:4:8;11150:46;;;;;;;22:32:-1;26:21;;;22:32;6:49;;11150:46:8;;;;;;;;11140:57;;11107:12;;;;11150:46;;;;;11140:57;;;;11150:46;11140:57;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;11140:57:8;;;;;;;;;;;;11218:12;;:40;;;;;;;;;-1:-1:-1;;;;;11218:40:8;;;;;;;;;11140:57;;-1:-1:-1;11218:12:8;;;;;-1:-1:-1;11218:23:8;;-1:-1:-1;11218:40:8;;;;;263:2:-1;;-1:-1;11218:40:8;;;;;;;-1:-1:-1;11218:12:8;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;11218:40:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11218:40:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11218:40:8;11203:175;;;;;;;-1:-1:-1;;;;;11203:175:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;11203:175:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11391:4;11384:11;;11025:375;;;;;;:::o;26724:364::-;26815:19;26842:10;26921:18;26897:15;26865:48;;;;;;;;;;;;;-1:-1:-1;;;;;26865:48:8;-1:-1:-1;;;;;26865:48:8;-1:-1:-1;;;26865:48:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;26865:48:8;;;26855:59;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;26855:59:8;;;;;;;;;;;;26942:12;;:27;;;;;;;;;;;26855:59;;-1:-1:-1;;;;;;26942:12:8;;;;-1:-1:-1;26942:23:8;;-1:-1:-1;26942:27:8;;;;;263:2:-1;;-1:-1;26942:27:8;;;;;;;-1:-1:-1;26942:12:8;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;26942:27:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26942:27:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26942:27:8;;-1:-1:-1;;;;;;26979:17:8;;;26975:109;;;27013:26;27034:4;27013:20;:26::i;:::-;27006:33;;;;26975:109;27067:10;27060:17;;26975:109;26724:364;;;;;;:::o;31066:722::-;31211:12;;31242:44;;;;;;;;;;;;-1:-1:-1;;;;;31242:44:8;;;-1:-1:-1;;;31242:44:8;;;;;;;26:21:-1;;;22:32;;6:49;;31242:44:8;;;;;;;;31232:55;;-1:-1:-1;;;;;;;;;;;;31211:12:8;;;:20;;31242:44;;;31232:55;;;;;31242:44;31232:55;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;31232:55:8;;;;;;;;;;;;31211:77;;;-1:-1:-1;;;31211:77:8;;;;;;;;;;;;;;-1:-1:-1;263:2;;-1:-1;31211:77:8;;;;;;;-1:-1:-1;31211:77:8;-1:-1:-1;31211:77:8;;;;5:2:-1;;;;30:1;27;20:12;5:2;31211:77:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31211:77:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31211:77:8;31308:12;;31339:44;;;;31211:77;31339:44;;;;;;;-1:-1:-1;;;;;31339:44:8;;;-1:-1:-1;;;31339:44:8;;;;;;;26:21:-1;;;22:32;;6:49;;31339:44:8;;;;;;;;31329:55;;31211:77;;-1:-1:-1;31308:12:8;;;;:20;;31339:44;;;;;31329:55;;;;;31339:44;31329:55;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;31329:55:8;;;;;;;;;;;;31308:77;;;-1:-1:-1;;;31308:77:8;;;;;;;;;;;;;;-1:-1:-1;263:2;;-1:-1;31308:77:8;;;;;;;-1:-1:-1;31308:77:8;-1:-1:-1;31308:77:8;;;;5:2:-1;;;;30:1;27;20:12;5:2;31308:77:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31308:77:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31308:77:8;31405:12;;31436:44;;;;31308:77;31436:44;;;;;;;-1:-1:-1;;;;;31436:44:8;;;-1:-1:-1;;;31436:44:8;;;;;;;26:21:-1;;;22:32;;6:49;;31436:44:8;;;;;;;;31426:55;;31308:77;;-1:-1:-1;31405:12:8;;;;:20;;31436:44;;;;;31426:55;;;;;31436:44;31426:55;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;31426:55:8;;;;;;;;;;;;31405:77;;;-1:-1:-1;;;31405:77:8;;;;;;;;;;;;;;-1:-1:-1;263:2;;-1:-1;31405:77:8;;;;;;;-1:-1:-1;31405:77:8;-1:-1:-1;31405:77:8;;;;5:2:-1;;;;30:1;27;20:12;5:2;31405:77:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31405:77:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31405:77:8;31503:12;;31534:45;;;;31405:77;31534:45;;;;;;;-1:-1:-1;;;;;31534:45:8;;;-1:-1:-1;;;31534:45:8;;;;;;;26:21:-1;;;22:32;;6:49;;31534:45:8;;;;;;;;31524:56;;31405:77;;-1:-1:-1;31503:12:8;;;;:20;;31534:45;;;;;31524:56;;;;;31534:45;31524:56;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;31524:56:8;;;;;;;;;;;;31503:78;;;-1:-1:-1;;;31503:78:8;;;;;;;;;;;;;;-1:-1:-1;263:2;;-1:-1;31503:78:8;;;;;;;-1:-1:-1;31503:78:8;-1:-1:-1;31503:78:8;;;;5:2:-1;;;;30:1;27;20:12;5:2;31503:78:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31503:78:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31503:78:8;;-1:-1:-1;31599:46:8;31503:78;31600:31;31625:5;31601:18;:6;31612;31601:18;:10;:18;:::i;:::-;31600:24;:31;:24;:31;:::i;:::-;31599:37;:46;:37;:46;:::i;:::-;31587:58;;31663:6;31656:4;:13;31652:132;;;31686:6;31679:13;;;;31652:132;31716:6;31709:4;:13;31705:79;;;31739:6;31732:13;;;;31705:79;31773:4;31766:11;;31705:79;31066:722;;;;;;;;;;:::o;64445:441::-;64543:11;64562:16;64617:15;64741:14;64581:30;64598:4;64581:30;;;;;;;;;;;;;;;;;;:16;:30::i;:::-;64562:49;;64635:32;64652:4;64658:8;64635:16;:32::i;:::-;64617:50;;64758:101;64848:10;64844:2;:14;64759:79;64826:11;64822:2;:15;64760:56;64810:5;64760:45;64773:31;64789:4;64795:8;64773:15;:31::i;:::-;64760:8;;:45;:12;:45;:::i;:56::-;64759:62;:79;:62;:79;:::i;64758:101::-;64741:118;64445:441;-1:-1:-1;;;;;;;64445:441:8:o;59595:1002::-;59696:12;59924:18;60289:10;59816:42;59844:4;59850:7;59816:27;:42::i;:::-;59808:109;;;;;;;-1:-1:-1;;;;;59808:109:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59945:51;59989:6;59945:39;59970:4;59976:7;59945:24;:39::i;:51::-;59924:72;;60144:13;60102:38;60126:4;60132:7;60102:23;:38::i;:::-;:55;;60087:132;;;;;-1:-1:-1;;;;;60087:132:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60356:7;60365:39;60390:4;60396:7;60365:24;:39::i;:::-;60312:93;;;;;;;;;;;;;-1:-1:-1;;;;;60312:93:8;-1:-1:-1;;;;;60312:93:8;-1:-1:-1;;;60312:93:8;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;60312:93:8;;;60302:104;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;60302:104:8;;;;;;;;;;;;60420:12;;:39;;;;;;;;;;;;;;;;;60302:104;;-1:-1:-1;;;;;;60420:12:8;;;;-1:-1:-1;60420:20:8;;-1:-1:-1;60420:39:8;;;;;263:2:-1;;-1:-1;60420:39:8;;;;;;;-1:-1:-1;60420:12:8;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;60420:39:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;60420:39:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;60420:39:8;60412:162;;;;;;;-1:-1:-1;;;;;60412:162:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;60412:162:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;60588:4:8;;59595:1002;-1:-1:-1;;;;;59595:1002:8:o;38207:943::-;38335:12;;;-1:-1:-1;;;;;38370:18:8;;;;38355:86;;;;;-1:-1:-1;;;;;38355:86:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38507:8;38517:31;38537:4;38543;38517:19;:31::i;:::-;38473:76;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38473:76:8;;;;;;;-1:-1:-1;;;;;38473:76:8;-1:-1:-1;;;;;38473:76:8;-1:-1:-1;;;38473:76:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;38473:76:8;;;38463:87;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38463:87:8;;;;;;;;;;;;;;;;38448:102;;38615:8;38625:29;38645:4;38651:2;38625:19;:29::i;:::-;38581:74;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38581:74:8;;;;;;;-1:-1:-1;;;;;38581:74:8;-1:-1:-1;;;;;38581:74:8;-1:-1:-1;;;38581:74:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;38581:74:8;;;38571:85;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;38571:85:8;;;;;;;;;;;;38678:12;;38705:26;;;;;;;;;;;38571:85;;-1:-1:-1;;;;;;38678:12:8;;;;-1:-1:-1;38678:20:8;;-1:-1:-1;38705:26:8;;:38;;-1:-1:-1;38736:6:8;;38678:12;;38705:20;;:26;;;;;;;;;;-1:-1:-1;38678:12:8;38705:26;;;5:2:-1;;;;30:1;27;20:12;5:2;38705:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38705:26:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38705:26:8;;:38;:30;:38;:::i;:::-;38678:66;;;;;-1:-1:-1;;;38678:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38678:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38678:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38678:66:8;38663:202;;;;;;;-1:-1:-1;;;;;38663:202:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;38663:202:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38886:12;;38913:26;;;;;;;;;;;;;;-1:-1:-1;;;;;38886:12:8;;;;:20;;38907:4;;38913:38;;38944:6;;38886:12;;38913:20;;:26;;;;;;;;;;;;;;38886:12;;38913:26;;;5:2:-1;;;;30:1;27;20:12;5:2;38913:26:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38913:26:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38913:26:8;;:38;:30;:38;:::i;:::-;38886:66;;;;;-1:-1:-1;;;38886:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38886:66:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38886:66:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38886:66:8;38871:202;;;;;;;-1:-1:-1;;;;;38871:202:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;38871:202:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39110:2;-1:-1:-1;;;;;39085:42:8;39104:4;-1:-1:-1;;;;;39085:42:8;;39094:8;39114:6;39122:4;39085:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;39085:42:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39085:42:8;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;39085:42:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39141:4:8;;38207:943;-1:-1:-1;;;;;;;;38207:943:8:o;24580:217::-;24666:12;24686:10;24737:15;24709:44;;;;;;;;;;;;;-1:-1:-1;;;;;24709:44:8;-1:-1:-1;;;;;24709:44:8;-1:-1:-1;;;24709:44:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;24709:44:8;;;24699:55;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;24699:55:8;;;;;;;;;;;;24767:12;;:25;;;;;;;;;;;24699:55;;-1:-1:-1;;;;;;24767:12:8;;;;-1:-1:-1;24767:21:8;;-1:-1:-1;24767:25:8;;;;;-1:-1:-1;;;24767:25:8;;;;;;-1:-1:-1;24767:12:8;:25;;;5:2:-1;;;;30:1;27;20:12;5:2;24767:25:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24767:25:8;;;;;;39:16:-1;36:1;17:17;2:54;101:4;24767:25:8;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;24767:25:8;;;;;;20:11:-1;15:3;12:20;9:2;;;45:1;42;35:12;9:2;64:21;;126:4;117:14;;142:31;;;139:2;;;186:1;183;176:12;139:2;218:10;;268:11;251:29;;293:43;;;290:58;-1:-1;239:118;236:2;;;370:1;367;360:12;236:2;-1:-1;24767:25:8;;24580:217;-1:-1:-1;;;;;;;;24580:217:8:o;22194:215::-;22280:11;22299:10;22350:15;22322:44;;;;;;;;;;;;;-1:-1:-1;;;;;22322:44:8;-1:-1:-1;;;;;22322:44:8;-1:-1:-1;;;22322:44:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;22322:44:8;;;22312:55;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;22312:55:8;;;;;;;;;;;;22380:12;;:24;;;;;;;;;;;22312:55;;-1:-1:-1;;;;;;22380:12:8;;;;-1:-1:-1;22380:20:8;;-1:-1:-1;22380:24:8;;;;;263:2:-1;;-1:-1;22380:24:8;;;;;;;-1:-1:-1;22380:12:8;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;22380:24:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22380:24:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22380:24:8;;22194:215;-1:-1:-1;;;;22194:215:8:o;22789:::-;22875:11;22894:10;22945:15;22917:44;;;;;;;;;;;;;-1:-1:-1;;;;;22917:44:8;-1:-1:-1;;;;;22917:44:8;-1:-1:-1;;;22917:44:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;22917:44:8;;;22907:55;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;23384:215:8;23470:11;23489:10;23540:15;23512:44;;;;;;;;;;;;;-1:-1:-1;;;;;23512:44:8;-1:-1:-1;;;;;23512:44:8;-1:-1:-1;;;23512:44:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;23512:44:8;;;23502:55;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;23974:218:8;24061:12;24081:10;24133:15;24104:45;;;;;;;;;;;;;-1:-1:-1;;;;;24104:45:8;-1:-1:-1;;;;;24104:45:8;-1:-1:-1;;;24104:45:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;24104:45:8;;;24094:56;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;25924:213:8;25996:25;26029:10;26052:39;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;26052:39:8;;;26042:50;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;26042:50:8;;;;;;;;;;;;26105:12;;:27;;;;;;;;;;;26042:50;;-1:-1:-1;;;;;;26105:12:8;;;;-1:-1:-1;26105:23:8;;-1:-1:-1;26105:27:8;;;;;263:2:-1;;-1:-1;26105:27:8;;;;;;;-1:-1:-1;26105:12:8;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;26105:27:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26105:27:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26105:27:8;;25924:213;-1:-1:-1;;;25924:213:8:o;301:224:2:-;359:14;;385:6;;381:35;;;408:1;401:8;;;;381:35;-1:-1:-1;433:5:2;;;437:1;433;:5;452;;;;;;;;:10;444:62;;;;;-1:-1:-1;;;;;444:62:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;519:1;301:224;-1:-1:-1;;;301:224:2:o;697:284::-;755:14;857:9;873:1;869;:5;;;;;;;;;697:284;-1:-1:-1;;;;697:284:2:o;1540:174::-;1598:14;1632:5;;;1651:6;;;;1643:52;;;;;-1:-1:-1;;;;;1643:52:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21583:221:8;21668:18;21694:10;21752:8;21717:44;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;21717:44:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;21717:44:8;;;21707:55;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;63876:211:8;63960:12;63980:10;64035:8;64003:41;;;;;;;;;;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;61052:503:8;61143:12;61163;61282:13;61178:39;61203:4;61209:7;61178:24;:39::i;:::-;61163:54;;61237:3;61227:7;:13;61223:328;;;61257:4;61250:11;;;;61223:328;-1:-1:-1;61298:5:8;61354:109;61379:4;61385:7;61394:68;61406:55;61298:5;61407:39;61444:1;61407:32;61298:5;61408:16;:3;61416:7;61408:16;:7;:16;:::i;61406:55::-;61394:7;;:68;:11;:68;:::i;:::-;61354:24;:109::i;:::-;61337:187;;;;;;;-1:-1:-1;;;;;61337:187:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61540:4;61533:11;;;;61913:271;62006:11;62025:10;62092:7;62101:39;62126:4;62132:7;62101:24;:39::i;:::-;62048:93;;;;;;;;;;;;;-1:-1:-1;;;;;62048:93:8;-1:-1:-1;;;;;62048:93:8;-1:-1:-1;;;62048:93:8;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;62048:93:8;;;62038:104;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;58783:227:8;58875:10;58893;58959:7;58916:51;;;;;;;;;;;;;-1:-1:-1;;;;;58916:51:8;-1:-1:-1;;;;;58916:51:8;-1:-1:-1;;;58916:51:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;58916:51:8;;;58906:62;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;57484:228:8;57577:11;57596:10;57661:7;57619:50;;;;;;;;;;;;;-1:-1:-1;;;;;57619:50:8;-1:-1:-1;;;;;57619:50:8;-1:-1:-1;;;57619:50:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;57619:50:8;;;57609:61;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;16400:357:8;16488:25;16521:10;16594:23;16579:7;16544:43;;;;;;;;;;;;;-1:-1:-1;;;;;16544:43:8;-1:-1:-1;;;;;16544:43:8;-1:-1:-1;;;16544:43:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16544:43:8;;;16534:54;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;16534:54:8;;;;;;;;;;;;16620:12;;:27;;;;;;;;;;;16534:54;;-1:-1:-1;;;;;;16620:12:8;;;;-1:-1:-1;16620:23:8;;-1:-1:-1;16620:27:8;;;;;263:2:-1;;-1:-1;16620:27:8;;;;;;;-1:-1:-1;16620:12:8;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;16620:27:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16620:27:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16620:27:8;;-1:-1:-1;;;;;;16657:22:8;;;16653:100;;16696:15;16689:22;;;;16653:100;16739:7;16732:14;;;;1143:234:2;1201:14;1307:6;;;;1299:55;;;;;-1:-1:-1;;;;;1299:55:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1367:5:2;;;1143:234::o;56626:379:8:-;56727:12;56747:10;56812:7;56770:50;;;;;;;;;;;;;-1:-1:-1;;;;;56770:50:8;-1:-1:-1;;;;;56770:50:8;-1:-1:-1;;;56770:50:8;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;56770:50:8;;;56760:61;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;56760:61:8;;;;;;;;;;;;56835:12;;:32;;;;;;;;;;;;;;;;;56760:61;;-1:-1:-1;;;;;;56835:12:8;;;;-1:-1:-1;56835:20:8;;-1:-1:-1;56835:32:8;;;;;263:2:-1;;-1:-1;56835:32:8;;;;;;;-1:-1:-1;56835:12:8;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;56835:32:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;56835:32:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;56835:32:8;56827:155;;;;;;;-1:-1:-1;;;;;56827:155:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;56827:155:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;56996:4:8;;56626:379;-1:-1:-1;;;;56626:379:8:o", + "source": "pragma solidity 0.4.24;\n\nimport \"./Ownable.sol\";\nimport \"./TokenIOStorage.sol\";\nimport \"./TokenIOLib.sol\";\n\n/*\nCOPYRIGHT 2018 Token, Inc.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n@title TokenIOMerchant - Merchant Interface Smart Contract for Token, Inc.\n\n@author Ryan Tate , Sean Pollock \n\n@notice Contract uses generalized storage contract, `TokenIOStorage`, for\nupgradeability of interface contract.\n\n*/\n\n\ncontract TokenIOMerchant is Ownable {\n\n /// @dev Set reference to TokenIOLib interface which proxies to TokenIOStorage\n using TokenIOLib for TokenIOLib.Data;\n TokenIOLib.Data lib;\n\n /**\n * @notice Constructor method for Merchant contract\n * @param _storageContract Ethereum Address of TokenIOStorage contract\n */\n constructor(address _storageContract) public {\n /*\n * @notice Set the storage contract for the interface\n * @dev This contract will be unable to use the storage constract until\n * @dev contract address is authorized with the storage contract\n * @dev Once authorized, you can setRegisteredFirm and setRegisteredAuthority\n */\n lib.Storage = TokenIOStorage(_storageContract);\n\n /// @dev set owner to contract initiator\n owner[msg.sender] = true;\n }\n\n /**\n @notice Sets Merchant globals and fee paramters\n @param feeContract Address of fee contract\n @return { \"success\" : \"Returns true if successfully called from another contract\"}\n */\n function setParams(\n address feeContract\n ) onlyOwner public returns (bool success) {\n require(lib.setFeeContract(feeContract),\n \"Error: Unable to set fee contract. Ensure contract is allowed by storage contract.\");\n return true;\n }\n\n /**\n * @notice Gets fee parameters\n * @return {\n \"bps\":\"Fee amount as a mesuare of basis points\",\n \"min\":\"Minimum fee amount\",\n \"max\":\"Maximum fee amount\",\n \"flat\":\"Flat fee amount\",\n \"contract\":\"Address of fee contract\"\n }\n */\n function getFeeParams() public view returns (uint bps, uint min, uint max, uint flat, bytes feeMsg, address feeAccount) {\n return (\n lib.getFeeBPS(lib.getFeeContract(address(this))),\n lib.getFeeMin(lib.getFeeContract(address(this))),\n lib.getFeeMax(lib.getFeeContract(address(this))),\n lib.getFeeFlat(lib.getFeeContract(address(this))),\n lib.getFeeMsg(lib.getFeeContract(address(this))),\n lib.getFeeContract(address(this))\n );\n }\n\n /**\n * @notice Calculates fee of a given transfer amount\n * @param amount Amount to calculcate fee value\n * @return {\"fees\": \"Returns the calculated transaction fees based on the fee contract parameters\"}\n */\n function calculateFees(uint amount) public view returns (uint fees) {\n return lib.calculateFees(lib.getFeeContract(address(this)), amount);\n }\n\n /**\n * @notice Pay method for merchant interface\n * @param currency Currency symbol of the token (e.g. USDx, JYPx, GBPx)\n * @param merchant Ethereum address of merchant\n * @param amount Amount of currency to send to merchant\n * @param merchantPaysFees Provide option for merchant to pay the transaction fees\n * @param data Optional data to be included when paying the merchant (e.g. item receipt)\n * @return { \"success\" : \"Returns true if successfully called from another contract\"}\n */\n function pay(string currency, address merchant, uint amount, bool merchantPaysFees, bytes data) public returns (bool success) {\n uint fees = calculateFees(amount);\n /// @dev note the spending amount limit is gross of fees\n require(lib.setAccountSpendingAmount(msg.sender, lib.getFxUSDAmount(currency, amount)),\n \"Error: Unable to set account spending amount.\");\n require(lib.forceTransfer(currency, msg.sender, merchant, amount, data),\n \"Error: Unable to transfer funds to account\");\n\n address feeContract = lib.getFeeContract(address(this));\n /// @dev If merchantPaysFees == true, the merchant will pay the fees to the fee contract;\n if (merchantPaysFees) {\n require(lib.forceTransfer(currency, merchant, feeContract, fees, lib.getFeeMsg(feeContract)),\n \"Error: Unable to transfer fees to fee contract.\");\n\n } else {\n require(lib.forceTransfer(currency, msg.sender, feeContract, fees, lib.getFeeMsg(feeContract)),\n \"Error: Unable to transfer fees to fee contract.\");\n\n }\n\n return true;\n }\n\n}\n", + "sourcePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOMerchant.sol", + "ast": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOMerchant.sol", + "exportedSymbols": { + "TokenIOMerchant": [ + 4843 + ] + }, + "id": 4844, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4608, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:9" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 4609, + "nodeType": "ImportDirective", + "scope": 4844, + "sourceUnit": 185, + "src": "25:23:9", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 4610, + "nodeType": "ImportDirective", + "scope": 4844, + "sourceUnit": 5226, + "src": "49:30:9", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 4611, + "nodeType": "ImportDirective", + "scope": 4844, + "sourceUnit": 4607, + "src": "80:26:9", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 4612, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "902:7:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 4613, + "nodeType": "InheritanceSpecifier", + "src": "902:7:9" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 4843, + "linearizedBaseContracts": [ + 4843, + 184 + ], + "name": "TokenIOMerchant", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 4616, + "libraryName": { + "contractScope": null, + "id": 4614, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4606, + "src": "1006:10:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4606", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "1000:37:9", + "typeName": { + "contractScope": null, + "id": 4615, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1021:15:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 4618, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 4843, + "src": "1042:19:9", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 4617, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1042:15:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 4638, + "nodeType": "Block", + "src": "1260:470:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 4629, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4623, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "1593:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4625, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1629, + "src": "1593:11:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4627, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4620, + "src": "1622:16:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4626, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5225, + "src": "1607:14:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5225_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 4628, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1607:32:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1593:46:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "id": 4630, + "nodeType": "ExpressionStatement", + "src": "1593:46:9" + }, + { + "expression": { + "argumentTypes": null, + "id": 4636, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 4631, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1699:5:9", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 4634, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4632, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "1705:3:9", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4633, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1705:10:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1699:17:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4635, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1719:4:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1699:24:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4637, + "nodeType": "ExpressionStatement", + "src": "1699:24:9" + } + ] + }, + "documentation": "@notice Constructor method for Merchant contract\n@param _storageContract Ethereum Address of TokenIOStorage contract", + "id": 4639, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4621, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4620, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 4639, + "src": "1227:24:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4619, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1227:7:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1226:26:9" + }, + "payable": false, + "returnParameters": { + "id": 4622, + "nodeType": "ParameterList", + "parameters": [], + "src": "1260:0:9" + }, + "scope": 4843, + "src": "1215:515:9", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4658, + "nodeType": "Block", + "src": "2029:168:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4651, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4641, + "src": "2064:11:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4649, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "2045:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4650, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2086, + "src": "2045:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) returns (bool)" + } + }, + "id": 4652, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2045:31:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e74726163742e20456e7375726520636f6e747261637420697320616c6c6f7765642062792073746f7261676520636f6e74726163742e", + "id": 4653, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2086:84:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_9e05a6836836cb77baea52eb421ebbf742058dce5c126f5d3343064b07960fe4", + "typeString": "literal_string \"Error: Unable to set fee contract. Ensure contract is allowed by storage contract.\"" + }, + "value": "Error: Unable to set fee contract. Ensure contract is allowed by storage contract." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_9e05a6836836cb77baea52eb421ebbf742058dce5c126f5d3343064b07960fe4", + "typeString": "literal_string \"Error: Unable to set fee contract. Ensure contract is allowed by storage contract.\"" + } + ], + "id": 4648, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2037:7:9", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4654, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2037:134:9", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4655, + "nodeType": "ExpressionStatement", + "src": "2037:134:9" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4656, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2186:4:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 4647, + "id": 4657, + "nodeType": "Return", + "src": "2179:11:9" + } + ] + }, + "documentation": "@notice Sets Merchant globals and fee paramters\n@param feeContract Address of fee contract\n@return { \"success\" : \"Returns true if successfully called from another contract\"}", + "id": 4659, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 4644, + "modifierName": { + "argumentTypes": null, + "id": 4643, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "1989:9:9", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "1989:9:9" + } + ], + "name": "setParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4642, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4641, + "name": "feeContract", + "nodeType": "VariableDeclaration", + "scope": 4659, + "src": "1963:19:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4640, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1963:7:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1955:33:9" + }, + "payable": false, + "returnParameters": { + "id": 4647, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4646, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 4659, + "src": "2015:12:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4645, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2015:4:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2014:14:9" + }, + "scope": 4843, + "src": "1937:260:9", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4727, + "nodeType": "Block", + "src": "2582:364:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4679, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5273, + "src": "2648:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4678, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2640:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4680, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2640:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4676, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "2621:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4677, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2720, + "src": "2621:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4681, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2621:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4674, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "2607:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4675, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeBPS", + "nodeType": "MemberAccess", + "referencedDeclaration": 2522, + "src": "2607:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 4682, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2607:48:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4688, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5273, + "src": "2706:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4687, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2698:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4689, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2698:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4685, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "2679:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4686, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2720, + "src": "2679:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4690, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2679:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4683, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "2665:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4684, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMin", + "nodeType": "MemberAccess", + "referencedDeclaration": 2548, + "src": "2665:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 4691, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2665:48:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4697, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5273, + "src": "2764:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4696, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2756:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4698, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2756:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4694, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "2737:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4695, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2720, + "src": "2737:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4699, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2737:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4692, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "2723:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4693, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMax", + "nodeType": "MemberAccess", + "referencedDeclaration": 2574, + "src": "2723:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 4700, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2723:48:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4706, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5273, + "src": "2823:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4705, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2815:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4707, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2815:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4703, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "2796:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4704, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2720, + "src": "2796:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4708, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2796:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4701, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "2781:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4702, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeFlat", + "nodeType": "MemberAccess", + "referencedDeclaration": 2600, + "src": "2781:14:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 4709, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2781:49:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4715, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5273, + "src": "2881:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4714, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2873:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4716, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2873:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4712, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "2854:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4713, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2720, + "src": "2854:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4717, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2854:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4710, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "2840:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4711, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMsg", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "2840:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bytes memory)" + } + }, + "id": 4718, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2840:48:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4722, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5273, + "src": "2925:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4721, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2917:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4723, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2917:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4719, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "2898:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4720, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2720, + "src": "2898:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4724, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2898:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 4725, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2597:342:9", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_address_$", + "typeString": "tuple(uint256,uint256,uint256,uint256,bytes memory,address)" + } + }, + "functionReturnParameters": 4673, + "id": 4726, + "nodeType": "Return", + "src": "2590:349:9" + } + ] + }, + "documentation": "@notice Gets fee parameters\n@return {\n\"bps\":\"Fee amount as a mesuare of basis points\",\n\"min\":\"Minimum fee amount\",\n\"max\":\"Maximum fee amount\",\n\"flat\":\"Flat fee amount\",\n\"contract\":\"Address of fee contract\"\n}", + "id": 4728, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getFeeParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4660, + "nodeType": "ParameterList", + "parameters": [], + "src": "2483:2:9" + }, + "payable": false, + "returnParameters": { + "id": 4673, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4662, + "name": "bps", + "nodeType": "VariableDeclaration", + "scope": 4728, + "src": "2507:8:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4661, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2507:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4664, + "name": "min", + "nodeType": "VariableDeclaration", + "scope": 4728, + "src": "2517:8:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4663, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2517:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4666, + "name": "max", + "nodeType": "VariableDeclaration", + "scope": 4728, + "src": "2527:8:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4665, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2527:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4668, + "name": "flat", + "nodeType": "VariableDeclaration", + "scope": 4728, + "src": "2537:9:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4667, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2537:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4670, + "name": "feeMsg", + "nodeType": "VariableDeclaration", + "scope": 4728, + "src": "2548:12:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4669, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2548:5:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4672, + "name": "feeAccount", + "nodeType": "VariableDeclaration", + "scope": 4728, + "src": "2562:18:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4671, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2562:7:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2506:75:9" + }, + "scope": 4843, + "src": "2462:484:9", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4746, + "nodeType": "Block", + "src": "3245:82:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4740, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5273, + "src": "3305:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4739, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3297:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4741, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3297:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4737, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "3278:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4738, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2720, + "src": "3278:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4742, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3278:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4743, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4730, + "src": "3313:6:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 4735, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "3260:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4736, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "calculateFees", + "nodeType": "MemberAccess", + "referencedDeclaration": 2988, + "src": "3260:17:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) view returns (uint256)" + } + }, + "id": 4744, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3260:60:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4734, + "id": 4745, + "nodeType": "Return", + "src": "3253:67:9" + } + ] + }, + "documentation": "@notice Calculates fee of a given transfer amount\n@param amount Amount to calculcate fee value\n@return {\"fees\": \"Returns the calculated transaction fees based on the fee contract parameters\"}", + "id": 4747, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "calculateFees", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4731, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4730, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 4747, + "src": "3200:11:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4729, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3200:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3199:13:9" + }, + "payable": false, + "returnParameters": { + "id": 4734, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4733, + "name": "fees", + "nodeType": "VariableDeclaration", + "scope": 4747, + "src": "3234:9:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4732, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3234:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3233:11:9" + }, + "scope": 4843, + "src": "3177:150:9", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4841, + "nodeType": "Block", + "src": "3987:962:9", + "statements": [ + { + "assignments": [ + 4763 + ], + "declarations": [ + { + "constant": false, + "id": 4763, + "name": "fees", + "nodeType": "VariableDeclaration", + "scope": 4842, + "src": "3995:9:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4762, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3995:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 4767, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4765, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4753, + "src": "4021:6:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4764, + "name": "calculateFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4747, + "src": "4007:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view returns (uint256)" + } + }, + "id": 4766, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4007:21:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3995:33:9" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4771, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "4136:3:9", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4772, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "4136:10:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4775, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4749, + "src": "4167:8:9", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 4776, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4753, + "src": "4177:6:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 4773, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "4148:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4774, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFxUSDAmount", + "nodeType": "MemberAccess", + "referencedDeclaration": 4605, + "src": "4148:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,uint256) view returns (uint256)" + } + }, + "id": 4777, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4148:36:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 4769, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "4107:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4770, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountSpendingAmount", + "nodeType": "MemberAccess", + "referencedDeclaration": 4384, + "src": "4107:28:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 4778, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4107:78:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20736574206163636f756e74207370656e64696e6720616d6f756e742e", + "id": 4779, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4195:47:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7a8790433f99260aa4e38602407436fb82a1411633b4406759e1ebede4d74a18", + "typeString": "literal_string \"Error: Unable to set account spending amount.\"" + }, + "value": "Error: Unable to set account spending amount." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7a8790433f99260aa4e38602407436fb82a1411633b4406759e1ebede4d74a18", + "typeString": "literal_string \"Error: Unable to set account spending amount.\"" + } + ], + "id": 4768, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "4099:7:9", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4780, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4099:144:9", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4781, + "nodeType": "ExpressionStatement", + "src": "4099:144:9" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4785, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4749, + "src": "4277:8:9", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4786, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "4287:3:9", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4787, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "4287:10:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4788, + "name": "merchant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4751, + "src": "4299:8:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4789, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4753, + "src": "4309:6:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 4790, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4757, + "src": "4317:4:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 4783, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "4259:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4784, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "forceTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 3335, + "src": "4259:17:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,address,uint256,bytes memory) returns (bool)" + } + }, + "id": 4791, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4259:63:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207472616e736665722066756e647320746f206163636f756e74", + "id": 4792, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4332:44:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_bbf466ef45b7ce75995210021820dc27f441a75c62bed33c09723390eec8e030", + "typeString": "literal_string \"Error: Unable to transfer funds to account\"" + }, + "value": "Error: Unable to transfer funds to account" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_bbf466ef45b7ce75995210021820dc27f441a75c62bed33c09723390eec8e030", + "typeString": "literal_string \"Error: Unable to transfer funds to account\"" + } + ], + "id": 4782, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "4251:7:9", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4793, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4251:126:9", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4794, + "nodeType": "ExpressionStatement", + "src": "4251:126:9" + }, + { + "assignments": [ + 4796 + ], + "declarations": [ + { + "constant": false, + "id": 4796, + "name": "feeContract", + "nodeType": "VariableDeclaration", + "scope": 4842, + "src": "4386:19:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4795, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4386:7:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 4803, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4800, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5273, + "src": "4435:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4799, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4427:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4801, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4427:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4797, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "4408:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4798, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2720, + "src": "4408:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4802, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4408:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4386:55:9" + }, + { + "condition": { + "argumentTypes": null, + "id": 4804, + "name": "merchantPaysFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4755, + "src": "4549:16:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 4837, + "nodeType": "Block", + "src": "4747:176:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4824, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4749, + "src": "4783:8:9", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4825, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "4793:3:9", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4826, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "4793:10:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4827, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4796, + "src": "4805:11:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4828, + "name": "fees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4763, + "src": "4818:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4831, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4796, + "src": "4838:11:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4829, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "4824:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4830, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMsg", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "4824:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bytes memory)" + } + }, + "id": 4832, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4824:26:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 4822, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "4765:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4823, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "forceTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 3335, + "src": "4765:17:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,address,uint256,bytes memory) returns (bool)" + } + }, + "id": 4833, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4765:86:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207472616e73666572206665657320746f2066656520636f6e74726163742e", + "id": 4834, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4863:49:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f7d9d2b186deae04747f480de0e416c74701ab3e2f8cceccd78101586f4f25fa", + "typeString": "literal_string \"Error: Unable to transfer fees to fee contract.\"" + }, + "value": "Error: Unable to transfer fees to fee contract." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_f7d9d2b186deae04747f480de0e416c74701ab3e2f8cceccd78101586f4f25fa", + "typeString": "literal_string \"Error: Unable to transfer fees to fee contract.\"" + } + ], + "id": 4821, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "4757:7:9", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4835, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4757:156:9", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4836, + "nodeType": "ExpressionStatement", + "src": "4757:156:9" + } + ] + }, + "id": 4838, + "nodeType": "IfStatement", + "src": "4545:378:9", + "trueBody": { + "id": 4820, + "nodeType": "Block", + "src": "4567:174:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4808, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4749, + "src": "4603:8:9", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 4809, + "name": "merchant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4751, + "src": "4613:8:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4810, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4796, + "src": "4623:11:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4811, + "name": "fees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4763, + "src": "4636:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4814, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4796, + "src": "4656:11:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4812, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "4642:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4813, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMsg", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "4642:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bytes memory)" + } + }, + "id": 4815, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4642:26:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 4806, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "4585:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4807, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "forceTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 3335, + "src": "4585:17:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,address,uint256,bytes memory) returns (bool)" + } + }, + "id": 4816, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4585:84:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207472616e73666572206665657320746f2066656520636f6e74726163742e", + "id": 4817, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4681:49:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f7d9d2b186deae04747f480de0e416c74701ab3e2f8cceccd78101586f4f25fa", + "typeString": "literal_string \"Error: Unable to transfer fees to fee contract.\"" + }, + "value": "Error: Unable to transfer fees to fee contract." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_f7d9d2b186deae04747f480de0e416c74701ab3e2f8cceccd78101586f4f25fa", + "typeString": "literal_string \"Error: Unable to transfer fees to fee contract.\"" + } + ], + "id": 4805, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "4577:7:9", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4818, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4577:154:9", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4819, + "nodeType": "ExpressionStatement", + "src": "4577:154:9" + } + ] + } + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4839, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4938:4:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 4761, + "id": 4840, + "nodeType": "Return", + "src": "4931:11:9" + } + ] + }, + "documentation": "@notice Pay method for merchant interface\n@param currency Currency symbol of the token (e.g. USDx, JYPx, GBPx)\n@param merchant Ethereum address of merchant\n@param amount Amount of currency to send to merchant\n@param merchantPaysFees Provide option for merchant to pay the transaction fees\n@param data Optional data to be included when paying the merchant (e.g. item receipt)\n@return { \"success\" : \"Returns true if successfully called from another contract\"}", + "id": 4842, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [], + "name": "pay", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4758, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4749, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 4842, + "src": "3874:15:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 4748, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3874:6:9", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4751, + "name": "merchant", + "nodeType": "VariableDeclaration", + "scope": 4842, + "src": "3891:16:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4750, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3891:7:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4753, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 4842, + "src": "3909:11:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4752, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3909:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4755, + "name": "merchantPaysFees", + "nodeType": "VariableDeclaration", + "scope": 4842, + "src": "3922:21:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4754, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3922:4:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4757, + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 4842, + "src": "3945:10:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4756, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3945:5:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3873:83:9" + }, + "payable": false, + "returnParameters": { + "id": 4761, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4760, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 4842, + "src": "3973:12:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4759, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3973:4:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3972:14:9" + }, + "scope": 4843, + "src": "3861:1088:9", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 4844, + "src": "874:4078:9" + } + ], + "src": "0:4953:9" + }, + "legacyAST": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOMerchant.sol", + "exportedSymbols": { + "TokenIOMerchant": [ + 4843 + ] + }, + "id": 4844, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4608, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:9" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 4609, + "nodeType": "ImportDirective", + "scope": 4844, + "sourceUnit": 185, + "src": "25:23:9", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 4610, + "nodeType": "ImportDirective", + "scope": 4844, + "sourceUnit": 5226, + "src": "49:30:9", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 4611, + "nodeType": "ImportDirective", + "scope": 4844, + "sourceUnit": 4607, + "src": "80:26:9", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 4612, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "902:7:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 4613, + "nodeType": "InheritanceSpecifier", + "src": "902:7:9" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 4843, + "linearizedBaseContracts": [ + 4843, + 184 + ], + "name": "TokenIOMerchant", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 4616, + "libraryName": { + "contractScope": null, + "id": 4614, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4606, + "src": "1006:10:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4606", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "1000:37:9", + "typeName": { + "contractScope": null, + "id": 4615, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1021:15:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 4618, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 4843, + "src": "1042:19:9", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 4617, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1042:15:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 4638, + "nodeType": "Block", + "src": "1260:470:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 4629, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4623, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "1593:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4625, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1629, + "src": "1593:11:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4627, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4620, + "src": "1622:16:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4626, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5225, + "src": "1607:14:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5225_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 4628, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1607:32:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1593:46:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "id": 4630, + "nodeType": "ExpressionStatement", + "src": "1593:46:9" + }, + { + "expression": { + "argumentTypes": null, + "id": 4636, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 4631, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1699:5:9", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 4634, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4632, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "1705:3:9", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4633, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1705:10:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1699:17:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4635, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1719:4:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1699:24:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4637, + "nodeType": "ExpressionStatement", + "src": "1699:24:9" + } + ] + }, + "documentation": "@notice Constructor method for Merchant contract\n@param _storageContract Ethereum Address of TokenIOStorage contract", + "id": 4639, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4621, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4620, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 4639, + "src": "1227:24:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4619, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1227:7:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1226:26:9" + }, + "payable": false, + "returnParameters": { + "id": 4622, + "nodeType": "ParameterList", + "parameters": [], + "src": "1260:0:9" + }, + "scope": 4843, + "src": "1215:515:9", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4658, + "nodeType": "Block", + "src": "2029:168:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4651, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4641, + "src": "2064:11:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4649, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "2045:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4650, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2086, + "src": "2045:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) returns (bool)" + } + }, + "id": 4652, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2045:31:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207365742066656520636f6e74726163742e20456e7375726520636f6e747261637420697320616c6c6f7765642062792073746f7261676520636f6e74726163742e", + "id": 4653, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2086:84:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_9e05a6836836cb77baea52eb421ebbf742058dce5c126f5d3343064b07960fe4", + "typeString": "literal_string \"Error: Unable to set fee contract. Ensure contract is allowed by storage contract.\"" + }, + "value": "Error: Unable to set fee contract. Ensure contract is allowed by storage contract." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_9e05a6836836cb77baea52eb421ebbf742058dce5c126f5d3343064b07960fe4", + "typeString": "literal_string \"Error: Unable to set fee contract. Ensure contract is allowed by storage contract.\"" + } + ], + "id": 4648, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "2037:7:9", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4654, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2037:134:9", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4655, + "nodeType": "ExpressionStatement", + "src": "2037:134:9" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4656, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2186:4:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 4647, + "id": 4657, + "nodeType": "Return", + "src": "2179:11:9" + } + ] + }, + "documentation": "@notice Sets Merchant globals and fee paramters\n@param feeContract Address of fee contract\n@return { \"success\" : \"Returns true if successfully called from another contract\"}", + "id": 4659, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 4644, + "modifierName": { + "argumentTypes": null, + "id": 4643, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "1989:9:9", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "1989:9:9" + } + ], + "name": "setParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4642, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4641, + "name": "feeContract", + "nodeType": "VariableDeclaration", + "scope": 4659, + "src": "1963:19:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4640, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1963:7:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1955:33:9" + }, + "payable": false, + "returnParameters": { + "id": 4647, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4646, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 4659, + "src": "2015:12:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4645, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2015:4:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2014:14:9" + }, + "scope": 4843, + "src": "1937:260:9", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4727, + "nodeType": "Block", + "src": "2582:364:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4679, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5273, + "src": "2648:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4678, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2640:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4680, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2640:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4676, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "2621:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4677, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2720, + "src": "2621:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4681, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2621:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4674, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "2607:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4675, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeBPS", + "nodeType": "MemberAccess", + "referencedDeclaration": 2522, + "src": "2607:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 4682, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2607:48:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4688, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5273, + "src": "2706:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4687, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2698:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4689, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2698:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4685, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "2679:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4686, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2720, + "src": "2679:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4690, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2679:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4683, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "2665:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4684, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMin", + "nodeType": "MemberAccess", + "referencedDeclaration": 2548, + "src": "2665:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 4691, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2665:48:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4697, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5273, + "src": "2764:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4696, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2756:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4698, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2756:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4694, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "2737:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4695, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2720, + "src": "2737:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4699, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2737:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4692, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "2723:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4693, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMax", + "nodeType": "MemberAccess", + "referencedDeclaration": 2574, + "src": "2723:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 4700, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2723:48:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4706, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5273, + "src": "2823:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4705, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2815:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4707, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2815:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4703, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "2796:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4704, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2720, + "src": "2796:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4708, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2796:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4701, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "2781:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4702, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeFlat", + "nodeType": "MemberAccess", + "referencedDeclaration": 2600, + "src": "2781:14:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (uint256)" + } + }, + "id": 4709, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2781:49:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4715, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5273, + "src": "2881:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4714, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2873:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4716, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2873:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4712, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "2854:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4713, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2720, + "src": "2854:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4717, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2854:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4710, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "2840:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4711, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMsg", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "2840:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bytes memory)" + } + }, + "id": 4718, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2840:48:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4722, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5273, + "src": "2925:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4721, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2917:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4723, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2917:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4719, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "2898:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4720, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2720, + "src": "2898:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4724, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2898:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 4725, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2597:342:9", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_address_$", + "typeString": "tuple(uint256,uint256,uint256,uint256,bytes memory,address)" + } + }, + "functionReturnParameters": 4673, + "id": 4726, + "nodeType": "Return", + "src": "2590:349:9" + } + ] + }, + "documentation": "@notice Gets fee parameters\n@return {\n\"bps\":\"Fee amount as a mesuare of basis points\",\n\"min\":\"Minimum fee amount\",\n\"max\":\"Maximum fee amount\",\n\"flat\":\"Flat fee amount\",\n\"contract\":\"Address of fee contract\"\n}", + "id": 4728, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getFeeParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4660, + "nodeType": "ParameterList", + "parameters": [], + "src": "2483:2:9" + }, + "payable": false, + "returnParameters": { + "id": 4673, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4662, + "name": "bps", + "nodeType": "VariableDeclaration", + "scope": 4728, + "src": "2507:8:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4661, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2507:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4664, + "name": "min", + "nodeType": "VariableDeclaration", + "scope": 4728, + "src": "2517:8:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4663, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2517:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4666, + "name": "max", + "nodeType": "VariableDeclaration", + "scope": 4728, + "src": "2527:8:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4665, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2527:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4668, + "name": "flat", + "nodeType": "VariableDeclaration", + "scope": 4728, + "src": "2537:9:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4667, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "2537:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4670, + "name": "feeMsg", + "nodeType": "VariableDeclaration", + "scope": 4728, + "src": "2548:12:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4669, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2548:5:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4672, + "name": "feeAccount", + "nodeType": "VariableDeclaration", + "scope": 4728, + "src": "2562:18:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4671, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2562:7:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2506:75:9" + }, + "scope": 4843, + "src": "2462:484:9", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4746, + "nodeType": "Block", + "src": "3245:82:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4740, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5273, + "src": "3305:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4739, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3297:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4741, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3297:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4737, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "3278:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4738, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2720, + "src": "3278:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4742, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3278:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4743, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4730, + "src": "3313:6:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 4735, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "3260:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4736, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "calculateFees", + "nodeType": "MemberAccess", + "referencedDeclaration": 2988, + "src": "3260:17:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) view returns (uint256)" + } + }, + "id": 4744, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3260:60:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4734, + "id": 4745, + "nodeType": "Return", + "src": "3253:67:9" + } + ] + }, + "documentation": "@notice Calculates fee of a given transfer amount\n@param amount Amount to calculcate fee value\n@return {\"fees\": \"Returns the calculated transaction fees based on the fee contract parameters\"}", + "id": 4747, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "calculateFees", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4731, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4730, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 4747, + "src": "3200:11:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4729, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3200:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3199:13:9" + }, + "payable": false, + "returnParameters": { + "id": 4734, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4733, + "name": "fees", + "nodeType": "VariableDeclaration", + "scope": 4747, + "src": "3234:9:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4732, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3234:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3233:11:9" + }, + "scope": 4843, + "src": "3177:150:9", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4841, + "nodeType": "Block", + "src": "3987:962:9", + "statements": [ + { + "assignments": [ + 4763 + ], + "declarations": [ + { + "constant": false, + "id": 4763, + "name": "fees", + "nodeType": "VariableDeclaration", + "scope": 4842, + "src": "3995:9:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4762, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3995:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 4767, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4765, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4753, + "src": "4021:6:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4764, + "name": "calculateFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4747, + "src": "4007:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view returns (uint256)" + } + }, + "id": 4766, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4007:21:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3995:33:9" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4771, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "4136:3:9", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4772, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "4136:10:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4775, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4749, + "src": "4167:8:9", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 4776, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4753, + "src": "4177:6:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 4773, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "4148:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4774, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFxUSDAmount", + "nodeType": "MemberAccess", + "referencedDeclaration": 4605, + "src": "4148:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,uint256) view returns (uint256)" + } + }, + "id": 4777, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4148:36:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 4769, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "4107:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4770, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "setAccountSpendingAmount", + "nodeType": "MemberAccess", + "referencedDeclaration": 4384, + "src": "4107:28:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address,uint256) returns (bool)" + } + }, + "id": 4778, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4107:78:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f20736574206163636f756e74207370656e64696e6720616d6f756e742e", + "id": 4779, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4195:47:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7a8790433f99260aa4e38602407436fb82a1411633b4406759e1ebede4d74a18", + "typeString": "literal_string \"Error: Unable to set account spending amount.\"" + }, + "value": "Error: Unable to set account spending amount." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7a8790433f99260aa4e38602407436fb82a1411633b4406759e1ebede4d74a18", + "typeString": "literal_string \"Error: Unable to set account spending amount.\"" + } + ], + "id": 4768, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "4099:7:9", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4780, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4099:144:9", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4781, + "nodeType": "ExpressionStatement", + "src": "4099:144:9" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4785, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4749, + "src": "4277:8:9", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4786, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "4287:3:9", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4787, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "4287:10:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4788, + "name": "merchant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4751, + "src": "4299:8:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4789, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4753, + "src": "4309:6:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 4790, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4757, + "src": "4317:4:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 4783, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "4259:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4784, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "forceTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 3335, + "src": "4259:17:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,address,uint256,bytes memory) returns (bool)" + } + }, + "id": 4791, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4259:63:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207472616e736665722066756e647320746f206163636f756e74", + "id": 4792, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4332:44:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_bbf466ef45b7ce75995210021820dc27f441a75c62bed33c09723390eec8e030", + "typeString": "literal_string \"Error: Unable to transfer funds to account\"" + }, + "value": "Error: Unable to transfer funds to account" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_bbf466ef45b7ce75995210021820dc27f441a75c62bed33c09723390eec8e030", + "typeString": "literal_string \"Error: Unable to transfer funds to account\"" + } + ], + "id": 4782, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "4251:7:9", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4793, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4251:126:9", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4794, + "nodeType": "ExpressionStatement", + "src": "4251:126:9" + }, + { + "assignments": [ + 4796 + ], + "declarations": [ + { + "constant": false, + "id": 4796, + "name": "feeContract", + "nodeType": "VariableDeclaration", + "scope": 4842, + "src": "4386:19:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4795, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4386:7:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 4803, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4800, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5273, + "src": "4435:4:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenIOMerchant_$4843", + "typeString": "contract TokenIOMerchant" + } + ], + "id": 4799, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4427:7:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 4801, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4427:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4797, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "4408:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4798, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 2720, + "src": "4408:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (address)" + } + }, + "id": 4802, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4408:33:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4386:55:9" + }, + { + "condition": { + "argumentTypes": null, + "id": 4804, + "name": "merchantPaysFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4755, + "src": "4549:16:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 4837, + "nodeType": "Block", + "src": "4747:176:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4824, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4749, + "src": "4783:8:9", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4825, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "4793:3:9", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4826, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "4793:10:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4827, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4796, + "src": "4805:11:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4828, + "name": "fees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4763, + "src": "4818:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4831, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4796, + "src": "4838:11:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4829, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "4824:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4830, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMsg", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "4824:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bytes memory)" + } + }, + "id": 4832, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4824:26:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 4822, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "4765:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4823, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "forceTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 3335, + "src": "4765:17:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,address,uint256,bytes memory) returns (bool)" + } + }, + "id": 4833, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4765:86:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207472616e73666572206665657320746f2066656520636f6e74726163742e", + "id": 4834, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4863:49:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f7d9d2b186deae04747f480de0e416c74701ab3e2f8cceccd78101586f4f25fa", + "typeString": "literal_string \"Error: Unable to transfer fees to fee contract.\"" + }, + "value": "Error: Unable to transfer fees to fee contract." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_f7d9d2b186deae04747f480de0e416c74701ab3e2f8cceccd78101586f4f25fa", + "typeString": "literal_string \"Error: Unable to transfer fees to fee contract.\"" + } + ], + "id": 4821, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "4757:7:9", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4835, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4757:156:9", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4836, + "nodeType": "ExpressionStatement", + "src": "4757:156:9" + } + ] + }, + "id": 4838, + "nodeType": "IfStatement", + "src": "4545:378:9", + "trueBody": { + "id": 4820, + "nodeType": "Block", + "src": "4567:174:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4808, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4749, + "src": "4603:8:9", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "argumentTypes": null, + "id": 4809, + "name": "merchant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4751, + "src": "4613:8:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4810, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4796, + "src": "4623:11:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 4811, + "name": "fees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4763, + "src": "4636:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4814, + "name": "feeContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4796, + "src": "4656:11:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 4812, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "4642:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4813, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeMsg", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "4642:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_address_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,address) view returns (bytes memory)" + } + }, + "id": 4815, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4642:26:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 4806, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "4585:3:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4807, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "forceTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 3335, + "src": "4585:17:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory,address,address,uint256,bytes memory) returns (bool)" + } + }, + "id": 4816, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4585:84:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4572726f723a20556e61626c6520746f207472616e73666572206665657320746f2066656520636f6e74726163742e", + "id": 4817, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4681:49:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f7d9d2b186deae04747f480de0e416c74701ab3e2f8cceccd78101586f4f25fa", + "typeString": "literal_string \"Error: Unable to transfer fees to fee contract.\"" + }, + "value": "Error: Unable to transfer fees to fee contract." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_f7d9d2b186deae04747f480de0e416c74701ab3e2f8cceccd78101586f4f25fa", + "typeString": "literal_string \"Error: Unable to transfer fees to fee contract.\"" + } + ], + "id": 4805, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5243, + 5244 + ], + "referencedDeclaration": 5244, + "src": "4577:7:9", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4818, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4577:154:9", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4819, + "nodeType": "ExpressionStatement", + "src": "4577:154:9" + } + ] + } + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4839, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4938:4:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 4761, + "id": 4840, + "nodeType": "Return", + "src": "4931:11:9" + } + ] + }, + "documentation": "@notice Pay method for merchant interface\n@param currency Currency symbol of the token (e.g. USDx, JYPx, GBPx)\n@param merchant Ethereum address of merchant\n@param amount Amount of currency to send to merchant\n@param merchantPaysFees Provide option for merchant to pay the transaction fees\n@param data Optional data to be included when paying the merchant (e.g. item receipt)\n@return { \"success\" : \"Returns true if successfully called from another contract\"}", + "id": 4842, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [], + "name": "pay", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4758, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4749, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 4842, + "src": "3874:15:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 4748, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3874:6:9", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4751, + "name": "merchant", + "nodeType": "VariableDeclaration", + "scope": 4842, + "src": "3891:16:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4750, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3891:7:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4753, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 4842, + "src": "3909:11:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4752, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3909:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4755, + "name": "merchantPaysFees", + "nodeType": "VariableDeclaration", + "scope": 4842, + "src": "3922:21:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4754, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3922:4:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4757, + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 4842, + "src": "3945:10:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4756, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3945:5:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3873:83:9" + }, + "payable": false, + "returnParameters": { + "id": 4761, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4760, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 4842, + "src": "3973:12:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4759, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3973:4:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3972:14:9" + }, + "scope": 4843, + "src": "3861:1088:9", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 4844, + "src": "874:4078:9" + } + ], + "src": "0:4953:9" + }, + "compiler": { + "name": "solc", + "version": "0.4.24+commit.e67f0147.Emscripten.clang" + }, + "networks": { + "1": { + "events": {}, + "links": {}, + "address": "0x6ea17fb5e650da5ffcf959786ee30ee157c6ea22", + "transactionHash": "0xd7915684c88def6cb2cfeb27b14a6d4f5cc0d4d75817ad011892973e036bc07d" + }, + "4447": { + "events": {}, + "links": {}, + "address": "0x13274fe19c0178208bcbee397af8167a7be27f6f", + "transactionHash": "0xc06537934a5d657d933dcaf348488c54a1c3997a172e6efd422dfc6613826714" + } + }, + "schemaVersion": "2.0.1", + "updatedAt": "2018-10-24T17:29:03.360Z" +} \ No newline at end of file diff --git a/deployed/mainnet-v1.0.1/TokenIONameSpace.json b/deployed/mainnet-v1.0.1/TokenIONameSpace.json new file mode 100644 index 0000000..184bf83 --- /dev/null +++ b/deployed/mainnet-v1.0.1/TokenIONameSpace.json @@ -0,0 +1,1297 @@ +{ + "contractName": "TokenIONameSpace", + "abi": [ + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "allowOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "removeOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "", + "type": "address" + } + ], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "name": "_storageContract", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "AllowOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "RevokeOwnership", + "type": "event" + }, + { + "constant": true, + "inputs": [ + { + "name": "currency", + "type": "string" + } + ], + "name": "getTokenNameSpace", + "outputs": [ + { + "name": "contractAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b506040516020806106eb833981016040908152905133600090815260208190529182208054600160ff19918216811783558054600160a060020a031916600160a060020a03909416939093178355815416909117905561067590819061007690396000f30060806040526004361061006c5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663394387b181146100715780634bbc142c146100e6578063666a34271461011b578063666e1b391461013c578063f2fde38b1461015d575b600080fd5b34801561007d57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100ca94369492936024939284019190819084018382808284375094975061017e9650505050505050565b60408051600160a060020a039092168252519081900360200190f35b3480156100f257600080fd5b50610107600160a060020a0360043516610197565b604080519115158252519081900360200190f35b34801561012757600080fd5b50610107600160a060020a0360043516610277565b34801561014857600080fd5b50610107600160a060020a0360043516610354565b34801561016957600080fd5b50610107600160a060020a0360043516610369565b600061019160018363ffffffff6104c716565b92915050565b3360009081526020819052604081205460ff161515610226576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b3360009081526020819052604081205460ff161515610306576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b3360009081526020819052604081205460ff1615156103f8576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a0382161515610458576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b6000808260405160200180807f746f6b656e2e6e616d6573706163650000000000000000000000000000000000815250600f0182805190602001908083835b602083106105255780518252601f199092019160209182019101610506565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083106105885780518252601f199092019160209182019101610569565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506040513d602081101561063f57600080fd5b50519493505050505600a165627a7a723058209fcd53ffea422196530e7f8d1ecf7c3e85b79a5ff60b736957e69e6c4b8b0dd60029", + "deployedBytecode": "0x60806040526004361061006c5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663394387b181146100715780634bbc142c146100e6578063666a34271461011b578063666e1b391461013c578063f2fde38b1461015d575b600080fd5b34801561007d57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100ca94369492936024939284019190819084018382808284375094975061017e9650505050505050565b60408051600160a060020a039092168252519081900360200190f35b3480156100f257600080fd5b50610107600160a060020a0360043516610197565b604080519115158252519081900360200190f35b34801561012757600080fd5b50610107600160a060020a0360043516610277565b34801561014857600080fd5b50610107600160a060020a0360043516610354565b34801561016957600080fd5b50610107600160a060020a0360043516610369565b600061019160018363ffffffff6104c716565b92915050565b3360009081526020819052604081205460ff161515610226576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b3360009081526020819052604081205460ff161515610306576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b3360009081526020819052604081205460ff1615156103f8576040805160e560020a62461bcd02815260206004820152603960248201527f4572726f723a205472616e73616374696f6e2073656e646572206973206e6f7460448201527f20616c6c6f7765642062792074686520636f6e74726163742e00000000000000606482015290519081900360840190fd5b600160a060020a0382161515610458576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b6000808260405160200180807f746f6b656e2e6e616d6573706163650000000000000000000000000000000000815250600f0182805190602001908083835b602083106105255780518252601f199092019160209182019101610506565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083106105885780518252601f199092019160209182019101610569565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208a547f21f8a721000000000000000000000000000000000000000000000000000000008452600484018290529451909750600160a060020a0390941695506321f8a721945060248083019491935090918290030181600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506040513d602081101561063f57600080fd5b50519493505050505600a165627a7a723058209fcd53ffea422196530e7f8d1ecf7c3e85b79a5ff60b736957e69e6c4b8b0dd60029", + "sourceMap": "1076:1347:10:-;;;1414:474;8:9:-1;5:2;;;30:1;27;20:12;5:2;1414:474:10;;;;;;;;;;;;;;;;1117:10:1;1111:5;:17;;;1414:474:10;1111:17:1;;;;;;:24;;1131:4;-1:-1:-1;;1111:24:1;;;;;;;1758:46:10;;-1:-1:-1;;;;;;1758:46:10;-1:-1:-1;;;;;1758:46:10;;;;;;;;;1858:24;;;;;;;;1076:1347;;;;;;;;", + "deployedSourceMap": "1076:1347:10:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2275:145;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2275:145:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2275:145:10;;-1:-1:-1;2275:145:10;;-1:-1:-1;;;;;;;2275:145:10;;;;;-1:-1:-1;;;;;2275:145:10;;;;;;;;;;;;;;2127:185:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2127:185:1;-1:-1:-1;;;;;2127:185:1;;;;;;;;;;;;;;;;;;;;;;;2571:188;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2571:188:1;-1:-1:-1;;;;;2571:188:1;;;;;725:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;725:37:1;-1:-1:-1;;;;;725:37:1;;;;;1589:291;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1589:291:1;-1:-1:-1;;;;;1589:291:1;;;;;2275:145:10;2340:23;2382:31;:3;2404:8;2382:31;:21;:31;:::i;:::-;2375:38;2275:145;-1:-1:-1;;2275:145:10:o;2127:185:1:-;1261:10;2201:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2221:21:1;;:5;:21;;;;;;;;;;;:28;;-1:-1:-1;;2221:28:1;2245:4;2221:28;;;2260:30;;;2221:5;2260:30;-1:-1:-1;2303:4:1;2127:185;;;:::o;2571:188::-;1261:10;2646:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2666:21:1;;2690:5;2666:21;;;;;;;;;;;:29;;-1:-1:-1;;2666:29:1;;;2706:31;;;2690:5;2706:31;-1:-1:-1;2750:4:1;2571:188;;;:::o;725:37::-;;;;;;;;;;;;;;;;:::o;1589:291::-;1261:10;1660:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1688:22:1;;;;1680:66;;;;;-1:-1:-1;;;;;1680:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1757:42;;-1:-1:-1;;;;;1757:42:1;;;1778:10;;1757:42;;;;;-1:-1:-1;;;;;;1805:15:1;:5;:15;;;;;;;;;;;:22;;1823:4;-1:-1:-1;;1805:22:1;;;;;;;;1839:10;1833:17;;;;;;:25;;;;;;;1823:4;1589:291::o;18422:231:8:-;18508:23;18539:10;18598:8;18562:45;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;18562:45:8;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;18562:45:8;;;18552:56;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;18552:56:8;;;;;;;;;;;;18621:12;;:27;;;;;;;;;;;18552:56;;-1:-1:-1;;;;;;18621:12:8;;;;-1:-1:-1;18621:23:8;;-1:-1:-1;18621:27:8;;;;;263:2:-1;;-1:-1;18621:27:8;;;;;;;-1:-1:-1;18621:12:8;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;18621:27:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18621:27:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18621:27:8;;18422:231;-1:-1:-1;;;;18422:231:8:o", + "source": "pragma solidity 0.4.24;\n\n\n/**\nCOPYRIGHT 2018 Token, Inc.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\n@title Token Name Space Interface for Token, Inc. Smart Money System\n\n@author Ryan Tate , Sean Pollock \n\n@notice Contract uses generalized storage contract, `TokenIOStorage`, for\nupgradeability of interface contract.\n\n@dev In the event that the main contract becomes deprecated, the upgraded contract\nwill be set as the owner of this contract, and use this contract's storage to\nmaintain data consistency between contract.\n\n*/\n\nimport \"./Ownable.sol\";\nimport \"./TokenIOStorage.sol\";\nimport \"./TokenIOLib.sol\";\n\ncontract TokenIONameSpace is Ownable {\n\n /// @dev Set reference to TokenIOLib interface which proxies to TokenIOStorage\n using TokenIOLib for TokenIOLib.Data;\n TokenIOLib.Data lib;\n\n /**\n \t* @notice Constructor method for TokenIONameSpace contract\n \t* @param _storageContract address of TokenIOStorage contract\n \t*/\n \tconstructor(address _storageContract) public {\n \t\t\t/// @dev Set the storage contract for the interface\n \t\t\t/// @dev NOTE: This contract will be unable to use the storage constract until\n \t\t\t/// @dev contract address is authorized with the storage contract\n \t\t\t/// @dev Once authorized, Use the `setParams` method to set storage values\n \t\t\tlib.Storage = TokenIOStorage(_storageContract);\n\n \t\t\t/// @dev set owner to contract initiator\n \t\t\towner[msg.sender] = true;\n \t}\n\n /**\n * @notice Returns the address of the contract associated with the currency symbol\n * @notice This method may be deprecated or refactored to allow for multiple interfaces\n * @param currency string Currency symbol of the token (e.g. USDx, JYPx, GBPx)\n * @return {\"contractAddress\": \"Returns the token contract address associated with the currency\"}\n */\n function getTokenNameSpace(string currency) public view returns (address contractAddress) {\n return lib.getTokenNameSpace(currency);\n }\n\n}\n", + "sourcePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIONameSpace.sol", + "ast": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIONameSpace.sol", + "exportedSymbols": { + "TokenIONameSpace": [ + 4890 + ] + }, + "id": 4891, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4845, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:10" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 4846, + "nodeType": "ImportDirective", + "scope": 4891, + "sourceUnit": 185, + "src": "993:23:10", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 4847, + "nodeType": "ImportDirective", + "scope": 4891, + "sourceUnit": 5226, + "src": "1017:30:10", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 4848, + "nodeType": "ImportDirective", + "scope": 4891, + "sourceUnit": 4607, + "src": "1048:26:10", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 4849, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "1105:7:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 4850, + "nodeType": "InheritanceSpecifier", + "src": "1105:7:10" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 4890, + "linearizedBaseContracts": [ + 4890, + 184 + ], + "name": "TokenIONameSpace", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 4853, + "libraryName": { + "contractScope": null, + "id": 4851, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4606, + "src": "1209:10:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4606", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "1203:37:10", + "typeName": { + "contractScope": null, + "id": 4852, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1224:15:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 4855, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 4890, + "src": "1245:19:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 4854, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1245:15:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 4875, + "nodeType": "Block", + "src": "1459:429:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 4866, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4860, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4855, + "src": "1758:3:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4862, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1629, + "src": "1758:11:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4864, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4857, + "src": "1787:16:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4863, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5225, + "src": "1772:14:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5225_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 4865, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1772:32:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1758:46:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "id": 4867, + "nodeType": "ExpressionStatement", + "src": "1758:46:10" + }, + { + "expression": { + "argumentTypes": null, + "id": 4873, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 4868, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1858:5:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 4871, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4869, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "1864:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4870, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1864:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1858:17:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4872, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1878:4:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1858:24:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4874, + "nodeType": "ExpressionStatement", + "src": "1858:24:10" + } + ] + }, + "documentation": "@notice Constructor method for TokenIONameSpace contract\n@param _storageContract address of TokenIOStorage contract", + "id": 4876, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4858, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4857, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 4876, + "src": "1426:24:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4856, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1426:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1425:26:10" + }, + "payable": false, + "returnParameters": { + "id": 4859, + "nodeType": "ParameterList", + "parameters": [], + "src": "1459:0:10" + }, + "scope": 4890, + "src": "1414:474:10", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4888, + "nodeType": "Block", + "src": "2365:55:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4885, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4878, + "src": "2404:8:10", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 4883, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4855, + "src": "2382:3:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4884, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenNameSpace", + "nodeType": "MemberAccess", + "referencedDeclaration": 2366, + "src": "2382:21:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$returns$_t_address_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) view returns (address)" + } + }, + "id": 4886, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2382:31:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 4882, + "id": 4887, + "nodeType": "Return", + "src": "2375:38:10" + } + ] + }, + "documentation": "@notice Returns the address of the contract associated with the currency symbol\n@notice This method may be deprecated or refactored to allow for multiple interfaces\n@param currency string Currency symbol of the token (e.g. USDx, JYPx, GBPx)\n@return {\"contractAddress\": \"Returns the token contract address associated with the currency\"}", + "id": 4889, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getTokenNameSpace", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4879, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4878, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 4889, + "src": "2302:15:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 4877, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2302:6:10", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2301:17:10" + }, + "payable": false, + "returnParameters": { + "id": 4882, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4881, + "name": "contractAddress", + "nodeType": "VariableDeclaration", + "scope": 4889, + "src": "2340:23:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4880, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2340:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2339:25:10" + }, + "scope": 4890, + "src": "2275:145:10", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 4891, + "src": "1076:1347:10" + } + ], + "src": "0:2424:10" + }, + "legacyAST": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIONameSpace.sol", + "exportedSymbols": { + "TokenIONameSpace": [ + 4890 + ] + }, + "id": 4891, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4845, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:10" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 4846, + "nodeType": "ImportDirective", + "scope": 4891, + "sourceUnit": 185, + "src": "993:23:10", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "file": "./TokenIOStorage.sol", + "id": 4847, + "nodeType": "ImportDirective", + "scope": 4891, + "sourceUnit": 5226, + "src": "1017:30:10", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOLib.sol", + "file": "./TokenIOLib.sol", + "id": 4848, + "nodeType": "ImportDirective", + "scope": 4891, + "sourceUnit": 4607, + "src": "1048:26:10", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 4849, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "1105:7:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 4850, + "nodeType": "InheritanceSpecifier", + "src": "1105:7:10" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 4890, + "linearizedBaseContracts": [ + 4890, + 184 + ], + "name": "TokenIONameSpace", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 4853, + "libraryName": { + "contractScope": null, + "id": 4851, + "name": "TokenIOLib", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4606, + "src": "1209:10:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOLib_$4606", + "typeString": "library TokenIOLib" + } + }, + "nodeType": "UsingForDirective", + "src": "1203:37:10", + "typeName": { + "contractScope": null, + "id": 4852, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1224:15:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + } + }, + { + "constant": false, + "id": 4855, + "name": "lib", + "nodeType": "VariableDeclaration", + "scope": 4890, + "src": "1245:19:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data" + }, + "typeName": { + "contractScope": null, + "id": 4854, + "name": "TokenIOLib.Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1630, + "src": "1245:15:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage_ptr", + "typeString": "struct TokenIOLib.Data" + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 4875, + "nodeType": "Block", + "src": "1459:429:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 4866, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4860, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4855, + "src": "1758:3:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4862, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "Storage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1629, + "src": "1758:11:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4864, + "name": "_storageContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4857, + "src": "1787:16:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4863, + "name": "TokenIOStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5225, + "src": "1772:14:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TokenIOStorage_$5225_$", + "typeString": "type(contract TokenIOStorage)" + } + }, + "id": 4865, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1772:32:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "src": "1758:46:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenIOStorage_$5225", + "typeString": "contract TokenIOStorage" + } + }, + "id": 4867, + "nodeType": "ExpressionStatement", + "src": "1758:46:10" + }, + { + "expression": { + "argumentTypes": null, + "id": 4873, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 4868, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "1858:5:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 4871, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4869, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "1864:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4870, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1864:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1858:17:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4872, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1878:4:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1858:24:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4874, + "nodeType": "ExpressionStatement", + "src": "1858:24:10" + } + ] + }, + "documentation": "@notice Constructor method for TokenIONameSpace contract\n@param _storageContract address of TokenIOStorage contract", + "id": 4876, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4858, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4857, + "name": "_storageContract", + "nodeType": "VariableDeclaration", + "scope": 4876, + "src": "1426:24:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4856, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1426:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1425:26:10" + }, + "payable": false, + "returnParameters": { + "id": 4859, + "nodeType": "ParameterList", + "parameters": [], + "src": "1459:0:10" + }, + "scope": 4890, + "src": "1414:474:10", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4888, + "nodeType": "Block", + "src": "2365:55:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4885, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4878, + "src": "2404:8:10", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 4883, + "name": "lib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4855, + "src": "2382:3:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Data_$1630_storage", + "typeString": "struct TokenIOLib.Data storage ref" + } + }, + "id": 4884, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "getTokenNameSpace", + "nodeType": "MemberAccess", + "referencedDeclaration": 2366, + "src": "2382:21:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Data_$1630_storage_ptr_$_t_string_memory_ptr_$returns$_t_address_$bound_to$_t_struct$_Data_$1630_storage_ptr_$", + "typeString": "function (struct TokenIOLib.Data storage pointer,string memory) view returns (address)" + } + }, + "id": 4886, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2382:31:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 4882, + "id": 4887, + "nodeType": "Return", + "src": "2375:38:10" + } + ] + }, + "documentation": "@notice Returns the address of the contract associated with the currency symbol\n@notice This method may be deprecated or refactored to allow for multiple interfaces\n@param currency string Currency symbol of the token (e.g. USDx, JYPx, GBPx)\n@return {\"contractAddress\": \"Returns the token contract address associated with the currency\"}", + "id": 4889, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getTokenNameSpace", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4879, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4878, + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 4889, + "src": "2302:15:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 4877, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2302:6:10", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2301:17:10" + }, + "payable": false, + "returnParameters": { + "id": 4882, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4881, + "name": "contractAddress", + "nodeType": "VariableDeclaration", + "scope": 4889, + "src": "2340:23:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4880, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2340:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2339:25:10" + }, + "scope": 4890, + "src": "2275:145:10", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 4891, + "src": "1076:1347:10" + } + ], + "src": "0:2424:10" + }, + "compiler": { + "name": "solc", + "version": "0.4.24+commit.e67f0147.Emscripten.clang" + }, + "networks": {}, + "schemaVersion": "2.0.1", + "updatedAt": "2018-10-22T22:56:14.042Z" +} \ No newline at end of file diff --git a/deployed/mainnet-v1.0.1/TokenIOStorage.json b/deployed/mainnet-v1.0.1/TokenIOStorage.json new file mode 100644 index 0000000..8ce7044 --- /dev/null +++ b/deployed/mainnet-v1.0.1/TokenIOStorage.json @@ -0,0 +1,8280 @@ +{ + "contractName": "TokenIOStorage", + "abi": [ + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "allowOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "allowedAddress", + "type": "address" + } + ], + "name": "removeOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "", + "type": "address" + } + ], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "AllowOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "RevokeOwnership", + "type": "event" + }, + { + "constant": false, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + }, + { + "name": "_value", + "type": "address" + } + ], + "name": "setAddress", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "setUint", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + }, + { + "name": "_value", + "type": "string" + } + ], + "name": "setString", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + }, + { + "name": "_value", + "type": "bytes" + } + ], + "name": "setBytes", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + }, + { + "name": "_value", + "type": "bool" + } + ], + "name": "setBool", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + }, + { + "name": "_value", + "type": "int256" + } + ], + "name": "setInt", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + } + ], + "name": "deleteAddress", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + } + ], + "name": "deleteUint", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + } + ], + "name": "deleteString", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + } + ], + "name": "deleteBytes", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + } + ], + "name": "deleteBool", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + } + ], + "name": "deleteInt", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + } + ], + "name": "getAddress", + "outputs": [ + { + "name": "_value", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + } + ], + "name": "getUint", + "outputs": [ + { + "name": "_value", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + } + ], + "name": "getString", + "outputs": [ + { + "name": "_value", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + } + ], + "name": "getBytes", + "outputs": [ + { + "name": "_value", + "type": "bytes" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + } + ], + "name": "getBool", + "outputs": [ + { + "name": "_value", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + } + ], + "name": "getInt", + "outputs": [ + { + "name": "_value", + "type": "int256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50336000908152602081905260409020805460ff1990811660019081179091161790556110b2806100426000396000f3006080604052600436106101275763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630e14a376811461012c57806321f8a721146101585780632c62ff2d1461018c5780632e28d084146101a45780633e49bed0146102025780634bbc142c1461021d578063616b59f61461023e578063666a342714610256578063666e1b39146102775780636e899550146102985780637ae1cfca146102f65780638c1600951461030e578063986e791a14610326578063abfdcced146103b3578063bd02d0f5146103d0578063c031a180146103fa578063ca446dd914610412578063dc97d96214610436578063e2a4853a1461044e578063e2b202bf14610469578063f2fde38b14610481578063f6bb3cc4146104a2575b600080fd5b34801561013857600080fd5b506101446004356104ba565b604080519115158252519081900360200190f35b34801561016457600080fd5b50610170600435610554565b60408051600160a060020a039092168252519081900360200190f35b34801561019857600080fd5b5061014460043561056f565b3480156101b057600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526101449583359536956044949193909101919081908401838280828437509497506105f69650505050505050565b34801561020e57600080fd5b5061014460043560243561068a565b34801561022957600080fd5b50610144600160a060020a036004351661070b565b34801561024a57600080fd5b506101446004356107c7565b34801561026257600080fd5b50610144600160a060020a0360043516610851565b34801561028357600080fd5b50610144600160a060020a036004351661090a565b3480156102a457600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261014495833595369560449491939091019190819084018382808284375094975061091f9650505050505050565b34801561030257600080fd5b506101446004356109a9565b34801561031a57600080fd5b506101446004356109be565b34801561033257600080fd5b5061033e600435610a3e565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610378578181015183820152602001610360565b50505050905090810190601f1680156103a55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103bf57600080fd5b506101446004356024351515610add565b3480156103dc57600080fd5b506103e8600435610b6c565b60408051918252519081900360200190f35b34801561040657600080fd5b5061033e600435610b7e565b34801561041e57600080fd5b50610144600435600160a060020a0360243516610be8565b34801561044257600080fd5b506103e8600435610c92565b34801561045a57600080fd5b50610144600435602435610ca4565b34801561047557600080fd5b50610144600435610d25565b34801561048d57600080fd5b50610144600160a060020a0360043516610da8565b3480156104ae57600080fd5b50610144600435610ee2565b3360009081526020819052604081205460ff161515610525576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b506000908152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff19169055600190565b600090815260036020526040902054600160a060020a031690565b3360009081526020819052604081205460ff1615156105da576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b506000908152600560205260409020805460ff19169055600190565b3360009081526020819052604081205460ff161515610661576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b6000838152600460209081526040909120835161068092850190610f64565b5060019392505050565b3360009081526020819052604081205460ff1615156106f5576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b5060009182526006602052604090912055600190565b3360009081526020819052604081205460ff161515610776576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b3360009081526020819052604081205460ff161515610832576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b600082815260046020526040812061084991610fe2565b506001919050565b3360009081526020819052604081205460ff1615156108bc576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b3360009081526020819052604081205460ff16151561098a576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b6000838152600260209081526040909120835161068092850190610f64565b60009081526005602052604090205460ff1690565b3360009081526020819052604081205460ff161515610a29576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b50600090815260066020526040812055600190565b600081815260026020818152604092839020805484516000196001831615610100020190911693909304601f81018390048302840183019094528383526060939091830182828015610ad15780601f10610aa657610100808354040283529160200191610ad1565b820191906000526020600020905b815481529060010190602001808311610ab457829003601f168201915b50505050509050919050565b3360009081526020819052604081205460ff161515610b48576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b50600091825260056020526040909120805460ff1916911515919091179055600190565b60009081526001602052604090205490565b60008181526004602090815260409182902080548351601f6002610100600185161502600019019093169290920491820184900484028101840190945280845260609392830182828015610ad15780601f10610aa657610100808354040283529160200191610ad1565b3360009081526020819052604081205460ff161515610c53576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b5060008281526003602052604090208054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116179055600192915050565b60009081526006602052604090205490565b3360009081526020819052604081205460ff161515610d0f576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b5060009182526001602081905260409092205590565b3360009081526020819052604081205460ff161515610d90576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b50600090815260016020819052604082209190915590565b3360009081526020819052604081205460ff161515610e13576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b600160a060020a0382161515610e73576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b3360009081526020819052604081205460ff161515610f4d576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b600082815260026020526040812061084991610fe2565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610fa557805160ff1916838001178555610fd2565b82800160010185558215610fd2579182015b82811115610fd2578251825591602001919060010190610fb7565b50610fde929150611029565b5090565b50805460018160011615610100020316600290046000825580601f106110085750611026565b601f0160209004906000526020600020908101906110269190611029565b50565b61104391905b80821115610fde576000815560010161102f565b90560020616c6c6f7765642062792074686520636f6e74726163742e000000000000004572726f723a205472616e73616374696f6e2073656e646572206973206e6f74a165627a7a72305820056cfbd62230040e00d890ea4ea35df860cfed498efc9f987cffb80ffc91f0c50029", + "deployedBytecode": "0x6080604052600436106101275763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630e14a376811461012c57806321f8a721146101585780632c62ff2d1461018c5780632e28d084146101a45780633e49bed0146102025780634bbc142c1461021d578063616b59f61461023e578063666a342714610256578063666e1b39146102775780636e899550146102985780637ae1cfca146102f65780638c1600951461030e578063986e791a14610326578063abfdcced146103b3578063bd02d0f5146103d0578063c031a180146103fa578063ca446dd914610412578063dc97d96214610436578063e2a4853a1461044e578063e2b202bf14610469578063f2fde38b14610481578063f6bb3cc4146104a2575b600080fd5b34801561013857600080fd5b506101446004356104ba565b604080519115158252519081900360200190f35b34801561016457600080fd5b50610170600435610554565b60408051600160a060020a039092168252519081900360200190f35b34801561019857600080fd5b5061014460043561056f565b3480156101b057600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526101449583359536956044949193909101919081908401838280828437509497506105f69650505050505050565b34801561020e57600080fd5b5061014460043560243561068a565b34801561022957600080fd5b50610144600160a060020a036004351661070b565b34801561024a57600080fd5b506101446004356107c7565b34801561026257600080fd5b50610144600160a060020a0360043516610851565b34801561028357600080fd5b50610144600160a060020a036004351661090a565b3480156102a457600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261014495833595369560449491939091019190819084018382808284375094975061091f9650505050505050565b34801561030257600080fd5b506101446004356109a9565b34801561031a57600080fd5b506101446004356109be565b34801561033257600080fd5b5061033e600435610a3e565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610378578181015183820152602001610360565b50505050905090810190601f1680156103a55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103bf57600080fd5b506101446004356024351515610add565b3480156103dc57600080fd5b506103e8600435610b6c565b60408051918252519081900360200190f35b34801561040657600080fd5b5061033e600435610b7e565b34801561041e57600080fd5b50610144600435600160a060020a0360243516610be8565b34801561044257600080fd5b506103e8600435610c92565b34801561045a57600080fd5b50610144600435602435610ca4565b34801561047557600080fd5b50610144600435610d25565b34801561048d57600080fd5b50610144600160a060020a0360043516610da8565b3480156104ae57600080fd5b50610144600435610ee2565b3360009081526020819052604081205460ff161515610525576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b506000908152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff19169055600190565b600090815260036020526040902054600160a060020a031690565b3360009081526020819052604081205460ff1615156105da576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b506000908152600560205260409020805460ff19169055600190565b3360009081526020819052604081205460ff161515610661576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b6000838152600460209081526040909120835161068092850190610f64565b5060019392505050565b3360009081526020819052604081205460ff1615156106f5576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b5060009182526006602052604090912055600190565b3360009081526020819052604081205460ff161515610776576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19166001179055517f1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c59190a2506001919050565b3360009081526020819052604081205460ff161515610832576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b600082815260046020526040812061084991610fe2565b506001919050565b3360009081526020819052604081205460ff1615156108bc576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b600160a060020a038216600081815260208190526040808220805460ff19169055517f2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad989190a2506001919050565b60006020819052908152604090205460ff1681565b3360009081526020819052604081205460ff16151561098a576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b6000838152600260209081526040909120835161068092850190610f64565b60009081526005602052604090205460ff1690565b3360009081526020819052604081205460ff161515610a29576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b50600090815260066020526040812055600190565b600081815260026020818152604092839020805484516000196001831615610100020190911693909304601f81018390048302840183019094528383526060939091830182828015610ad15780601f10610aa657610100808354040283529160200191610ad1565b820191906000526020600020905b815481529060010190602001808311610ab457829003601f168201915b50505050509050919050565b3360009081526020819052604081205460ff161515610b48576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b50600091825260056020526040909120805460ff1916911515919091179055600190565b60009081526001602052604090205490565b60008181526004602090815260409182902080548351601f6002610100600185161502600019019093169290920491820184900484028101840190945280845260609392830182828015610ad15780601f10610aa657610100808354040283529160200191610ad1565b3360009081526020819052604081205460ff161515610c53576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b5060008281526003602052604090208054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116179055600192915050565b60009081526006602052604090205490565b3360009081526020819052604081205460ff161515610d0f576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b5060009182526001602081905260409092205590565b3360009081526020819052604081205460ff161515610d90576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b50600090815260016020819052604082209190915590565b3360009081526020819052604081205460ff161515610e13576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b600160a060020a0382161515610e73576040805160e560020a62461bcd02815260206004820152601f60248201527f4572726f723a206e65774f776e65722063616e6e6f74206265206e756c6c2100604482015290519081900360640190fd5b604051600160a060020a0383169033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600160a060020a03166000908152602081905260408082208054600160ff199182168117909255338452919092208054909116905590565b3360009081526020819052604081205460ff161515610f4d576040805160e560020a62461bcd02815260206004820152603960248201526000805160206110678339815191526044820152600080516020611047833981519152606482015290519081900360840190fd5b600082815260026020526040812061084991610fe2565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610fa557805160ff1916838001178555610fd2565b82800160010185558215610fd2579182015b82811115610fd2578251825591602001919060010190610fb7565b50610fde929150611029565b5090565b50805460018160011615610100020316600290046000825580601f106110085750611026565b601f0160209004906000526020600020908101906110269190611029565b50565b61104391905b80821115610fde576000815560010161102f565b90560020616c6c6f7765642062792074686520636f6e74726163742e000000000000004572726f723a205472616e73616374696f6e2073656e646572206973206e6f74a165627a7a72305820056cfbd62230040e00d890ea4ea35df860cfed498efc9f987cffb80ffc91f0c50029", + "sourceMap": "1972:8029:11:-;;;2669:207;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1117:10:1;1111:5;:17;;;;;;;;;;:24;;-1:-1:-1;;1111:24:1;;;1131:4;1111:24;;;2845::11;;;;;;1972:8029;;;;;;", + "deployedSourceMap": "1972:8029:11:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5901:142;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5901:142:11;;;;;;;;;;;;;;;;;;;;;;;8203:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8203:115:11;;;;;;;;;-1:-1:-1;;;;;8203:115:11;;;;;;;;;;;;;;7428:136;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7428:136:11;;;;;4517:151;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4517:151:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4517:151:11;;-1:-1:-1;4517:151:11;;-1:-1:-1;;;;;;;4517:151:11;5384:145;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5384:145:11;;;;;;;2127:185:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2127:185:1;-1:-1:-1;;;;;2127:185:1;;;;;7048:138:11;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7048:138:11;;;;;2571:188:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2571:188:1;-1:-1:-1;;;;;2571:188:1;;;;;725:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;725:37:1;-1:-1:-1;;;;;725:37:1;;;;;4076:154:11;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4076:154:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4076:154:11;;-1:-1:-1;4076:154:11;;-1:-1:-1;;;;;;;4076:154:11;9563:106;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9563:106:11;;;;;7805:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7805:134:11;;;;;8884:112;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8884:112:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;8884:112:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4953:148;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4953:148:11;;;;;;;;;8546:106;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8546:106:11;;;;;;;;;;;;;;;;;;;;;9226:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9226:109:11;;;;;3197:157;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3197:157:11;;;-1:-1:-1;;;;;3197:157:11;;;;;9895:103;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9895:103:11;;;;;3639:148;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3639:148:11;;;;;;;6285:136;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6285:136:11;;;;;1589:291:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1589:291:1;-1:-1:-1;;;;;1589:291:1;;;;;6665:140:11;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6665:140:11;;;;;5901:142;1261:10:1;5964:12:11;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;5995:20:11;;;;:14;:20;;;;;5988:27;;-1:-1:-1;;5988:27:11;;;-1:-1:-1;;5901:142:11:o;8203:115::-;8258:14;8291:20;;;:14;:20;;;;;;-1:-1:-1;;;;;8291:20:11;;8203:115::o;7428:136::-;1261:10:1;7488:12:11;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;7519:17:11;;;;:11;:17;;;;;7512:24;;-1:-1:-1;;7512:24:11;;;-1:-1:-1;;7428:136:11:o;4517:151::-;1261:10:1;4589:12:11;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;4613:18:11;;;;:12;:18;;;;;;;;:27;;;;;;;;:::i;:::-;-1:-1:-1;4657:4:11;;4517:151;-1:-1:-1;;;4517:151:11:o;5384:145::-;1261:10:1;5452:12:11;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;5476:16:11;;;;:10;:16;;;;;;:25;5518:4;;5384:145::o;2127:185:1:-;1261:10;2201:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;2221:21:1;;:5;:21;;;;;;;;;;;:28;;-1:-1:-1;;2221:28:1;2245:4;2221:28;;;2260:30;;;2221:5;2260:30;-1:-1:-1;2303:4:1;2127:185;;;:::o;7048:138:11:-;1261:10:1;7109:12:11;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;7140:18:11;;;;:12;:18;;;;;7133:25;;;:::i;:::-;-1:-1:-1;7175:4:11;7048:138;;;:::o;2571:188:1:-;1261:10;2646:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;2666:21:1;;2690:5;2666:21;;;;;;;;;;;:29;;-1:-1:-1;;2666:29:1;;;2706:31;;;2690:5;2706:31;-1:-1:-1;2750:4:1;2571:188;;;:::o;725:37::-;;;;;;;;;;;;;;;;:::o;4076:154:11:-;1261:10:1;4150:12:11;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;4174:19:11;;;;:13;:19;;;;;;;;:28;;;;;;;;:::i;9563:106::-;9615:11;9645:17;;;:11;:17;;;;;;;;;9563:106::o;7805:134::-;1261:10:1;7864:12:11;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;7895:16:11;;;;:10;:16;;;;;7888:23;7928:4;;7805:134::o;8884:112::-;8970:19;;;;:13;:19;;;;;;;;;8963:26;;;;-1:-1:-1;;8963:26:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8938:13;;8970:19;;8963:26;;8970:19;8963:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8884:112;;;:::o;4953:148::-;1261:10:1;5023:12:11;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;5047:17:11;;;;:11;:17;;;;;;:26;;-1:-1:-1;;5047:26:11;;;;;;;;;;-1:-1:-1;;4953:148:11:o;8546:106::-;8598:11;8628:17;;;:11;:17;;;;;;;8546:106::o;9226:109::-;9310:18;;;;:12;:18;;;;;;;;;9303:25;;;;;;;;;;;;-1:-1:-1;;9303:25:11;;;;;;;;;;;;;;;;;;;;;;;;;;9279:12;;9303:25;;;9310:18;9303:25;;;;;;;;;;;;;;;;;;;;;;;;3197:157;1261:10:1;3273:12:11;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;3297:20:11;;;;:14;:20;;;;;:29;;-1:-1:-1;;;;;3297:29:11;;-1:-1:-1;;3297:29:11;;;;;;;3197:157;;;;:::o;9895:103::-;9946:10;9975:16;;;:10;:16;;;;;;;9895:103::o;3639:148::-;1261:10:1;3709:12:11;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;3733:17:11;;;;:11;:17;;;;;;;;:26;:11;3639:148::o;6285:136::-;1261:10:1;6345:12:11;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;6376:17:11;;;;:11;:17;;;;;;;6369:24;;;;6376:11;6285:136::o;1589:291:1:-;1261:10;1660:12;1255:17;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;1688:22:1;;;;1680:66;;;;;-1:-1:-1;;;;;1680:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1757:42;;-1:-1:-1;;;;;1757:42:1;;;1778:10;;1757:42;;;;;-1:-1:-1;;;;;;1805:15:1;:5;:15;;;;;;;;;;;:22;;1823:4;-1:-1:-1;;1805:22:1;;;;;;;;1839:10;1833:17;;;;;;:25;;;;;;;1823:4;1589:291::o;6665:140:11:-;1261:10:1;6727:12:11;1255:17:1;;;;;;;;;;;;;1247:87;;;;;;;-1:-1:-1;;;;;1247:87:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;-1:-1:-1;;;;;;;;;;;1247:87:1;;;;;;;;;;;;;;;6758:19:11;;;;:13;:19;;;;;6751:26;;;:::i;1972:8029::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1972:8029:11;;;-1:-1:-1;1972:8029:11;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o", + "source": "pragma solidity 0.4.24;\n\nimport \"./Ownable.sol\";\n\n/**\n\nCOPYRIGHT 2018 Token, Inc.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n@title TokenIOStorage - Serves as derived contract for TokenIO contract and\nis used to upgrade interfaces in the event of deprecating the main contract.\n\n@author Ryan Tate , Sean Pollock \n\n@notice Storage contract\n\n@dev In the event that the main contract becomes deprecated, the upgraded contract\nwill be set as the owner of this contract, and use this contract's storage to\nmaintain data consistency between contract.\n\n@notice NOTE: This contract is based on the RocketPool Storage Contract,\nfound here: https://github.com/rocket-pool/rocketpool/blob/master/contracts/RocketStorage.sol\nAnd this medium article: https://medium.com/rocket-pool/upgradable-solidity-contract-design-54789205276d\n\nChanges:\n - setting primitive mapping view to internal;\n - setting method views to public;\n\n @dev NOTE: When deprecating the main TokenIO contract, the upgraded contract\n must take ownership of the TokenIO contract, it will require using the public methods\n to update changes to the underlying data. The updated contract must use a\n standard call to original TokenIO contract such that the request is made from\n the upgraded contract and not the transaction origin (tx.origin) of the signing\n account.\n\n\n @dev NOTE: The reasoning for using the storage contract is to abstract the interface\n from the data of the contract on chain, limiting the need to migrate data to\n new contracts.\n\n*/\ncontract TokenIOStorage is Ownable {\n\n\n /// @dev mapping for Primitive Data Types;\n\t\t/// @notice primitive data mappings have `internal` view;\n\t\t/// @dev only the derived contract can use the internal methods;\n\t\t/// @dev key == `keccak256(param1, param2...)`\n\t\t/// @dev Nested mapping can be achieved using multiple params in keccak256 hash;\n mapping(bytes32 => uint256) internal uIntStorage;\n mapping(bytes32 => string) internal stringStorage;\n mapping(bytes32 => address) internal addressStorage;\n mapping(bytes32 => bytes) internal bytesStorage;\n mapping(bytes32 => bool) internal boolStorage;\n mapping(bytes32 => int256) internal intStorage;\n\n constructor() public {\n\t\t\t\t/// @notice owner is set to msg.sender by default\n\t\t\t\t/// @dev consider removing in favor of setting ownership in inherited\n\t\t\t\t/// contract\n owner[msg.sender] = true;\n }\n\n /// @dev Set Key Methods\n\n /**\n * @notice Set value for Address associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @param _value The Address value to be set\n * @return { \"success\" : \"Returns true when successfully called from another contract\" }\n */\n function setAddress(bytes32 _key, address _value) public onlyOwner returns (bool success) {\n addressStorage[_key] = _value;\n return true;\n }\n\n /**\n * @notice Set value for Uint associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @param _value The Uint value to be set\n * @return { \"success\" : \"Returns true when successfully called from another contract\" }\n */\n function setUint(bytes32 _key, uint _value) public onlyOwner returns (bool success) {\n uIntStorage[_key] = _value;\n return true;\n }\n\n /**\n * @notice Set value for String associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @param _value The String value to be set\n * @return { \"success\" : \"Returns true when successfully called from another contract\" }\n */\n function setString(bytes32 _key, string _value) public onlyOwner returns (bool success) {\n stringStorage[_key] = _value;\n return true;\n }\n\n /**\n * @notice Set value for Bytes associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @param _value The Bytes value to be set\n * @return { \"success\" : \"Returns true when successfully called from another contract\" }\n */\n function setBytes(bytes32 _key, bytes _value) public onlyOwner returns (bool success) {\n bytesStorage[_key] = _value;\n return true;\n }\n\n /**\n * @notice Set value for Bool associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @param _value The Bool value to be set\n * @return { \"success\" : \"Returns true when successfully called from another contract\" }\n */\n function setBool(bytes32 _key, bool _value) public onlyOwner returns (bool success) {\n boolStorage[_key] = _value;\n return true;\n }\n\n /**\n * @notice Set value for Int associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @param _value The Int value to be set\n * @return { \"success\" : \"Returns true when successfully called from another contract\" }\n */\n function setInt(bytes32 _key, int _value) public onlyOwner returns (bool success) {\n intStorage[_key] = _value;\n return true;\n }\n\n /// @dev Delete Key Methods\n\t\t/// @dev delete methods may be unnecessary; Use set methods to set values\n\t\t/// to default?\n\n /**\n * @notice Delete value for Address associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @return { \"success\" : \"Returns true when successfully called from another contract\" }\n */\n function deleteAddress(bytes32 _key) public onlyOwner returns (bool success) {\n delete addressStorage[_key];\n return true;\n }\n\n /**\n * @notice Delete value for Uint associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @return { \"success\" : \"Returns true when successfully called from another contract\" }\n */\n function deleteUint(bytes32 _key) public onlyOwner returns (bool success) {\n delete uIntStorage[_key];\n return true;\n }\n\n /**\n * @notice Delete value for String associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @return { \"success\" : \"Returns true when successfully called from another contract\" }\n */\n function deleteString(bytes32 _key) public onlyOwner returns (bool success) {\n delete stringStorage[_key];\n return true;\n }\n\n /**\n * @notice Delete value for Bytes associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @return { \"success\" : \"Returns true when successfully called from another contract\" }\n */\n function deleteBytes(bytes32 _key) public onlyOwner returns (bool success) {\n delete bytesStorage[_key];\n return true;\n }\n\n /**\n * @notice Delete value for Bool associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @return { \"success\" : \"Returns true when successfully called from another contract\" }\n */\n function deleteBool(bytes32 _key) public onlyOwner returns (bool success) {\n delete boolStorage[_key];\n return true;\n }\n\n /**\n * @notice Delete value for Int associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @return { \"success\" : \"Returns true when successfully called from another contract\" }\n */\n function deleteInt(bytes32 _key) public onlyOwner returns (bool success) {\n delete intStorage[_key];\n return true;\n }\n\n /// @dev Get Key Methods\n\n /**\n * @notice Get value for Address associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @return { \"_value\" : \"Returns the Address value associated with the id key\" }\n */\n function getAddress(bytes32 _key) public view returns (address _value) {\n return addressStorage[_key];\n }\n\n /**\n * @notice Get value for Uint associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @return { \"_value\" : \"Returns the Uint value associated with the id key\" }\n */\n function getUint(bytes32 _key) public view returns (uint _value) {\n return uIntStorage[_key];\n }\n\n /**\n * @notice Get value for String associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @return { \"_value\" : \"Returns the String value associated with the id key\" }\n */\n function getString(bytes32 _key) public view returns (string _value) {\n return stringStorage[_key];\n }\n\n /**\n * @notice Get value for Bytes associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @return { \"_value\" : \"Returns the Bytes value associated with the id key\" }\n */\n function getBytes(bytes32 _key) public view returns (bytes _value) {\n return bytesStorage[_key];\n }\n\n /**\n * @notice Get value for Bool associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @return { \"_value\" : \"Returns the Bool value associated with the id key\" }\n */\n function getBool(bytes32 _key) public view returns (bool _value) {\n return boolStorage[_key];\n }\n\n /**\n * @notice Get value for Int associated with bytes32 id key\n * @param _key Pointer identifier for value in storage\n * @return { \"_value\" : \"Returns the Int value associated with the id key\" }\n */\n function getInt(bytes32 _key) public view returns (int _value) {\n return intStorage[_key];\n }\n\n}\n", + "sourcePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "ast": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "exportedSymbols": { + "TokenIOStorage": [ + 5225 + ] + }, + "id": 5226, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4892, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:11" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 4893, + "nodeType": "ImportDirective", + "scope": 5226, + "sourceUnit": 185, + "src": "25:23:11", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 4894, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "1999:7:11", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 4895, + "nodeType": "InheritanceSpecifier", + "src": "1999:7:11" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": "COPYRIGHT 2018 Token, Inc.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n@title TokenIOStorage - Serves as derived contract for TokenIO contract and\nis used to upgrade interfaces in the event of deprecating the main contract.\n@author Ryan Tate , Sean Pollock \n@notice Storage contract\n@dev In the event that the main contract becomes deprecated, the upgraded contract\nwill be set as the owner of this contract, and use this contract's storage to\nmaintain data consistency between contract.\n@notice NOTE: This contract is based on the RocketPool Storage Contract,\nfound here: https://github.com/rocket-pool/rocketpool/blob/master/contracts/RocketStorage.sol\nAnd this medium article: https://medium.com/rocket-pool/upgradable-solidity-contract-design-54789205276d\nChanges:\n- setting primitive mapping view to internal;\n- setting method views to public;\n@dev NOTE: When deprecating the main TokenIO contract, the upgraded contract\nmust take ownership of the TokenIO contract, it will require using the public methods\nto update changes to the underlying data. The updated contract must use a\nstandard call to original TokenIO contract such that the request is made from\nthe upgraded contract and not the transaction origin (tx.origin) of the signing\naccount.\n@dev NOTE: The reasoning for using the storage contract is to abstract the interface\nfrom the data of the contract on chain, limiting the need to migrate data to\nnew contracts.", + "fullyImplemented": true, + "id": 5225, + "linearizedBaseContracts": [ + 5225, + 184 + ], + "name": "TokenIOStorage", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 4899, + "name": "uIntStorage", + "nodeType": "VariableDeclaration", + "scope": 5225, + "src": "2321:51:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + }, + "typeName": { + "id": 4898, + "keyType": { + "id": 4896, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2329:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2321:27:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + }, + "valueType": { + "id": 4897, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2340:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4903, + "name": "stringStorage", + "nodeType": "VariableDeclaration", + "scope": 5225, + "src": "2378:53:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_string_storage_$", + "typeString": "mapping(bytes32 => string)" + }, + "typeName": { + "id": 4902, + "keyType": { + "id": 4900, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2386:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2378:26:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_string_storage_$", + "typeString": "mapping(bytes32 => string)" + }, + "valueType": { + "id": 4901, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2397:6:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4907, + "name": "addressStorage", + "nodeType": "VariableDeclaration", + "scope": 5225, + "src": "2437:54:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", + "typeString": "mapping(bytes32 => address)" + }, + "typeName": { + "id": 4906, + "keyType": { + "id": 4904, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2445:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2437:27:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", + "typeString": "mapping(bytes32 => address)" + }, + "valueType": { + "id": 4905, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2456:7:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4911, + "name": "bytesStorage", + "nodeType": "VariableDeclaration", + "scope": 5225, + "src": "2497:52:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes_storage_$", + "typeString": "mapping(bytes32 => bytes)" + }, + "typeName": { + "id": 4910, + "keyType": { + "id": 4908, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2505:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2497:25:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes_storage_$", + "typeString": "mapping(bytes32 => bytes)" + }, + "valueType": { + "id": 4909, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2516:5:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4915, + "name": "boolStorage", + "nodeType": "VariableDeclaration", + "scope": 5225, + "src": "2555:51:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", + "typeString": "mapping(bytes32 => bool)" + }, + "typeName": { + "id": 4914, + "keyType": { + "id": 4912, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2563:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2555:24:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", + "typeString": "mapping(bytes32 => bool)" + }, + "valueType": { + "id": 4913, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2574:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4919, + "name": "intStorage", + "nodeType": "VariableDeclaration", + "scope": 5225, + "src": "2612:50:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_int256_$", + "typeString": "mapping(bytes32 => int256)" + }, + "typeName": { + "id": 4918, + "keyType": { + "id": 4916, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2620:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2612:26:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_int256_$", + "typeString": "mapping(bytes32 => int256)" + }, + "valueType": { + "id": 4917, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "2631:6:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 4929, + "nodeType": "Block", + "src": "2690:186:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 4927, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 4922, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "2845:5:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 4925, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4923, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "2851:3:11", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4924, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2851:10:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2845:17:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4926, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2865:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "2845:24:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4928, + "nodeType": "ExpressionStatement", + "src": "2845:24:11" + } + ] + }, + "documentation": null, + "id": 4930, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4920, + "nodeType": "ParameterList", + "parameters": [], + "src": "2680:2:11" + }, + "payable": false, + "returnParameters": { + "id": 4921, + "nodeType": "ParameterList", + "parameters": [], + "src": "2690:0:11" + }, + "scope": 5225, + "src": "2669:207:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4949, + "nodeType": "Block", + "src": "3287:67:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 4945, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 4941, + "name": "addressStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4907, + "src": "3297:14:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", + "typeString": "mapping(bytes32 => address)" + } + }, + "id": 4943, + "indexExpression": { + "argumentTypes": null, + "id": 4942, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4932, + "src": "3312:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3297:20:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 4944, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4934, + "src": "3320:6:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "3297:29:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 4946, + "nodeType": "ExpressionStatement", + "src": "3297:29:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4947, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3343:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 4940, + "id": 4948, + "nodeType": "Return", + "src": "3336:11:11" + } + ] + }, + "documentation": "@notice Set value for Address associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@param _value The Address value to be set\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 4950, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 4937, + "modifierName": { + "argumentTypes": null, + "id": 4936, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "3254:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "3254:9:11" + } + ], + "name": "setAddress", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4935, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4932, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 4950, + "src": "3217:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4931, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3217:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4934, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 4950, + "src": "3231:14:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4933, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3231:7:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3216:30:11" + }, + "payable": false, + "returnParameters": { + "id": 4940, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4939, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 4950, + "src": "3273:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4938, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3273:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3272:14:11" + }, + "scope": 5225, + "src": "3197:157:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4969, + "nodeType": "Block", + "src": "3723:64:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 4965, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 4961, + "name": "uIntStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4899, + "src": "3733:11:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 4963, + "indexExpression": { + "argumentTypes": null, + "id": 4962, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4952, + "src": "3745:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3733:17:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 4964, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4954, + "src": "3753:6:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3733:26:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4966, + "nodeType": "ExpressionStatement", + "src": "3733:26:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4967, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3776:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 4960, + "id": 4968, + "nodeType": "Return", + "src": "3769:11:11" + } + ] + }, + "documentation": "@notice Set value for Uint associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@param _value The Uint value to be set\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 4970, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 4957, + "modifierName": { + "argumentTypes": null, + "id": 4956, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "3690:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "3690:9:11" + } + ], + "name": "setUint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4955, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4952, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 4970, + "src": "3656:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4951, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3656:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4954, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 4970, + "src": "3670:11:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4953, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3670:4:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3655:27:11" + }, + "payable": false, + "returnParameters": { + "id": 4960, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4959, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 4970, + "src": "3709:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4958, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3709:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3708:14:11" + }, + "scope": 5225, + "src": "3639:148:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4989, + "nodeType": "Block", + "src": "4164:66:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 4985, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 4981, + "name": "stringStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4903, + "src": "4174:13:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_string_storage_$", + "typeString": "mapping(bytes32 => string storage ref)" + } + }, + "id": 4983, + "indexExpression": { + "argumentTypes": null, + "id": 4982, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4972, + "src": "4188:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "4174:19:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 4984, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4974, + "src": "4196:6:11", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "src": "4174:28:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "id": 4986, + "nodeType": "ExpressionStatement", + "src": "4174:28:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4987, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4219:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 4980, + "id": 4988, + "nodeType": "Return", + "src": "4212:11:11" + } + ] + }, + "documentation": "@notice Set value for String associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@param _value The String value to be set\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 4990, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 4977, + "modifierName": { + "argumentTypes": null, + "id": 4976, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "4131:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "4131:9:11" + } + ], + "name": "setString", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4975, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4972, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 4990, + "src": "4095:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4971, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4095:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4974, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 4990, + "src": "4109:13:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 4973, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "4109:6:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4094:29:11" + }, + "payable": false, + "returnParameters": { + "id": 4980, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4979, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 4990, + "src": "4150:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4978, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4150:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4149:14:11" + }, + "scope": 5225, + "src": "4076:154:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5009, + "nodeType": "Block", + "src": "4603:65:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5005, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5001, + "name": "bytesStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4911, + "src": "4613:12:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes_storage_$", + "typeString": "mapping(bytes32 => bytes storage ref)" + } + }, + "id": 5003, + "indexExpression": { + "argumentTypes": null, + "id": 5002, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4992, + "src": "4626:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "4613:18:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage", + "typeString": "bytes storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 5004, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4994, + "src": "4634:6:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "src": "4613:27:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage", + "typeString": "bytes storage ref" + } + }, + "id": 5006, + "nodeType": "ExpressionStatement", + "src": "4613:27:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5007, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4657:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5000, + "id": 5008, + "nodeType": "Return", + "src": "4650:11:11" + } + ] + }, + "documentation": "@notice Set value for Bytes associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@param _value The Bytes value to be set\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5010, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 4997, + "modifierName": { + "argumentTypes": null, + "id": 4996, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "4570:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "4570:9:11" + } + ], + "name": "setBytes", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4995, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4992, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5010, + "src": "4535:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4991, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4535:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4994, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5010, + "src": "4549:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4993, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4549:5:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4534:28:11" + }, + "payable": false, + "returnParameters": { + "id": 5000, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4999, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5010, + "src": "4589:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4998, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4589:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4588:14:11" + }, + "scope": 5225, + "src": "4517:151:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5029, + "nodeType": "Block", + "src": "5037:64:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5025, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5021, + "name": "boolStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4915, + "src": "5047:11:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", + "typeString": "mapping(bytes32 => bool)" + } + }, + "id": 5023, + "indexExpression": { + "argumentTypes": null, + "id": 5022, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5012, + "src": "5059:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "5047:17:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 5024, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5014, + "src": "5067:6:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5047:26:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5026, + "nodeType": "ExpressionStatement", + "src": "5047:26:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5027, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5090:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5020, + "id": 5028, + "nodeType": "Return", + "src": "5083:11:11" + } + ] + }, + "documentation": "@notice Set value for Bool associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@param _value The Bool value to be set\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5030, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5017, + "modifierName": { + "argumentTypes": null, + "id": 5016, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "5004:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "5004:9:11" + } + ], + "name": "setBool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5015, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5012, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5030, + "src": "4970:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5011, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4970:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 5014, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5030, + "src": "4984:11:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5013, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4984:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4969:27:11" + }, + "payable": false, + "returnParameters": { + "id": 5020, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5019, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5030, + "src": "5023:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5018, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5023:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5022:14:11" + }, + "scope": 5225, + "src": "4953:148:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5049, + "nodeType": "Block", + "src": "5466:63:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5045, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5041, + "name": "intStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4919, + "src": "5476:10:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_int256_$", + "typeString": "mapping(bytes32 => int256)" + } + }, + "id": 5043, + "indexExpression": { + "argumentTypes": null, + "id": 5042, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5032, + "src": "5487:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "5476:16:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 5044, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5034, + "src": "5495:6:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "5476:25:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 5046, + "nodeType": "ExpressionStatement", + "src": "5476:25:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5047, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5518:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5040, + "id": 5048, + "nodeType": "Return", + "src": "5511:11:11" + } + ] + }, + "documentation": "@notice Set value for Int associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@param _value The Int value to be set\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5050, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5037, + "modifierName": { + "argumentTypes": null, + "id": 5036, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "5433:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "5433:9:11" + } + ], + "name": "setInt", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5035, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5032, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5050, + "src": "5400:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5031, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5400:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 5034, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5050, + "src": "5414:10:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 5033, + "name": "int", + "nodeType": "ElementaryTypeName", + "src": "5414:3:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5399:26:11" + }, + "payable": false, + "returnParameters": { + "id": 5040, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5039, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5050, + "src": "5452:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5038, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5452:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5451:14:11" + }, + "scope": 5225, + "src": "5384:145:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5066, + "nodeType": "Block", + "src": "5978:65:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5062, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "5988:27:11", + "subExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5059, + "name": "addressStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4907, + "src": "5995:14:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", + "typeString": "mapping(bytes32 => address)" + } + }, + "id": 5061, + "indexExpression": { + "argumentTypes": null, + "id": 5060, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5052, + "src": "6010:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "5995:20:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5063, + "nodeType": "ExpressionStatement", + "src": "5988:27:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5064, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6032:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5058, + "id": 5065, + "nodeType": "Return", + "src": "6025:11:11" + } + ] + }, + "documentation": "@notice Delete value for Address associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5067, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5055, + "modifierName": { + "argumentTypes": null, + "id": 5054, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "5945:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "5945:9:11" + } + ], + "name": "deleteAddress", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5053, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5052, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5067, + "src": "5924:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5051, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5924:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5923:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5058, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5057, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5067, + "src": "5964:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5056, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5964:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5963:14:11" + }, + "scope": 5225, + "src": "5901:142:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5083, + "nodeType": "Block", + "src": "6359:62:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5079, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "6369:24:11", + "subExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5076, + "name": "uIntStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4899, + "src": "6376:11:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 5078, + "indexExpression": { + "argumentTypes": null, + "id": 5077, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5069, + "src": "6388:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "6376:17:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5080, + "nodeType": "ExpressionStatement", + "src": "6369:24:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5081, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6410:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5075, + "id": 5082, + "nodeType": "Return", + "src": "6403:11:11" + } + ] + }, + "documentation": "@notice Delete value for Uint associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5084, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5072, + "modifierName": { + "argumentTypes": null, + "id": 5071, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "6326:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "6326:9:11" + } + ], + "name": "deleteUint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5070, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5069, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5084, + "src": "6305:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5068, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6305:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6304:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5075, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5074, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5084, + "src": "6345:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5073, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6345:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6344:14:11" + }, + "scope": 5225, + "src": "6285:136:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5100, + "nodeType": "Block", + "src": "6741:64:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5096, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "6751:26:11", + "subExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5093, + "name": "stringStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4903, + "src": "6758:13:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_string_storage_$", + "typeString": "mapping(bytes32 => string storage ref)" + } + }, + "id": 5095, + "indexExpression": { + "argumentTypes": null, + "id": 5094, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5086, + "src": "6772:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "6758:19:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5097, + "nodeType": "ExpressionStatement", + "src": "6751:26:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5098, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6794:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5092, + "id": 5099, + "nodeType": "Return", + "src": "6787:11:11" + } + ] + }, + "documentation": "@notice Delete value for String associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5101, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5089, + "modifierName": { + "argumentTypes": null, + "id": 5088, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "6708:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "6708:9:11" + } + ], + "name": "deleteString", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5087, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5086, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5101, + "src": "6687:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5085, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6687:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6686:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5092, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5091, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5101, + "src": "6727:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5090, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6727:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6726:14:11" + }, + "scope": 5225, + "src": "6665:140:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5117, + "nodeType": "Block", + "src": "7123:63:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5113, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "7133:25:11", + "subExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5110, + "name": "bytesStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4911, + "src": "7140:12:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes_storage_$", + "typeString": "mapping(bytes32 => bytes storage ref)" + } + }, + "id": 5112, + "indexExpression": { + "argumentTypes": null, + "id": 5111, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5103, + "src": "7153:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7140:18:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage", + "typeString": "bytes storage ref" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5114, + "nodeType": "ExpressionStatement", + "src": "7133:25:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5115, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7175:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5109, + "id": 5116, + "nodeType": "Return", + "src": "7168:11:11" + } + ] + }, + "documentation": "@notice Delete value for Bytes associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5118, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5106, + "modifierName": { + "argumentTypes": null, + "id": 5105, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "7090:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "7090:9:11" + } + ], + "name": "deleteBytes", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5104, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5103, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5118, + "src": "7069:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5102, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7069:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7068:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5109, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5108, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5118, + "src": "7109:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5107, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7109:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7108:14:11" + }, + "scope": 5225, + "src": "7048:138:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5134, + "nodeType": "Block", + "src": "7502:62:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5130, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "7512:24:11", + "subExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5127, + "name": "boolStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4915, + "src": "7519:11:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", + "typeString": "mapping(bytes32 => bool)" + } + }, + "id": 5129, + "indexExpression": { + "argumentTypes": null, + "id": 5128, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5120, + "src": "7531:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7519:17:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5131, + "nodeType": "ExpressionStatement", + "src": "7512:24:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5132, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7553:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5126, + "id": 5133, + "nodeType": "Return", + "src": "7546:11:11" + } + ] + }, + "documentation": "@notice Delete value for Bool associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5135, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5123, + "modifierName": { + "argumentTypes": null, + "id": 5122, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "7469:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "7469:9:11" + } + ], + "name": "deleteBool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5121, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5120, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5135, + "src": "7448:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5119, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7448:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7447:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5126, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5125, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5135, + "src": "7488:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5124, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7488:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7487:14:11" + }, + "scope": 5225, + "src": "7428:136:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5151, + "nodeType": "Block", + "src": "7878:61:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5147, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "7888:23:11", + "subExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5144, + "name": "intStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4919, + "src": "7895:10:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_int256_$", + "typeString": "mapping(bytes32 => int256)" + } + }, + "id": 5146, + "indexExpression": { + "argumentTypes": null, + "id": 5145, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5137, + "src": "7906:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7895:16:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5148, + "nodeType": "ExpressionStatement", + "src": "7888:23:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5149, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7928:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5143, + "id": 5150, + "nodeType": "Return", + "src": "7921:11:11" + } + ] + }, + "documentation": "@notice Delete value for Int associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5152, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5140, + "modifierName": { + "argumentTypes": null, + "id": 5139, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "7845:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "7845:9:11" + } + ], + "name": "deleteInt", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5138, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5137, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5152, + "src": "7824:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5136, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7824:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7823:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5143, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5142, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5152, + "src": "7864:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5141, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7864:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7863:14:11" + }, + "scope": 5225, + "src": "7805:134:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5163, + "nodeType": "Block", + "src": "8274:44:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5159, + "name": "addressStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4907, + "src": "8291:14:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", + "typeString": "mapping(bytes32 => address)" + } + }, + "id": 5161, + "indexExpression": { + "argumentTypes": null, + "id": 5160, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5154, + "src": "8306:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8291:20:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 5158, + "id": 5162, + "nodeType": "Return", + "src": "8284:27:11" + } + ] + }, + "documentation": "@notice Get value for Address associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"_value\" : \"Returns the Address value associated with the id key\" }", + "id": 5164, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getAddress", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5155, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5154, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5164, + "src": "8223:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5153, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8223:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8222:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5158, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5157, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5164, + "src": "8258:14:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5156, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8258:7:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8257:16:11" + }, + "scope": 5225, + "src": "8203:115:11", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5175, + "nodeType": "Block", + "src": "8611:41:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5171, + "name": "uIntStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4899, + "src": "8628:11:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 5173, + "indexExpression": { + "argumentTypes": null, + "id": 5172, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5166, + "src": "8640:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8628:17:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 5170, + "id": 5174, + "nodeType": "Return", + "src": "8621:24:11" + } + ] + }, + "documentation": "@notice Get value for Uint associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"_value\" : \"Returns the Uint value associated with the id key\" }", + "id": 5176, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getUint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5167, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5166, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5176, + "src": "8563:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5165, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8563:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8562:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5170, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5169, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5176, + "src": "8598:11:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5168, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "8598:4:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8597:13:11" + }, + "scope": 5225, + "src": "8546:106:11", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5187, + "nodeType": "Block", + "src": "8953:43:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5183, + "name": "stringStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4903, + "src": "8970:13:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_string_storage_$", + "typeString": "mapping(bytes32 => string storage ref)" + } + }, + "id": 5185, + "indexExpression": { + "argumentTypes": null, + "id": 5184, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5178, + "src": "8984:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8970:19:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "functionReturnParameters": 5182, + "id": 5186, + "nodeType": "Return", + "src": "8963:26:11" + } + ] + }, + "documentation": "@notice Get value for String associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"_value\" : \"Returns the String value associated with the id key\" }", + "id": 5188, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getString", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5179, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5178, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5188, + "src": "8903:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5177, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8903:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8902:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5182, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5181, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5188, + "src": "8938:13:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 5180, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "8938:6:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8937:15:11" + }, + "scope": 5225, + "src": "8884:112:11", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5199, + "nodeType": "Block", + "src": "9293:42:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5195, + "name": "bytesStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4911, + "src": "9310:12:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes_storage_$", + "typeString": "mapping(bytes32 => bytes storage ref)" + } + }, + "id": 5197, + "indexExpression": { + "argumentTypes": null, + "id": 5196, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5190, + "src": "9323:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9310:18:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage", + "typeString": "bytes storage ref" + } + }, + "functionReturnParameters": 5194, + "id": 5198, + "nodeType": "Return", + "src": "9303:25:11" + } + ] + }, + "documentation": "@notice Get value for Bytes associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"_value\" : \"Returns the Bytes value associated with the id key\" }", + "id": 5200, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getBytes", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5191, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5190, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5200, + "src": "9244:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5189, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "9244:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9243:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5194, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5193, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5200, + "src": "9279:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5192, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "9279:5:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9278:14:11" + }, + "scope": 5225, + "src": "9226:109:11", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5211, + "nodeType": "Block", + "src": "9628:41:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5207, + "name": "boolStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4915, + "src": "9645:11:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", + "typeString": "mapping(bytes32 => bool)" + } + }, + "id": 5209, + "indexExpression": { + "argumentTypes": null, + "id": 5208, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5202, + "src": "9657:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9645:17:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 5206, + "id": 5210, + "nodeType": "Return", + "src": "9638:24:11" + } + ] + }, + "documentation": "@notice Get value for Bool associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"_value\" : \"Returns the Bool value associated with the id key\" }", + "id": 5212, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getBool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5203, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5202, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5212, + "src": "9580:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5201, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "9580:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9579:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5206, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5205, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5212, + "src": "9615:11:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5204, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "9615:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9614:13:11" + }, + "scope": 5225, + "src": "9563:106:11", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5223, + "nodeType": "Block", + "src": "9958:40:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5219, + "name": "intStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4919, + "src": "9975:10:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_int256_$", + "typeString": "mapping(bytes32 => int256)" + } + }, + "id": 5221, + "indexExpression": { + "argumentTypes": null, + "id": 5220, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5214, + "src": "9986:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9975:16:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "functionReturnParameters": 5218, + "id": 5222, + "nodeType": "Return", + "src": "9968:23:11" + } + ] + }, + "documentation": "@notice Get value for Int associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"_value\" : \"Returns the Int value associated with the id key\" }", + "id": 5224, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getInt", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5215, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5214, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5224, + "src": "9911:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5213, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "9911:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9910:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5218, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5217, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5224, + "src": "9946:10:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 5216, + "name": "int", + "nodeType": "ElementaryTypeName", + "src": "9946:3:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9945:12:11" + }, + "scope": 5225, + "src": "9895:103:11", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 5226, + "src": "1972:8029:11" + } + ], + "src": "0:10002:11" + }, + "legacyAST": { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/TokenIOStorage.sol", + "exportedSymbols": { + "TokenIOStorage": [ + 5225 + ] + }, + "id": 5226, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4892, + "literals": [ + "solidity", + "0.4", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "0:23:11" + }, + { + "absolutePath": "/Users/ryan/Projects/TokenInc/tokeninc-smart-contracts/contracts/Ownable.sol", + "file": "./Ownable.sol", + "id": 4893, + "nodeType": "ImportDirective", + "scope": 5226, + "sourceUnit": 185, + "src": "25:23:11", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 4894, + "name": "Ownable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 184, + "src": "1999:7:11", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ownable_$184", + "typeString": "contract Ownable" + } + }, + "id": 4895, + "nodeType": "InheritanceSpecifier", + "src": "1999:7:11" + } + ], + "contractDependencies": [ + 184 + ], + "contractKind": "contract", + "documentation": "COPYRIGHT 2018 Token, Inc.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n@title TokenIOStorage - Serves as derived contract for TokenIO contract and\nis used to upgrade interfaces in the event of deprecating the main contract.\n@author Ryan Tate , Sean Pollock \n@notice Storage contract\n@dev In the event that the main contract becomes deprecated, the upgraded contract\nwill be set as the owner of this contract, and use this contract's storage to\nmaintain data consistency between contract.\n@notice NOTE: This contract is based on the RocketPool Storage Contract,\nfound here: https://github.com/rocket-pool/rocketpool/blob/master/contracts/RocketStorage.sol\nAnd this medium article: https://medium.com/rocket-pool/upgradable-solidity-contract-design-54789205276d\nChanges:\n- setting primitive mapping view to internal;\n- setting method views to public;\n@dev NOTE: When deprecating the main TokenIO contract, the upgraded contract\nmust take ownership of the TokenIO contract, it will require using the public methods\nto update changes to the underlying data. The updated contract must use a\nstandard call to original TokenIO contract such that the request is made from\nthe upgraded contract and not the transaction origin (tx.origin) of the signing\naccount.\n@dev NOTE: The reasoning for using the storage contract is to abstract the interface\nfrom the data of the contract on chain, limiting the need to migrate data to\nnew contracts.", + "fullyImplemented": true, + "id": 5225, + "linearizedBaseContracts": [ + 5225, + 184 + ], + "name": "TokenIOStorage", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 4899, + "name": "uIntStorage", + "nodeType": "VariableDeclaration", + "scope": 5225, + "src": "2321:51:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + }, + "typeName": { + "id": 4898, + "keyType": { + "id": 4896, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2329:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2321:27:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + }, + "valueType": { + "id": 4897, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2340:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4903, + "name": "stringStorage", + "nodeType": "VariableDeclaration", + "scope": 5225, + "src": "2378:53:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_string_storage_$", + "typeString": "mapping(bytes32 => string)" + }, + "typeName": { + "id": 4902, + "keyType": { + "id": 4900, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2386:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2378:26:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_string_storage_$", + "typeString": "mapping(bytes32 => string)" + }, + "valueType": { + "id": 4901, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2397:6:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4907, + "name": "addressStorage", + "nodeType": "VariableDeclaration", + "scope": 5225, + "src": "2437:54:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", + "typeString": "mapping(bytes32 => address)" + }, + "typeName": { + "id": 4906, + "keyType": { + "id": 4904, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2445:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2437:27:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", + "typeString": "mapping(bytes32 => address)" + }, + "valueType": { + "id": 4905, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2456:7:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4911, + "name": "bytesStorage", + "nodeType": "VariableDeclaration", + "scope": 5225, + "src": "2497:52:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes_storage_$", + "typeString": "mapping(bytes32 => bytes)" + }, + "typeName": { + "id": 4910, + "keyType": { + "id": 4908, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2505:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2497:25:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes_storage_$", + "typeString": "mapping(bytes32 => bytes)" + }, + "valueType": { + "id": 4909, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2516:5:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4915, + "name": "boolStorage", + "nodeType": "VariableDeclaration", + "scope": 5225, + "src": "2555:51:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", + "typeString": "mapping(bytes32 => bool)" + }, + "typeName": { + "id": 4914, + "keyType": { + "id": 4912, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2563:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2555:24:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", + "typeString": "mapping(bytes32 => bool)" + }, + "valueType": { + "id": 4913, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2574:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4919, + "name": "intStorage", + "nodeType": "VariableDeclaration", + "scope": 5225, + "src": "2612:50:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_int256_$", + "typeString": "mapping(bytes32 => int256)" + }, + "typeName": { + "id": 4918, + "keyType": { + "id": 4916, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2620:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2612:26:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_int256_$", + "typeString": "mapping(bytes32 => int256)" + }, + "valueType": { + "id": 4917, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "2631:6:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + }, + "value": null, + "visibility": "internal" + }, + { + "body": { + "id": 4929, + "nodeType": "Block", + "src": "2690:186:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 4927, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 4922, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "2845:5:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 4925, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4923, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5240, + "src": "2851:3:11", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4924, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2851:10:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2845:17:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4926, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2865:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "2845:24:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4928, + "nodeType": "ExpressionStatement", + "src": "2845:24:11" + } + ] + }, + "documentation": null, + "id": 4930, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4920, + "nodeType": "ParameterList", + "parameters": [], + "src": "2680:2:11" + }, + "payable": false, + "returnParameters": { + "id": 4921, + "nodeType": "ParameterList", + "parameters": [], + "src": "2690:0:11" + }, + "scope": 5225, + "src": "2669:207:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4949, + "nodeType": "Block", + "src": "3287:67:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 4945, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 4941, + "name": "addressStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4907, + "src": "3297:14:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", + "typeString": "mapping(bytes32 => address)" + } + }, + "id": 4943, + "indexExpression": { + "argumentTypes": null, + "id": 4942, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4932, + "src": "3312:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3297:20:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 4944, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4934, + "src": "3320:6:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "3297:29:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 4946, + "nodeType": "ExpressionStatement", + "src": "3297:29:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4947, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3343:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 4940, + "id": 4948, + "nodeType": "Return", + "src": "3336:11:11" + } + ] + }, + "documentation": "@notice Set value for Address associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@param _value The Address value to be set\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 4950, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 4937, + "modifierName": { + "argumentTypes": null, + "id": 4936, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "3254:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "3254:9:11" + } + ], + "name": "setAddress", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4935, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4932, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 4950, + "src": "3217:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4931, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3217:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4934, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 4950, + "src": "3231:14:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4933, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3231:7:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3216:30:11" + }, + "payable": false, + "returnParameters": { + "id": 4940, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4939, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 4950, + "src": "3273:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4938, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3273:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3272:14:11" + }, + "scope": 5225, + "src": "3197:157:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4969, + "nodeType": "Block", + "src": "3723:64:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 4965, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 4961, + "name": "uIntStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4899, + "src": "3733:11:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 4963, + "indexExpression": { + "argumentTypes": null, + "id": 4962, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4952, + "src": "3745:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3733:17:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 4964, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4954, + "src": "3753:6:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3733:26:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4966, + "nodeType": "ExpressionStatement", + "src": "3733:26:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4967, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3776:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 4960, + "id": 4968, + "nodeType": "Return", + "src": "3769:11:11" + } + ] + }, + "documentation": "@notice Set value for Uint associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@param _value The Uint value to be set\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 4970, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 4957, + "modifierName": { + "argumentTypes": null, + "id": 4956, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "3690:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "3690:9:11" + } + ], + "name": "setUint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4955, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4952, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 4970, + "src": "3656:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4951, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3656:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4954, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 4970, + "src": "3670:11:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4953, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "3670:4:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3655:27:11" + }, + "payable": false, + "returnParameters": { + "id": 4960, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4959, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 4970, + "src": "3709:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4958, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3709:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3708:14:11" + }, + "scope": 5225, + "src": "3639:148:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 4989, + "nodeType": "Block", + "src": "4164:66:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 4985, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 4981, + "name": "stringStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4903, + "src": "4174:13:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_string_storage_$", + "typeString": "mapping(bytes32 => string storage ref)" + } + }, + "id": 4983, + "indexExpression": { + "argumentTypes": null, + "id": 4982, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4972, + "src": "4188:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "4174:19:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 4984, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4974, + "src": "4196:6:11", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "src": "4174:28:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "id": 4986, + "nodeType": "ExpressionStatement", + "src": "4174:28:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 4987, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4219:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 4980, + "id": 4988, + "nodeType": "Return", + "src": "4212:11:11" + } + ] + }, + "documentation": "@notice Set value for String associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@param _value The String value to be set\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 4990, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 4977, + "modifierName": { + "argumentTypes": null, + "id": 4976, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "4131:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "4131:9:11" + } + ], + "name": "setString", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4975, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4972, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 4990, + "src": "4095:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4971, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4095:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4974, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 4990, + "src": "4109:13:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 4973, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "4109:6:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4094:29:11" + }, + "payable": false, + "returnParameters": { + "id": 4980, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4979, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 4990, + "src": "4150:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4978, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4150:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4149:14:11" + }, + "scope": 5225, + "src": "4076:154:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5009, + "nodeType": "Block", + "src": "4603:65:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5005, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5001, + "name": "bytesStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4911, + "src": "4613:12:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes_storage_$", + "typeString": "mapping(bytes32 => bytes storage ref)" + } + }, + "id": 5003, + "indexExpression": { + "argumentTypes": null, + "id": 5002, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4992, + "src": "4626:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "4613:18:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage", + "typeString": "bytes storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 5004, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4994, + "src": "4634:6:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "src": "4613:27:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage", + "typeString": "bytes storage ref" + } + }, + "id": 5006, + "nodeType": "ExpressionStatement", + "src": "4613:27:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5007, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4657:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5000, + "id": 5008, + "nodeType": "Return", + "src": "4650:11:11" + } + ] + }, + "documentation": "@notice Set value for Bytes associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@param _value The Bytes value to be set\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5010, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 4997, + "modifierName": { + "argumentTypes": null, + "id": 4996, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "4570:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "4570:9:11" + } + ], + "name": "setBytes", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4995, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4992, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5010, + "src": "4535:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4991, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4535:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4994, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5010, + "src": "4549:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4993, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4549:5:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4534:28:11" + }, + "payable": false, + "returnParameters": { + "id": 5000, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4999, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5010, + "src": "4589:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4998, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4589:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4588:14:11" + }, + "scope": 5225, + "src": "4517:151:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5029, + "nodeType": "Block", + "src": "5037:64:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5025, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5021, + "name": "boolStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4915, + "src": "5047:11:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", + "typeString": "mapping(bytes32 => bool)" + } + }, + "id": 5023, + "indexExpression": { + "argumentTypes": null, + "id": 5022, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5012, + "src": "5059:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "5047:17:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 5024, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5014, + "src": "5067:6:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5047:26:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5026, + "nodeType": "ExpressionStatement", + "src": "5047:26:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5027, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5090:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5020, + "id": 5028, + "nodeType": "Return", + "src": "5083:11:11" + } + ] + }, + "documentation": "@notice Set value for Bool associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@param _value The Bool value to be set\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5030, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5017, + "modifierName": { + "argumentTypes": null, + "id": 5016, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "5004:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "5004:9:11" + } + ], + "name": "setBool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5015, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5012, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5030, + "src": "4970:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5011, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4970:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 5014, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5030, + "src": "4984:11:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5013, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4984:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4969:27:11" + }, + "payable": false, + "returnParameters": { + "id": 5020, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5019, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5030, + "src": "5023:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5018, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5023:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5022:14:11" + }, + "scope": 5225, + "src": "4953:148:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5049, + "nodeType": "Block", + "src": "5466:63:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5045, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5041, + "name": "intStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4919, + "src": "5476:10:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_int256_$", + "typeString": "mapping(bytes32 => int256)" + } + }, + "id": 5043, + "indexExpression": { + "argumentTypes": null, + "id": 5042, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5032, + "src": "5487:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "5476:16:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 5044, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5034, + "src": "5495:6:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "5476:25:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 5046, + "nodeType": "ExpressionStatement", + "src": "5476:25:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5047, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5518:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5040, + "id": 5048, + "nodeType": "Return", + "src": "5511:11:11" + } + ] + }, + "documentation": "@notice Set value for Int associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@param _value The Int value to be set\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5050, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5037, + "modifierName": { + "argumentTypes": null, + "id": 5036, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "5433:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "5433:9:11" + } + ], + "name": "setInt", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5035, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5032, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5050, + "src": "5400:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5031, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5400:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 5034, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5050, + "src": "5414:10:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 5033, + "name": "int", + "nodeType": "ElementaryTypeName", + "src": "5414:3:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5399:26:11" + }, + "payable": false, + "returnParameters": { + "id": 5040, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5039, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5050, + "src": "5452:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5038, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5452:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5451:14:11" + }, + "scope": 5225, + "src": "5384:145:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5066, + "nodeType": "Block", + "src": "5978:65:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5062, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "5988:27:11", + "subExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5059, + "name": "addressStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4907, + "src": "5995:14:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", + "typeString": "mapping(bytes32 => address)" + } + }, + "id": 5061, + "indexExpression": { + "argumentTypes": null, + "id": 5060, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5052, + "src": "6010:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "5995:20:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5063, + "nodeType": "ExpressionStatement", + "src": "5988:27:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5064, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6032:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5058, + "id": 5065, + "nodeType": "Return", + "src": "6025:11:11" + } + ] + }, + "documentation": "@notice Delete value for Address associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5067, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5055, + "modifierName": { + "argumentTypes": null, + "id": 5054, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "5945:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "5945:9:11" + } + ], + "name": "deleteAddress", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5053, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5052, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5067, + "src": "5924:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5051, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5924:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5923:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5058, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5057, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5067, + "src": "5964:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5056, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5964:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5963:14:11" + }, + "scope": 5225, + "src": "5901:142:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5083, + "nodeType": "Block", + "src": "6359:62:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5079, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "6369:24:11", + "subExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5076, + "name": "uIntStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4899, + "src": "6376:11:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 5078, + "indexExpression": { + "argumentTypes": null, + "id": 5077, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5069, + "src": "6388:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "6376:17:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5080, + "nodeType": "ExpressionStatement", + "src": "6369:24:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5081, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6410:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5075, + "id": 5082, + "nodeType": "Return", + "src": "6403:11:11" + } + ] + }, + "documentation": "@notice Delete value for Uint associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5084, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5072, + "modifierName": { + "argumentTypes": null, + "id": 5071, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "6326:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "6326:9:11" + } + ], + "name": "deleteUint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5070, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5069, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5084, + "src": "6305:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5068, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6305:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6304:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5075, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5074, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5084, + "src": "6345:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5073, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6345:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6344:14:11" + }, + "scope": 5225, + "src": "6285:136:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5100, + "nodeType": "Block", + "src": "6741:64:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5096, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "6751:26:11", + "subExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5093, + "name": "stringStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4903, + "src": "6758:13:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_string_storage_$", + "typeString": "mapping(bytes32 => string storage ref)" + } + }, + "id": 5095, + "indexExpression": { + "argumentTypes": null, + "id": 5094, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5086, + "src": "6772:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "6758:19:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5097, + "nodeType": "ExpressionStatement", + "src": "6751:26:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5098, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6794:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5092, + "id": 5099, + "nodeType": "Return", + "src": "6787:11:11" + } + ] + }, + "documentation": "@notice Delete value for String associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5101, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5089, + "modifierName": { + "argumentTypes": null, + "id": 5088, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "6708:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "6708:9:11" + } + ], + "name": "deleteString", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5087, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5086, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5101, + "src": "6687:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5085, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6687:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6686:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5092, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5091, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5101, + "src": "6727:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5090, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6727:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6726:14:11" + }, + "scope": 5225, + "src": "6665:140:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5117, + "nodeType": "Block", + "src": "7123:63:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5113, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "7133:25:11", + "subExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5110, + "name": "bytesStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4911, + "src": "7140:12:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes_storage_$", + "typeString": "mapping(bytes32 => bytes storage ref)" + } + }, + "id": 5112, + "indexExpression": { + "argumentTypes": null, + "id": 5111, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5103, + "src": "7153:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7140:18:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage", + "typeString": "bytes storage ref" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5114, + "nodeType": "ExpressionStatement", + "src": "7133:25:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5115, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7175:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5109, + "id": 5116, + "nodeType": "Return", + "src": "7168:11:11" + } + ] + }, + "documentation": "@notice Delete value for Bytes associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5118, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5106, + "modifierName": { + "argumentTypes": null, + "id": 5105, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "7090:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "7090:9:11" + } + ], + "name": "deleteBytes", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5104, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5103, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5118, + "src": "7069:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5102, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7069:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7068:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5109, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5108, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5118, + "src": "7109:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5107, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7109:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7108:14:11" + }, + "scope": 5225, + "src": "7048:138:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5134, + "nodeType": "Block", + "src": "7502:62:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5130, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "7512:24:11", + "subExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5127, + "name": "boolStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4915, + "src": "7519:11:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", + "typeString": "mapping(bytes32 => bool)" + } + }, + "id": 5129, + "indexExpression": { + "argumentTypes": null, + "id": 5128, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5120, + "src": "7531:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7519:17:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5131, + "nodeType": "ExpressionStatement", + "src": "7512:24:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5132, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7553:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5126, + "id": 5133, + "nodeType": "Return", + "src": "7546:11:11" + } + ] + }, + "documentation": "@notice Delete value for Bool associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5135, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5123, + "modifierName": { + "argumentTypes": null, + "id": 5122, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "7469:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "7469:9:11" + } + ], + "name": "deleteBool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5121, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5120, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5135, + "src": "7448:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5119, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7448:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7447:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5126, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5125, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5135, + "src": "7488:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5124, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7488:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7487:14:11" + }, + "scope": 5225, + "src": "7428:136:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5151, + "nodeType": "Block", + "src": "7878:61:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 5147, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "7888:23:11", + "subExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5144, + "name": "intStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4919, + "src": "7895:10:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_int256_$", + "typeString": "mapping(bytes32 => int256)" + } + }, + "id": 5146, + "indexExpression": { + "argumentTypes": null, + "id": 5145, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5137, + "src": "7906:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7895:16:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5148, + "nodeType": "ExpressionStatement", + "src": "7888:23:11" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 5149, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7928:4:11", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 5143, + "id": 5150, + "nodeType": "Return", + "src": "7921:11:11" + } + ] + }, + "documentation": "@notice Delete value for Int associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"success\" : \"Returns true when successfully called from another contract\" }", + "id": 5152, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": null, + "id": 5140, + "modifierName": { + "argumentTypes": null, + "id": 5139, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "7845:9:11", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "7845:9:11" + } + ], + "name": "deleteInt", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5138, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5137, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5152, + "src": "7824:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5136, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7824:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7823:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5143, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5142, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 5152, + "src": "7864:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5141, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7864:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7863:14:11" + }, + "scope": 5225, + "src": "7805:134:11", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5163, + "nodeType": "Block", + "src": "8274:44:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5159, + "name": "addressStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4907, + "src": "8291:14:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", + "typeString": "mapping(bytes32 => address)" + } + }, + "id": 5161, + "indexExpression": { + "argumentTypes": null, + "id": 5160, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5154, + "src": "8306:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8291:20:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 5158, + "id": 5162, + "nodeType": "Return", + "src": "8284:27:11" + } + ] + }, + "documentation": "@notice Get value for Address associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"_value\" : \"Returns the Address value associated with the id key\" }", + "id": 5164, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getAddress", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5155, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5154, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5164, + "src": "8223:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5153, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8223:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8222:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5158, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5157, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5164, + "src": "8258:14:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5156, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8258:7:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8257:16:11" + }, + "scope": 5225, + "src": "8203:115:11", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5175, + "nodeType": "Block", + "src": "8611:41:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5171, + "name": "uIntStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4899, + "src": "8628:11:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 5173, + "indexExpression": { + "argumentTypes": null, + "id": 5172, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5166, + "src": "8640:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8628:17:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 5170, + "id": 5174, + "nodeType": "Return", + "src": "8621:24:11" + } + ] + }, + "documentation": "@notice Get value for Uint associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"_value\" : \"Returns the Uint value associated with the id key\" }", + "id": 5176, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getUint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5167, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5166, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5176, + "src": "8563:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5165, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8563:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8562:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5170, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5169, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5176, + "src": "8598:11:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5168, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "8598:4:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8597:13:11" + }, + "scope": 5225, + "src": "8546:106:11", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5187, + "nodeType": "Block", + "src": "8953:43:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5183, + "name": "stringStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4903, + "src": "8970:13:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_string_storage_$", + "typeString": "mapping(bytes32 => string storage ref)" + } + }, + "id": 5185, + "indexExpression": { + "argumentTypes": null, + "id": 5184, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5178, + "src": "8984:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8970:19:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "functionReturnParameters": 5182, + "id": 5186, + "nodeType": "Return", + "src": "8963:26:11" + } + ] + }, + "documentation": "@notice Get value for String associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"_value\" : \"Returns the String value associated with the id key\" }", + "id": 5188, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getString", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5179, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5178, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5188, + "src": "8903:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5177, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8903:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8902:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5182, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5181, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5188, + "src": "8938:13:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 5180, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "8938:6:11", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8937:15:11" + }, + "scope": 5225, + "src": "8884:112:11", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5199, + "nodeType": "Block", + "src": "9293:42:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5195, + "name": "bytesStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4911, + "src": "9310:12:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes_storage_$", + "typeString": "mapping(bytes32 => bytes storage ref)" + } + }, + "id": 5197, + "indexExpression": { + "argumentTypes": null, + "id": 5196, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5190, + "src": "9323:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9310:18:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage", + "typeString": "bytes storage ref" + } + }, + "functionReturnParameters": 5194, + "id": 5198, + "nodeType": "Return", + "src": "9303:25:11" + } + ] + }, + "documentation": "@notice Get value for Bytes associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"_value\" : \"Returns the Bytes value associated with the id key\" }", + "id": 5200, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getBytes", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5191, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5190, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5200, + "src": "9244:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5189, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "9244:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9243:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5194, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5193, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5200, + "src": "9279:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5192, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "9279:5:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9278:14:11" + }, + "scope": 5225, + "src": "9226:109:11", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5211, + "nodeType": "Block", + "src": "9628:41:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5207, + "name": "boolStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4915, + "src": "9645:11:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", + "typeString": "mapping(bytes32 => bool)" + } + }, + "id": 5209, + "indexExpression": { + "argumentTypes": null, + "id": 5208, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5202, + "src": "9657:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9645:17:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 5206, + "id": 5210, + "nodeType": "Return", + "src": "9638:24:11" + } + ] + }, + "documentation": "@notice Get value for Bool associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"_value\" : \"Returns the Bool value associated with the id key\" }", + "id": 5212, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getBool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5203, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5202, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5212, + "src": "9580:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5201, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "9580:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9579:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5206, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5205, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5212, + "src": "9615:11:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5204, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "9615:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9614:13:11" + }, + "scope": 5225, + "src": "9563:106:11", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 5223, + "nodeType": "Block", + "src": "9958:40:11", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 5219, + "name": "intStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4919, + "src": "9975:10:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_int256_$", + "typeString": "mapping(bytes32 => int256)" + } + }, + "id": 5221, + "indexExpression": { + "argumentTypes": null, + "id": 5220, + "name": "_key", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5214, + "src": "9986:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9975:16:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "functionReturnParameters": 5218, + "id": 5222, + "nodeType": "Return", + "src": "9968:23:11" + } + ] + }, + "documentation": "@notice Get value for Int associated with bytes32 id key\n@param _key Pointer identifier for value in storage\n@return { \"_value\" : \"Returns the Int value associated with the id key\" }", + "id": 5224, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": true, + "modifiers": [], + "name": "getInt", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5215, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5214, + "name": "_key", + "nodeType": "VariableDeclaration", + "scope": 5224, + "src": "9911:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5213, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "9911:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9910:14:11" + }, + "payable": false, + "returnParameters": { + "id": 5218, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5217, + "name": "_value", + "nodeType": "VariableDeclaration", + "scope": 5224, + "src": "9946:10:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 5216, + "name": "int", + "nodeType": "ElementaryTypeName", + "src": "9946:3:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9945:12:11" + }, + "scope": 5225, + "src": "9895:103:11", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 5226, + "src": "1972:8029:11" + } + ], + "src": "0:10002:11" + }, + "compiler": { + "name": "solc", + "version": "0.4.24+commit.e67f0147.Emscripten.clang" + }, + "networks": { + "1": { + "events": { + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + "0x1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c5": { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "AllowOwnership", + "type": "event" + }, + "0x2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad98": { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "RevokeOwnership", + "type": "event" + } + }, + "links": {}, + "address": "0x7395662c0379ea49c8af2275dbba6bf0e2033af4", + "transactionHash": "0xb265e9b1663a03d1efc7eb6bbcbe4f62b6a4e60f440c13d35b1e65e3c24317bd" + }, + "4447": { + "events": { + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + "0x1c965cca064792c08083e8746b9062155a2f163d9f9ddab08196d5b2e3a818c5": { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "AllowOwnership", + "type": "event" + }, + "0x2d760b10f59f9d65a092cfebe73f70fd0a4e19e59791ffd61ee3057a0010ad98": { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "allowedAddress", + "type": "address" + } + ], + "name": "RevokeOwnership", + "type": "event" + } + }, + "links": {}, + "address": "0x9fbda871d559710256a2502a2517b794b482db40", + "transactionHash": "0x7ba32ab1df89a09fbad8d4bfaded7e556bafd30b97aa7bb69e262ae55fb16023" + } + }, + "schemaVersion": "2.0.1", + "updatedAt": "2018-10-24T17:41:08.927Z" +} \ No newline at end of file diff --git a/migrations/10_deploy_TokenIOUnlimited.js b/migrations/10_deploy_TokenIOUnlimited.js new file mode 100644 index 0000000..672743e --- /dev/null +++ b/migrations/10_deploy_TokenIOUnlimited.js @@ -0,0 +1,41 @@ +const { delay } = require('bluebird') + +const TokenIOStorage = artifacts.require("./TokenIOStorage.sol") +const TokenIOERC20Unlimited = artifacts.require("./TokenIOERC20Unlimited.sol") +const TokenIOERC20UnlimitedProxy = artifacts.require("./TokenIOERC20UnlimitedProxy.sol") + +const { mode, development, production } = require('../token.config.js'); +const { + AUTHORITY_DETAILS: { firmName, authorityAddress }, + TOKEN_DETAILS +} = mode == 'production' ? production : development; + +const deployContracts = async (deployer, accounts) => { + try { + /* storage */ + const storage = await TokenIOStorage.deployed() + + /* token */ + const token = await deployer.deploy(TokenIOERC20Unlimited, storage.address) + await storage.allowOwnership(token.address) + + const tokenProxy = await deployer.deploy(TokenIOERC20UnlimitedProxy, token.address) + await token.allowOwnership(tokenProxy.address) + await token.initProxy(tokenProxy.address) + + await tokenProxy.setParams(...Object.values(TOKEN_DETAILS['USDx']).map((v) => { return v })) + + return true + } catch (err) { + console.log('### error deploying contracts', err) + } +} + + +module.exports = (deployer, network, accounts) => { + deployer.then(async () => { + await deployContracts(deployer, accounts) + console.log('### finished deploying contracts') + }) + .catch(err => console.log('### error deploying contracts', err)) +} diff --git a/migrations/11_deploy_TokenIOStableSwap.js b/migrations/11_deploy_TokenIOStableSwap.js new file mode 100644 index 0000000..3914dd1 --- /dev/null +++ b/migrations/11_deploy_TokenIOStableSwap.js @@ -0,0 +1,56 @@ +const { delay } = require('bluebird') + +const TokenIOStorage = artifacts.require("./TokenIOStorage.sol") +const TokenIOStableSwap = artifacts.require("./TokenIOStableSwap.sol") +const TokenIOStableSwapProxy = artifacts.require("./TokenIOStableSwapProxy.sol") +const TokenIOERC20Proxy = artifacts.require("./TokenIOERC20Proxy.sol") +const TokenIOERC20UnlimitedProxy = artifacts.require("./TokenIOERC20UnlimitedProxy.sol") + +const deployContracts = async (deployer, accounts) => { + try { + /* storage */ + const storage = await TokenIOStorage.deployed() + + /* fx */ + const swap = await deployer.deploy(TokenIOStableSwap, storage.address) + + await storage.allowOwnership(swap.address) + + const swapProxy = await deployer.deploy(TokenIOStableSwapProxy, swap.address) + + await swap.allowOwnership(swapProxy.address) + await swap.initProxy(swapProxy.address) + + // Allow USD asset + const usdx = await TokenIOERC20Proxy.deployed(); + const params1 = [ usdx.address, await usdx.tla() ] + await swapProxy.setTokenXCurrency(...params1); + + // Allow other interfaces for USDx + const usdxUnlimited = await TokenIOERC20UnlimitedProxy.deployed(); + const params2 = [ usdxUnlimited.address, await usdxUnlimited.tla() ] + await swapProxy.setTokenXCurrency(...params2); + + // Allow USDC + // NOTE: Fees must be in the decimal representation of the asset + const USDC = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; + const feeBps = 10; + const feeMin = 0; + const feeMax = 1e12; // $1 million max fee; (6 decimal representation) + const feeFlat = 0; + const params3 = [ USDC, "USD", feeBps, feeMin, feeMax, feeFlat ] + await swapProxy.allowAsset(...params3); + + return true + } catch (err) { + console.log('### error deploying contracts', err) + } +} + +module.exports = (deployer, network, accounts) => { + deployer.then(async () => { + await deployContracts(deployer, accounts) + console.log('### finished deploying contracts') + }) + .catch(err => console.log('### error deploying contracts', err)) +} diff --git a/migrations/12_deploy_TokenIOFeesApply.js b/migrations/12_deploy_TokenIOFeesApply.js new file mode 100644 index 0000000..0caf7bd --- /dev/null +++ b/migrations/12_deploy_TokenIOFeesApply.js @@ -0,0 +1,41 @@ +const { delay } = require('bluebird') + +const TokenIOStorage = artifacts.require("./TokenIOStorage.sol") +const TokenIOERC20FeesApply = artifacts.require("./TokenIOERC20FeesApply.sol") +const TokenIOERC20FeesApplyProxy = artifacts.require("./TokenIOERC20FeesApplyProxy.sol") + +const { mode, development, production } = require('../token.config.js'); +const { + AUTHORITY_DETAILS: { firmName, authorityAddress }, + TOKEN_DETAILS +} = mode == 'production' ? production : development; + +const deployContracts = async (deployer, accounts) => { + try { + /* storage */ + const storage = await TokenIOStorage.deployed() + + /* token */ + const token = await deployer.deploy(TokenIOERC20FeesApply, storage.address) + await storage.allowOwnership(token.address) + + const tokenProxy = await deployer.deploy(TokenIOERC20FeesApplyProxy, token.address) + await token.allowOwnership(tokenProxy.address) + await token.initProxy(tokenProxy.address) + + await tokenProxy.setParams(...Object.values(TOKEN_DETAILS['USDx']).map((v) => { return v })) + + return true + } catch (err) { + console.log('### error deploying contracts', err) + } +} + + +module.exports = (deployer, network, accounts) => { + deployer.then(async () => { + await deployContracts(deployer, accounts) + console.log('### finished deploying contracts') + }) + .catch(err => console.log('### error deploying contracts', err)) +} diff --git a/migrations/2_deploy_contracts.js b/migrations/2_deploy_contracts.js deleted file mode 100644 index dee189a..0000000 --- a/migrations/2_deploy_contracts.js +++ /dev/null @@ -1,75 +0,0 @@ -const { delay } = require('bluebird') - -const SafeMath = artifacts.require("./SafeMath.sol") -const TokenIOLib = artifacts.require("./TokenIOLib.sol") -const TokenIOStorage = artifacts.require("./TokenIOStorage.sol") -const TokenIOERC20 = artifacts.require("./TokenIOERC20.sol") -const TokenIOAuthority = artifacts.require("./TokenIOAuthority.sol") -const TokenIOFX = artifacts.require("./TokenIOFX.sol") -const TokenIOCurrencyAuthority = artifacts.require("./TokenIOCurrencyAuthority.sol") -const TokenIOFeeContract = artifacts.require("./TokenIOFeeContract.sol") -const TokenIOMerchant = artifacts.require("./TokenIOMerchant.sol") - -const { mode, development, production } = require('../token.config.js'); -const { - AUTHORITY_DETAILS: { firmName, authorityAddress }, - TOKEN_DETAILS, - FEE_PARAMS -} = mode == 'production' ? production : development; - -const deployContracts = async (deployer, accounts) => { - try { - /* library */ - // const safeMath = await deployer.deploy(SafeMath) - // await deployer.link(SafeMath, [TokenIOLib]) - // const tokenIOLib = await deployer.deploy(TokenIOLib) - await deployer.link(TokenIOLib, - [TokenIOStorage, TokenIOERC20, TokenIOAuthority, TokenIOCurrencyAuthority, TokenIOFX, TokenIOFeeContract]) - - /* storage */ - const storage = await TokenIOStorage.deployed() // await deployer.deploy(TokenIOStorage) - - /* master fee contract */ - // const masterFeeContract = await deployer.deploy(TokenIOFeeContract, storage.address) - // await storage.allowOwnership(masterFeeContract.address) - // await masterFeeContract.setFeeParams(...Object.keys(FEE_PARAMS).map((p) => { return FEE_PARAMS[p] })) - - /* authority contracts */ - // const authority = await deployer.deploy(TokenIOAuthority, storage.address) - // await storage.allowOwnership(authority.address) - // const currencyAuthority = await deployer.deploy(TokenIOCurrencyAuthority, storage.address) - // await storage.allowOwnership(currencyAuthority.address) - - /* merchant contract */ - // const merchant = await deployer.deploy(TokenIOMerchant, storage.address) - // await storage.allowOwnership(merchant.address) - // await merchant.setParams(masterFeeContract.address) - - /* fx */ - // const fx = await deployer.deploy(TokenIOFX, storage.address) - // await storage.allowOwnership(fx.address) - - /* registration */ - // await authority.setRegisteredFirm(firmName, true) - // await authority.setRegisteredAuthority(firmName, accounts[0], true) - // await authority.setMasterFeeContract(masterFeeContract.address) - - /* token */ - const token = await deployer.deploy(TokenIOERC20, storage.address) - await storage.allowOwnership(token.address) - await token.setParams(...Object.values(TOKEN_DETAILS['USDx']).map((v) => { return v })) - - return true - } catch (err) { - console.log('### error deploying contracts', err) - } -} - - -module.exports = (deployer, network, accounts) => { - deployer.then(async () => { - await deployContracts(deployer, accounts) - console.log('### finished deploying contracts') - }) - .catch(err => console.log('### error deploying contracts', err)) -} diff --git a/migrations/2_deploy_libraries.js b/migrations/2_deploy_libraries.js new file mode 100644 index 0000000..5e7d232 --- /dev/null +++ b/migrations/2_deploy_libraries.js @@ -0,0 +1,44 @@ +const { delay } = require('bluebird') + +const SafeMath = artifacts.require("./SafeMath.sol") +const TokenIOLib = artifacts.require("./TokenIOLib.sol") +const TokenIOStorage = artifacts.require("./TokenIOStorage.sol") +const TokenIOERC20 = artifacts.require("./TokenIOERC20.sol") +const TokenIOAuthority = artifacts.require("./TokenIOAuthority.sol") +const TokenIOFX = artifacts.require("./TokenIOFX.sol") +const TokenIOCurrencyAuthority = artifacts.require("./TokenIOCurrencyAuthority.sol") +const TokenIOFeeContract = artifacts.require("./TokenIOFeeContract.sol") +const TokenIOMerchant = artifacts.require("./TokenIOMerchant.sol") + +const { mode, development, production } = require('../token.config.js'); +const { + AUTHORITY_DETAILS: { firmName, authorityAddress }, + TOKEN_DETAILS, + FEE_PARAMS +} = mode == 'production' ? production : development; + +const deployContracts = async (deployer, accounts) => { + try { + /* library */ + const safeMath = await deployer.deploy(SafeMath) + + await deployer.link(SafeMath, [TokenIOLib]) + const tokenIOLib = await deployer.deploy(TokenIOLib) + + await deployer.link(TokenIOLib, + [TokenIOStorage, TokenIOERC20, TokenIOAuthority, TokenIOCurrencyAuthority, TokenIOFX, TokenIOFeeContract]) + + return true + } catch (err) { + console.log('### error deploying contracts', err) + } +} + + +module.exports = (deployer, network, accounts) => { + deployer.then(async () => { + await deployContracts(deployer, accounts) + console.log('### finished deploying contracts') + }) + .catch(err => console.log('### error deploying contracts', err)) +} diff --git a/migrations/3_deploy_TokenIOStorage.js b/migrations/3_deploy_TokenIOStorage.js new file mode 100644 index 0000000..a6941ed --- /dev/null +++ b/migrations/3_deploy_TokenIOStorage.js @@ -0,0 +1,23 @@ +const { delay } = require('bluebird') + +const TokenIOStorage = artifacts.require("./TokenIOStorage.sol") + +const deployContracts = async (deployer, accounts) => { + try { + /* storage */ + await deployer.deploy(TokenIOStorage) + + return true + } catch (err) { + console.log('### error deploying contracts', err) + } +} + + +module.exports = (deployer, network, accounts) => { + deployer.then(async () => { + await deployContracts(deployer, accounts) + console.log('### finished deploying contracts') + }) + .catch(err => console.log('### error deploying contracts', err)) +} diff --git a/migrations/4_deploy_TokenIOMasterFeeContract.js b/migrations/4_deploy_TokenIOMasterFeeContract.js new file mode 100644 index 0000000..5f90b84 --- /dev/null +++ b/migrations/4_deploy_TokenIOMasterFeeContract.js @@ -0,0 +1,39 @@ +const { delay } = require('bluebird') + +const TokenIOStorage = artifacts.require("./TokenIOStorage.sol") +const TokenIOFeeContract = artifacts.require("./TokenIOFeeContract.sol") +const TokenIOFeeContractProxy = artifacts.require("./TokenIOFeeContractProxy.sol") + +const { mode, development, production } = require('../token.config.js'); +const { + AUTHORITY_DETAILS: { firmName, authorityAddress }, + FEE_PARAMS +} = mode == 'production' ? production : development; + +const deployContracts = async (deployer, accounts) => { + try { + /* storage */ + const storage = await TokenIOStorage.deployed() + + /* master fee contract */ + const masterFeeContract = await deployer.deploy(TokenIOFeeContract, storage.address) + const masterFeeContractProxy = await deployer.deploy(TokenIOFeeContractProxy, masterFeeContract.address) + await storage.allowOwnership(masterFeeContract.address) + await masterFeeContract.allowOwnership(masterFeeContractProxy.address) + await masterFeeContract.initProxy(masterFeeContractProxy.address) + await masterFeeContractProxy.setFeeParams(...Object.keys(FEE_PARAMS).map((p) => { return FEE_PARAMS[p] })) + + return true + } catch (err) { + console.log('### error deploying contracts', err) + } +} + + +module.exports = (deployer, network, accounts) => { + deployer.then(async () => { + await deployContracts(deployer, accounts) + console.log('### finished deploying contracts') + }) + .catch(err => console.log('### error deploying contracts', err)) +} diff --git a/migrations/5_deploy_TokenIOAuthority.js b/migrations/5_deploy_TokenIOAuthority.js new file mode 100644 index 0000000..03e7dff --- /dev/null +++ b/migrations/5_deploy_TokenIOAuthority.js @@ -0,0 +1,47 @@ +const { delay } = require('bluebird') + +const TokenIOStorage = artifacts.require("./TokenIOStorage.sol") +const TokenIOAuthority = artifacts.require("./TokenIOAuthority.sol") +const TokenIOAuthorityProxy = artifacts.require("./TokenIOAuthorityProxy.sol") +const TokenIOFeeContractProxy = artifacts.require("./TokenIOFeeContractProxy.sol") + +const { mode, development, production } = require('../token.config.js'); +const { + AUTHORITY_DETAILS: { firmName, authorityAddress }, +} = mode == 'production' ? production : development; + +const deployContracts = async (deployer, accounts) => { + try { + /* storage */ + const storage = await TokenIOStorage.deployed() + + /* authority contracts */ + const authority = await deployer.deploy(TokenIOAuthority, storage.address) + await storage.allowOwnership(authority.address) + + const authorityProxy = await deployer.deploy(TokenIOAuthorityProxy, authority.address) + + await authority.allowOwnership(authorityProxy.address) + await authority.initProxy(authorityProxy.address) + + const masterFeeContractProxy = await TokenIOFeeContractProxy.deployed() + + /* registration */ + await authorityProxy.setRegisteredFirm(firmName, true) + await authorityProxy.setRegisteredAuthority(firmName, accounts[0], true) + await authorityProxy.setMasterFeeContract(masterFeeContractProxy.address) + + return true + } catch (err) { + console.log('### error deploying contracts', err) + } +} + + +module.exports = (deployer, network, accounts) => { + deployer.then(async () => { + await deployContracts(deployer, accounts) + console.log('### finished deploying contracts') + }) + .catch(err => console.log('### error deploying contracts', err)) +} diff --git a/migrations/6_deploy_TokenIOCurrencyAuthority.js b/migrations/6_deploy_TokenIOCurrencyAuthority.js new file mode 100644 index 0000000..18c7d0e --- /dev/null +++ b/migrations/6_deploy_TokenIOCurrencyAuthority.js @@ -0,0 +1,34 @@ +const { delay } = require('bluebird') + +const TokenIOStorage = artifacts.require("./TokenIOStorage.sol") +const TokenIOCurrencyAuthority = artifacts.require("./TokenIOCurrencyAuthority.sol") +const TokenIOCurrencyAuthorityProxy = artifacts.require("./TokenIOCurrencyAuthorityProxy.sol") + +const deployContracts = async (deployer, accounts) => { + try { + + /* storage */ + const storage = await TokenIOStorage.deployed() + + /* authority contracts */ + const currencyAuthority = await deployer.deploy(TokenIOCurrencyAuthority, storage.address) + await storage.allowOwnership(currencyAuthority.address) + const currencyAuthorityProxy = await deployer.deploy(TokenIOCurrencyAuthorityProxy, currencyAuthority.address) + + await currencyAuthority.allowOwnership(currencyAuthorityProxy.address) + await currencyAuthority.initProxy(currencyAuthorityProxy.address) + + return true + } catch (err) { + console.log('### error deploying contracts', err) + } +} + + +module.exports = (deployer, network, accounts) => { + deployer.then(async () => { + await deployContracts(deployer, accounts) + console.log('### finished deploying contracts') + }) + .catch(err => console.log('### error deploying contracts', err)) +} diff --git a/migrations/7_deploy_TokenIOMerchant.js b/migrations/7_deploy_TokenIOMerchant.js new file mode 100644 index 0000000..ae265e9 --- /dev/null +++ b/migrations/7_deploy_TokenIOMerchant.js @@ -0,0 +1,38 @@ +const { delay } = require('bluebird') + +const TokenIOStorage = artifacts.require("./TokenIOStorage.sol") +const TokenIOFeeContractProxy = artifacts.require("./TokenIOFeeContractProxy.sol") +const TokenIOMerchant = artifacts.require("./TokenIOMerchant.sol") +const TokenIOMerchantProxy = artifacts.require("./TokenIOMerchantProxy.sol") + +const deployContracts = async (deployer, accounts) => { + try { + /* storage */ + const storage = await TokenIOStorage.deployed() + + /* master fee contract */ + const masterFeeContractProxy = await TokenIOFeeContractProxy.deployed() + + /* merchant contract */ + const merchant = await deployer.deploy(TokenIOMerchant, storage.address) + await storage.allowOwnership(merchant.address) + const merchantProxy = await deployer.deploy(TokenIOMerchantProxy, merchant.address) + await merchant.allowOwnership(merchantProxy.address) + await merchant.initProxy(merchantProxy.address) + + await merchantProxy.setParams(masterFeeContractProxy.address) + + return true + } catch (err) { + console.log('### error deploying contracts', err) + } +} + + +module.exports = (deployer, network, accounts) => { + deployer.then(async () => { + await deployContracts(deployer, accounts) + console.log('### finished deploying contracts') + }) + .catch(err => console.log('### error deploying contracts', err)) +} diff --git a/migrations/8_deploy_TokenIOERC20.js b/migrations/8_deploy_TokenIOERC20.js new file mode 100644 index 0000000..b126d96 --- /dev/null +++ b/migrations/8_deploy_TokenIOERC20.js @@ -0,0 +1,41 @@ +const { delay } = require('bluebird') + +const TokenIOStorage = artifacts.require("./TokenIOStorage.sol") +const TokenIOERC20 = artifacts.require("./TokenIOERC20.sol") +const TokenIOERC20Proxy = artifacts.require("./TokenIOERC20Proxy.sol") + +const { mode, development, production } = require('../token.config.js'); +const { + AUTHORITY_DETAILS: { firmName, authorityAddress }, + TOKEN_DETAILS +} = mode == 'production' ? production : development; + +const deployContracts = async (deployer, accounts) => { + try { + /* storage */ + const storage = await TokenIOStorage.deployed() + + /* token */ + const token = await deployer.deploy(TokenIOERC20, storage.address) + await storage.allowOwnership(token.address) + + const tokenProxy = await deployer.deploy(TokenIOERC20Proxy, token.address) + await token.allowOwnership(tokenProxy.address) + await token.initProxy(tokenProxy.address) + + await tokenProxy.setParams(...Object.values(TOKEN_DETAILS['USDx']).map((v) => { return v })) + + return true + } catch (err) { + console.log('### error deploying contracts', err) + } +} + + +module.exports = (deployer, network, accounts) => { + deployer.then(async () => { + await deployContracts(deployer, accounts) + console.log('### finished deploying contracts') + }) + .catch(err => console.log('### error deploying contracts', err)) +} diff --git a/migrations/9_deploy_TokenIOFX.js b/migrations/9_deploy_TokenIOFX.js new file mode 100644 index 0000000..e7e1827 --- /dev/null +++ b/migrations/9_deploy_TokenIOFX.js @@ -0,0 +1,33 @@ +const { delay } = require('bluebird') + +const TokenIOStorage = artifacts.require("./TokenIOStorage.sol") +const TokenIOFX = artifacts.require("./TokenIOFX.sol") +const TokenIOFXProxy = artifacts.require("./TokenIOFXProxy.sol") + +const deployContracts = async (deployer, accounts) => { + try { + /* storage */ + const storage = await TokenIOStorage.deployed() + + /* fx */ + const fx = await deployer.deploy(TokenIOFX, storage.address) + await storage.allowOwnership(fx.address) + + const fxProxy = await deployer.deploy(TokenIOFXProxy, fx.address) + fx.allowOwnership(fxProxy.address) + fx.initProxy(fxProxy.address) + + return true + } catch (err) { + console.log('### error deploying contracts', err) + } +} + + +module.exports = (deployer, network, accounts) => { + deployer.then(async () => { + await deployContracts(deployer, accounts) + console.log('### finished deploying contracts') + }) + .catch(err => console.log('### error deploying contracts', err)) +} diff --git a/package-lock.json b/package-lock.json index 1e9a3c6..c8778a9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "tokeninc-smart-contracts", - "version": "0.1.0", + "version": "1.0.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -38,6 +38,12 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" }, + "app-module-path": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", + "integrity": "sha1-ZBqlXft9am8KgUHEucCqULbCTdU=", + "dev": true + }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -52,11 +58,11 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", "requires": { - "lodash": "^4.17.10" + "lodash": "^4.17.11" } }, "async-eventemitter": { @@ -130,6 +136,11 @@ "requires": { "ms": "2.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -298,12 +309,12 @@ }, "babel-plugin-syntax-async-functions": { "version": "6.13.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=" }, "babel-plugin-syntax-exponentiation-operator": { "version": "6.13.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=" }, "babel-plugin-syntax-trailing-function-commas": { @@ -655,6 +666,11 @@ "requires": { "ms": "2.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -671,7 +687,7 @@ }, "babelify": { "version": "7.3.0", - "resolved": "http://registry.npmjs.org/babelify/-/babelify-7.3.0.tgz", + "resolved": "https://registry.npmjs.org/babelify/-/babelify-7.3.0.tgz", "integrity": "sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU=", "requires": { "babel-core": "^6.0.14", @@ -697,29 +713,34 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "base-x": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-1.1.0.tgz", - "integrity": "sha1-QtPXF0dPnqAiB/bRqh9CaRPut6w=", - "dev": true + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.5.tgz", + "integrity": "sha512-C3picSgzPSLE+jW3tcBzJoGwitOtazb5B+5YmAxZm2ybmTi9LNgAtDO/jjVEBZwHoXmDBZ9m/IELj3elJVRBcA==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "optional": true, "requires": { "tweetnacl": "^0.14.3" } }, "bignumber.js": { - "version": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", - "from": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", - "dev": true + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", + "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==" }, "bindings": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz", - "integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "requires": { + "file-uri-to-path": "1.0.0" + } }, "bip39": { "version": "2.5.0", @@ -743,9 +764,9 @@ } }, "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", + "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==" }, "bn.js": { "version": "4.11.8", @@ -786,12 +807,21 @@ } }, "browserify-sha3": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/browserify-sha3/-/browserify-sha3-0.0.1.tgz", - "integrity": "sha1-P/NKMAbvFcD7NWflQbkaI0ASPRE=", + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/browserify-sha3/-/browserify-sha3-0.0.4.tgz", + "integrity": "sha1-CGxHuMgjFsnUcCLCYYWVRXbdjiY=", "dev": true, "requires": { - "js-sha3": "^0.3.1" + "js-sha3": "^0.6.1", + "safe-buffer": "^5.1.1" + }, + "dependencies": { + "js-sha3": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.6.1.tgz", + "integrity": "sha1-W4n3enR3Z5h39YxKB1JAk0sflcA=", + "dev": true + } } }, "browserslist": { @@ -804,22 +834,23 @@ } }, "bs58": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-3.1.0.tgz", - "integrity": "sha1-1MJjiL9IBMrHFBQbGUWqR+XrJI4=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", "dev": true, "requires": { - "base-x": "^1.1.0" + "base-x": "^3.0.2" } }, "bs58check": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-1.3.4.tgz", - "integrity": "sha1-xSVABzdJEXcU+gQsMEfrj5FRy/g=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", "dev": true, "requires": { - "bs58": "^3.1.0", - "create-hash": "^1.1.0" + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" } }, "buffer-from": { @@ -832,20 +863,16 @@ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" - }, "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true }, "caniuse-lite": { - "version": "1.0.30000885", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000885.tgz", - "integrity": "sha512-cXKbYwpxBLd7qHyej16JazPoUacqoVuDhvR61U7Fr5vSxMUiodzcYa1rQYRYfZ5GexV03vGZHd722vNPLjPJGQ==" + "version": "1.0.30000951", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000951.tgz", + "integrity": "sha512-eRhP+nQ6YUkIcNQ6hnvdhMkdc7n3zadog0KXNRxAZTT2kHjUb1yGn71OrPhSn8MOvlX97g5CR97kGVj8fMsXWg==" }, "caseless": { "version": "0.12.0", @@ -854,7 +881,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { "ansi-styles": "^2.2.1", @@ -862,13 +889,6 @@ "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } } }, "checkpoint-store": { @@ -889,13 +909,31 @@ } }, "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, "clone": { @@ -911,7 +949,8 @@ "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true }, "coinstring": { "version": "2.3.0", @@ -970,9 +1009,9 @@ } }, "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==" + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", + "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==" }, "core-util-is": { "version": "1.0.2", @@ -1005,19 +1044,29 @@ } }, "cross-fetch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.2.tgz", - "integrity": "sha1-pH/09/xxLauo9qaVoRyUhEDUVyM=", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.3.tgz", + "integrity": "sha512-PrWWNH3yL2NYIb/7WF/5vFG3DCQiXDOVf8k3ijatbrtnwNuhMWLC7YF7uqf53tbTFDzHIUD8oITw4Bxt8ST3Nw==", "requires": { "node-fetch": "2.1.2", "whatwg-fetch": "2.0.4" } }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, "crypto-js": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.8.tgz", - "integrity": "sha1-cV8HC/YBTyrpkqmLOSkli3E/CNU=", - "dev": true + "version": "3.1.9-1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.9-1.tgz", + "integrity": "sha1-/aGedh/Ad+Af+/3G6f38WeiAbNg=" }, "dashdash": { "version": "1.14.1", @@ -1028,18 +1077,18 @@ } }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true }, "deep-equal": { "version": "1.0.1", @@ -1098,9 +1147,9 @@ "dev": true }, "dotenv": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.0.0.tgz", - "integrity": "sha512-FlWbnhgjtwD+uNLUGHbMykMOYQaTivdHEmYwAKFjn6GKe/CqY0fNae93ZHTd20snh9ZLr8mTzIL9m0APQ1pjQg==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", + "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==", "dev": true }, "drbg.js": { @@ -1117,21 +1166,20 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "optional": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, "electron-to-chromium": { - "version": "1.3.68", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.68.tgz", - "integrity": "sha512-NHs9Xm6+ZUDkRj7t1tFwizzfMO2XZg0nmHNRRTurXHDUcEoz3Kdjs2mxXsd8drpEDfg5aVL0S8aypUCTA0HJ/Q==" + "version": "1.3.118", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.118.tgz", + "integrity": "sha512-/1FpHvmKmKo2Z6CCza2HfkrKvKhU7Rq4nvyX1FOherdTrdTufhVrJbCrcrIqgqUCI+BG6JC2rlY4z5QA1G0NOw==" }, "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", + "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "requires": { "bn.js": "^4.4.0", "brorand": "^1.0.1", @@ -1170,30 +1218,32 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, "requires": { "is-arrayish": "^0.2.1" } }, "es-abstract": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", - "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", "requires": { - "es-to-primitive": "^1.1.1", + "es-to-primitive": "^1.2.0", "function-bind": "^1.1.1", - "has": "^1.0.1", - "is-callable": "^1.1.3", - "is-regex": "^1.0.4" + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" } }, "es-to-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", "requires": { - "is-callable": "^1.1.1", + "is-callable": "^1.1.4", "is-date-object": "^1.0.1", - "is-symbol": "^1.0.1" + "is-symbol": "^1.0.2" } }, "escape-string-regexp": { @@ -1221,9 +1271,9 @@ } }, "eth-json-rpc-infura": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eth-json-rpc-infura/-/eth-json-rpc-infura-3.1.2.tgz", - "integrity": "sha512-IuK5Iowfs6taluA/3Okmu6EfZcFMq6MQuyrUL1PrCoJstuuBr3TvVeSy3keDyxfbrjFB34nCo538I8G+qMtsbw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eth-json-rpc-infura/-/eth-json-rpc-infura-3.2.0.tgz", + "integrity": "sha512-FLcpdxPRVBCUc7yoE+wHGvyYg2lATedP+/q7PsKvaSzQpJbgTG4ZjLnyrLanxDr6M1k/dSNa6V5QnILwjUKJcw==", "requires": { "cross-fetch": "^2.1.1", "eth-json-rpc-middleware": "^1.5.0", @@ -1266,17 +1316,42 @@ "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-1.4.2.tgz", "integrity": "sha1-jZWCAsftuq6Dlwf7pvCf8ydgYhA=", "requires": { - "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git#00ba8463a7f7a67fcad737ff9c2ebd95643427f7", + "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git#572d4bafe08a8a231137e1f9daeb0f8a23f197d2", "ethereumjs-util": "^5.1.1" + }, + "dependencies": { + "ethereumjs-abi": { + "version": "git+https://github.com/ethereumjs/ethereumjs-abi.git#572d4bafe08a8a231137e1f9daeb0f8a23f197d2", + "from": "git+https://github.com/ethereumjs/ethereumjs-abi.git", + "requires": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + }, + "dependencies": { + "ethereumjs-util": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz", + "integrity": "sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q==", + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "ethjs-util": "0.1.6", + "keccak": "^1.0.2", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1", + "secp256k1": "^3.0.1" + } + } + } + } } }, "eth-tx-summary": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/eth-tx-summary/-/eth-tx-summary-3.2.3.tgz", - "integrity": "sha512-1gZpA5fKarJOVSb5OUlPnhDQuIazqAkI61zlVvf5LdG47nEgw+/qhyZnuj3CUdE/TLTKuRzPLeyXLjaB4qWTRQ==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/eth-tx-summary/-/eth-tx-summary-3.2.4.tgz", + "integrity": "sha512-NtlDnaVZah146Rm8HMRUNMgIwG/ED4jiqk0TME9zFheMl1jOp6jL1m0NKGjJwehXQ6ZKCPr16MTr+qspKpEXNg==", "requires": { "async": "^2.1.2", - "bn.js": "^4.11.8", "clone": "^2.0.0", "concat-stream": "^1.5.1", "end-of-stream": "^1.1.0", @@ -1284,85 +1359,8 @@ "ethereumjs-block": "^1.4.1", "ethereumjs-tx": "^1.1.1", "ethereumjs-util": "^5.0.1", - "ethereumjs-vm": "2.3.4", - "through2": "^2.0.3", - "treeify": "^1.0.1", - "web3-provider-engine": "^13.3.2" - }, - "dependencies": { - "eth-block-tracker": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-2.3.1.tgz", - "integrity": "sha512-NamWuMBIl8kmkJFVj8WzGatySTzQPQag4Xr677yFxdVtIxACFbL/dQowk0MzEqIKk93U1TwY3MjVU6mOcwZnKA==", - "requires": { - "async-eventemitter": "github:ahultgren/async-eventemitter#fa06e39e56786ba541c180061dbf2c0a5bbf951c", - "eth-query": "^2.1.0", - "ethereumjs-tx": "^1.3.3", - "ethereumjs-util": "^5.1.3", - "ethjs-util": "^0.1.3", - "json-rpc-engine": "^3.6.0", - "pify": "^2.3.0", - "tape": "^4.6.3" - }, - "dependencies": { - "async-eventemitter": { - "version": "github:ahultgren/async-eventemitter#fa06e39e56786ba541c180061dbf2c0a5bbf951c", - "from": "github:ahultgren/async-eventemitter#fa06e39e56786ba541c180061dbf2c0a5bbf951c", - "requires": { - "async": "^2.4.0" - } - } - } - }, - "ethereum-common": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz", - "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==" - }, - "ethereumjs-vm": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.3.4.tgz", - "integrity": "sha512-Y4SlzNDqxrCO58jhp98HdnZVdjOqB+HC0hoU+N/DEp1aU+hFkRX/nru5F7/HkQRPIlA6aJlQp/xIA6xZs1kspw==", - "requires": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereum-common": "0.2.0", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~1.7.0", - "ethereumjs-util": "^5.1.3", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.1.2", - "rustbn.js": "~0.1.1", - "safe-buffer": "^5.1.1" - } - }, - "web3-provider-engine": { - "version": "13.8.0", - "resolved": "https://registry.npmjs.org/web3-provider-engine/-/web3-provider-engine-13.8.0.tgz", - "integrity": "sha512-fZXhX5VWwWpoFfrfocslyg6P7cN3YWPG/ASaevNfeO80R+nzgoPUBXcWQekSGSsNDkeRTis4aMmpmofYf1TNtQ==", - "requires": { - "async": "^2.5.0", - "clone": "^2.0.0", - "eth-block-tracker": "^2.2.2", - "eth-sig-util": "^1.4.2", - "ethereumjs-block": "^1.2.2", - "ethereumjs-tx": "^1.2.0", - "ethereumjs-util": "^5.1.1", - "ethereumjs-vm": "^2.0.2", - "fetch-ponyfill": "^4.0.0", - "json-rpc-error": "^2.0.0", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "readable-stream": "^2.2.9", - "request": "^2.67.0", - "semaphore": "^1.0.3", - "solc": "^0.4.2", - "tape": "^4.4.0", - "xhr": "^2.2.0", - "xtend": "^4.0.1" - } - } + "ethereumjs-vm": "^2.6.0", + "through2": "^2.0.3" } }, "ethereum-common": { @@ -1371,11 +1369,28 @@ "integrity": "sha1-L9w1dvIykDNYl26znaeDIT/5Uj8=" }, "ethereumjs-abi": { - "version": "git+https://github.com/ethereumjs/ethereumjs-abi.git#00ba8463a7f7a67fcad737ff9c2ebd95643427f7", - "from": "git+https://github.com/ethereumjs/ethereumjs-abi.git", + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.7.tgz", + "integrity": "sha512-EMLOA8ICO5yAaXDhjVEfYjsJIXYutY8ufTE93eEKwsVtp2usQreKwsDTJ9zvam3omYqNuffr8IONIqb2uUslGQ==", "requires": { - "bn.js": "^4.10.0", - "ethereumjs-util": "^5.0.0" + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + }, + "dependencies": { + "ethereumjs-util": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz", + "integrity": "sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q==", + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "ethjs-util": "0.1.6", + "keccak": "^1.0.2", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1", + "secp256k1": "^3.0.1" + } + } } }, "ethereumjs-account": { @@ -1408,9 +1423,9 @@ } }, "ethereumjs-common": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-0.4.1.tgz", - "integrity": "sha512-ywYGsOeGCsMNWso5Y4GhjWI24FJv9FK7+VyVKiQgXg8ZRDPXJ7F/kJ1CnjtkjTvDF4e0yqU+FWswlqR3bmZQ9Q==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.1.0.tgz", + "integrity": "sha512-LUmYkKV/HcZbWRyu3OU9YOevsH3VJDXtI6kEd8VZweQec+JjDGKCmAVKUyzhYUHqxRJu7JNALZ3A/b3NXOP6tA==" }, "ethereumjs-tx": { "version": "1.3.7", @@ -1422,9 +1437,9 @@ } }, "ethereumjs-util": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.1.5.tgz", - "integrity": "sha512-xPaSEATYJpMTCGowIt0oMZwFP4R1bxd6QsWgkcDvFL0JtXsr39p32WEcD14RscCjfP41YXZPCVWA4yAg0nrJmw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", + "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", "requires": { "bn.js": "^4.11.0", "create-hash": "^1.1.2", @@ -1436,84 +1451,123 @@ } }, "ethereumjs-vm": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.4.0.tgz", - "integrity": "sha512-MJ4lCWa5c6LhahhhvoDKW+YGjK00ZQn0RHHLh4L+WaH1k6Qv7/q3uTluew6sJGNCZdlO0yYMDXYW9qyxLHKlgQ==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz", + "integrity": "sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw==", "requires": { "async": "^2.1.2", "async-eventemitter": "^0.2.2", "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~1.7.0", - "ethereumjs-common": "~0.4.0", - "ethereumjs-util": "^5.2.0", + "ethereumjs-block": "~2.2.0", + "ethereumjs-common": "^1.1.0", + "ethereumjs-util": "^6.0.0", "fake-merkle-patricia-tree": "^1.0.1", "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.1.2", + "merkle-patricia-tree": "^2.3.2", "rustbn.js": "~0.2.0", "safe-buffer": "^5.1.1" }, "dependencies": { + "ethereumjs-block": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-2.2.0.tgz", + "integrity": "sha512-Ye+uG/L2wrp364Zihdlr/GfC3ft+zG8PdHcRtsBFNNH1CkOhxOwdB8friBU85n89uRZ9eIMAywCq0F4CwT1wAw==", + "requires": { + "async": "^2.0.1", + "ethereumjs-common": "^1.1.0", + "ethereumjs-tx": "^1.2.2", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + }, + "dependencies": { + "ethereumjs-util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", + "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "ethjs-util": "^0.1.3", + "keccak": "^1.0.2", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1", + "secp256k1": "^3.0.1" + } + } + } + }, "ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz", + "integrity": "sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q==", "requires": { "bn.js": "^4.11.0", "create-hash": "^1.1.2", - "ethjs-util": "^0.1.3", + "ethjs-util": "0.1.6", "keccak": "^1.0.2", "rlp": "^2.0.0", "safe-buffer": "^5.1.1", "secp256k1": "^3.0.1" } - }, - "rustbn.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" } } }, "ethereumjs-wallet": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-0.6.0.tgz", - "integrity": "sha1-gnY7Fpfuenlr5xVdqd+0my+Yz9s=", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-0.6.3.tgz", + "integrity": "sha512-qiXPiZOsStem+Dj/CQHbn5qex+FVkuPmGH7SvSnA9F3tdRDt8dLMyvIj3+U05QzVZNPYh4HXEdnzoYI4dZkr9w==", "dev": true, "requires": { - "aes-js": "^0.2.3", - "bs58check": "^1.0.8", - "ethereumjs-util": "^4.4.0", - "hdkey": "^0.7.0", - "scrypt.js": "^0.2.0", - "utf8": "^2.1.1", - "uuid": "^2.0.1" + "aes-js": "^3.1.1", + "bs58check": "^2.1.2", + "ethereumjs-util": "^6.0.0", + "hdkey": "^1.1.0", + "randombytes": "^2.0.6", + "safe-buffer": "^5.1.2", + "scrypt.js": "^0.3.0", + "utf8": "^3.0.0", + "uuid": "^3.3.2" }, "dependencies": { "aes-js": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-0.2.4.tgz", - "integrity": "sha1-lLiBq3FyhtAV+iGeCPtmcJ3aWj0=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", + "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==", "dev": true }, "ethereumjs-util": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-4.5.0.tgz", - "integrity": "sha1-PpQosxfuvaPXJg2FT93alUsfG8Y=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz", + "integrity": "sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q==", "dev": true, "requires": { - "bn.js": "^4.8.0", + "bn.js": "^4.11.0", "create-hash": "^1.1.2", - "keccakjs": "^0.2.0", + "ethjs-util": "0.1.6", + "keccak": "^1.0.2", "rlp": "^2.0.0", + "safe-buffer": "^5.1.1", "secp256k1": "^3.0.1" } + }, + "utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true } } }, "ethers": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-3.0.15.tgz", - "integrity": "sha512-d/tiMUavaeaY2GFqjpgfPzT46cEc0cilP3hnlTXR3LR/HR5Qrhv4PfdgW3gxBlR5aBTtUeM/lo8z8ph3JdtFhQ==", + "version": "3.0.29", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-3.0.29.tgz", + "integrity": "sha512-OGyA5pW5xFC5o/ZV5MfIoVp/EdA1QMg2bMJFf7Kznsz8m7IzzbgsPHTCjzSfKQDs/XDphGyRcA7A6bkIeJL4gw==", "requires": { "aes-js": "3.0.0", "bn.js": "^4.4.0", @@ -1542,28 +1596,13 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" - }, - "setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=" - }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" } } }, "ethjs-abi": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ethjs-abi/-/ethjs-abi-0.2.1.tgz", - "integrity": "sha1-4KepOn6BFjqUR3utVu3lJKtt5TM=", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/ethjs-abi/-/ethjs-abi-0.1.8.tgz", + "integrity": "sha1-zSiFg+1ijN+tr4re+juh28vKbBg=", "requires": { "bn.js": "4.11.6", "js-sha3": "0.5.5", @@ -1583,14 +1622,19 @@ } }, "ethjs-util": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.4.tgz", - "integrity": "sha1-HItoeSV0RO9NPz+7rC3tEs2ZfZM=", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", "requires": { "is-hex-prefixed": "1.0.0", "strip-hex-prefix": "1.0.0" } }, + "events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", + "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==" + }, "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", @@ -1600,6 +1644,21 @@ "safe-buffer": "^5.1.1" } }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -1647,13 +1706,18 @@ } } }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "locate-path": "^2.0.0" } }, "for-each": { @@ -1670,29 +1734,20 @@ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "requires": { "asynckit": "^0.4.0", - "combined-stream": "1.0.6", + "combined-stream": "^1.0.6", "mime-types": "^2.1.12" - }, - "dependencies": { - "combined-stream": { - "version": "1.0.6", - "resolved": "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "requires": { - "delayed-stream": "~1.0.0" - } - } } }, "fs-extra": { "version": "0.30.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "dev": true, "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^2.1.0", @@ -1717,9 +1772,16 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true }, "getpass": { "version": "0.1.7", @@ -1730,9 +1792,9 @@ } }, "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1757,9 +1819,10 @@ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" }, "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true }, "growl": { "version": "1.10.3", @@ -1773,12 +1836,35 @@ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", - "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", "requires": { - "ajv": "^5.3.0", + "ajv": "^6.5.5", "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + } } }, "has": { @@ -1803,6 +1889,11 @@ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", "dev": true }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" + }, "hash-base": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", @@ -1813,21 +1904,22 @@ } }, "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "requires": { "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" + "minimalistic-assert": "^1.0.1" } }, "hdkey": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/hdkey/-/hdkey-0.7.1.tgz", - "integrity": "sha1-yu5L6BqneSHpCbjSKN0PKayu5jI=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/hdkey/-/hdkey-1.1.1.tgz", + "integrity": "sha512-DvHZ5OuavsfWs5yfVJZestsnc3wzPvLWNk6c2nRUfo6X+OtxypGt20vDDf7Ba+MJzjL3KS1og2nw2eBbLCOUTA==", "dev": true, "requires": { "coinstring": "^2.0.0", + "safe-buffer": "^5.1.1", "secp256k1": "^3.0.1" } }, @@ -1857,9 +1949,10 @@ } }, "hosted-git-info": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", - "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==" + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true }, "http-signature": { "version": "1.2.0", @@ -1909,20 +2002,14 @@ "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "requires": { - "builtin-modules": "^1.0.0" - } + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true }, "is-callable": { "version": "1.1.4", @@ -1948,12 +2035,10 @@ "integrity": "sha1-lUPV3nvPWwiiLsiiC65uKG1RDYw=" }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true }, "is-function": { "version": "1.0.1", @@ -1979,9 +2064,12 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "requires": { + "has-symbols": "^1.0.0" + } }, "is-typedarray": { "version": "1.0.0", @@ -1991,23 +2079,29 @@ "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "js-sha3": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.3.1.tgz", - "integrity": "sha1-hhIoAhQvCChQKg0d7h2V4lO7AkM=", - "dev": true + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" }, "js-tokens": { "version": "3.0.2", @@ -2017,8 +2111,7 @@ "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "optional": true + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, "jsesc": { "version": "0.5.0", @@ -2026,16 +2119,16 @@ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" }, "json-rpc-engine": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-3.7.3.tgz", - "integrity": "sha512-+FO3UWu/wafh/+MZ6BXy0HZU+f5plwUn82FgxpC0scJkEh5snOjFrAAtqCITPDfvfLHRUFOG5pQDUx2pspfERQ==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-3.8.0.tgz", + "integrity": "sha512-6QNcvm2gFuuK4TKU1uwfH0Qd/cOSb9c1lls0gbnIhciktIUQJwz6NQNAW4B1KiGPenv7IKu97V222Yo1bNhGuA==", "requires": { "async": "^2.0.1", - "babel-preset-env": "^1.3.2", + "babel-preset-env": "^1.7.0", "babelify": "^7.3.0", - "clone": "^2.1.1", "json-rpc-error": "^2.0.0", - "promise-to-callback": "^1.0.0" + "promise-to-callback": "^1.0.0", + "safe-event-emitter": "^1.0.1" } }, "json-rpc-error": { @@ -2083,6 +2176,7 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, "requires": { "graceful-fs": "^4.1.6" } @@ -2115,19 +2209,20 @@ } }, "keccakjs": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/keccakjs/-/keccakjs-0.2.1.tgz", - "integrity": "sha1-HWM6+QfvMFu/ny+mFtVsRFYd+k0=", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/keccakjs/-/keccakjs-0.2.3.tgz", + "integrity": "sha512-BjLkNDcfaZ6l8HBG9tH0tpmDv3sS2mA7FNQxFHpCdzP3Gb2MVruXBSuoM66SnVxKJpAr5dKGdkHD+bDokt8fTg==", "dev": true, "requires": { - "browserify-sha3": "^0.0.1", - "sha3": "^1.1.0" + "browserify-sha3": "^0.0.4", + "sha3": "^1.2.2" } }, "klaw": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, "requires": { "graceful-fs": "^4.1.9" } @@ -2136,6 +2231,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, "requires": { "invert-kv": "^1.0.0" } @@ -2171,7 +2267,7 @@ }, "readable-stream": { "version": "1.1.14", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "requires": { "core-util-is": "~1.0.0", @@ -2208,7 +2304,7 @@ }, "readable-stream": { "version": "1.0.34", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "requires": { "core-util-is": "~1.0.0", @@ -2257,6 +2353,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", @@ -2265,6 +2362,16 @@ "strip-bom": "^2.0.0" } }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, "lodash": { "version": "4.17.11", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", @@ -2273,7 +2380,8 @@ "lodash.assign": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true }, "loose-envify": { "version": "1.4.0", @@ -2283,18 +2391,38 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, "ltgt": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=" }, "md5.js": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", - "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "requires": { "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" } }, "memdown": { @@ -2323,12 +2451,13 @@ "memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=" + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "dev": true }, "merkle-patricia-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.1.tgz", - "integrity": "sha512-Qp9Mpb3xazznXzzGQBqHbqCpT2AR9joUOHYYPiQjYCarrdCPCnLWXo4BFv77y4xN26KR224xoU1n/qYY7RYYgw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz", + "integrity": "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==", "requires": { "async": "^1.4.2", "ethereumjs-util": "^5.0.0", @@ -2348,18 +2477,24 @@ } }, "mime-db": { - "version": "1.36.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz", - "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==" + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", + "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" }, "mime-types": { - "version": "2.1.20", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", - "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", + "version": "2.1.22", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", + "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", "requires": { - "mime-db": "~1.36.0" + "mime-db": "~1.38.0" } }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, "min-document": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", @@ -2415,34 +2550,84 @@ "he": "1.1.1", "mkdirp": "0.5.1", "supports-color": "4.4.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" - }, - "node-fetch": { + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "supports-color": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "dev": true, + "requires": { + "has-flag": "^2.0.0" + } + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "nan": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.1.tgz", + "integrity": "sha512-I6YB/YEuDeUZMmhscXKxGgZlFnhsn5y0hgOZBadkzfTRrZBtJDZeg6eQf7PYMIEclwmorTKK8GztsyOUSVBREA==" + }, + "node-fetch": { "version": "2.1.2", - "resolved": "http://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz", "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=" }, "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, "requires": { "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", + "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -2480,9 +2665,9 @@ "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==" }, "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", + "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==" }, "once": { "version": "1.4.0", @@ -2504,11 +2689,14 @@ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, "requires": { - "lcid": "^1.0.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" } }, "os-tmpdir": { @@ -2516,36 +2704,71 @@ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, "parse-headers": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.1.tgz", - "integrity": "sha1-aug6eqJanZtwCswoaYzR8e1+lTY=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.2.tgz", + "integrity": "sha512-/LypJhzFmyBIDYP9aDVgeyEb5sQfbfY5mnDq4hVhlQ69js87wXfmEI5V3xI6vvXasqebp0oCytYFLxsBVfCzSg==", "requires": { - "for-each": "^0.3.2", - "trim": "0.0.1" + "for-each": "^0.3.3", + "string.prototype.trim": "^1.1.2" } }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, "requires": { "error-ex": "^1.2.0" } }, "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "requires": { - "pinkie-promise": "^2.0.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", @@ -2555,6 +2778,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, "requires": { "graceful-fs": "^4.1.2", "pify": "^2.0.0", @@ -2562,9 +2786,9 @@ } }, "pbkdf2": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", - "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "dev": true, "requires": { "create-hash": "^1.1.2", @@ -2587,12 +2811,14 @@ "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true }, "pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, "requires": { "pinkie": "^2.0.0" } @@ -2631,15 +2857,21 @@ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, "psl": { - "version": "1.1.29", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", - "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==" + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" }, "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "qs": { "version": "6.5.2", @@ -2647,9 +2879,9 @@ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { "safe-buffer": "^5.1.0" @@ -2659,6 +2891,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, "requires": { "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", @@ -2669,14 +2902,36 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, "requires": { "find-up": "^1.0.0", "read-pkg": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + } } }, "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { "core-util-is": "~1.0.0", @@ -2766,11 +3021,6 @@ "uuid": "^3.3.2" }, "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, "uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", @@ -2781,24 +3031,27 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true }, "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true }, "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true }, "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", "requires": { - "path-parse": "^1.0.5" + "path-parse": "^1.0.6" } }, "resumer": { @@ -2810,46 +3063,49 @@ } }, "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, "requires": { - "glob": "^7.0.5" + "glob": "^7.1.3" } }, "ripemd160": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "requires": { - "hash-base": "^2.0.0", + "hash-base": "^3.0.0", "inherits": "^2.0.1" - }, - "dependencies": { - "hash-base": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", - "requires": { - "inherits": "^2.0.1" - } - } } }, "rlp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.0.0.tgz", - "integrity": "sha1-nbOE/0uJqPYVY9kjldhiWxjzr7A=" + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.3.tgz", + "integrity": "sha512-l6YVrI7+d2vpW6D6rS05x2Xrmq8oW7v3pieZOJKBEdjuTF4Kz/iwk55Zyh1Zaz+KOB2kC8+2jZlp2u9L4tTzCQ==", + "requires": { + "bn.js": "^4.11.1", + "safe-buffer": "^5.1.1" + } }, "rustbn.js": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.1.2.tgz", - "integrity": "sha512-bAkNqSHYdJdFsBC7Z11JgzYktL31HIpB2o70jZcGiL1U1TVtPyvaVhDrGWwS8uZtaqwW2k6NOPGZCqW/Dgh5Lg==" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", + "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" }, "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-event-emitter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz", + "integrity": "sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg==", + "requires": { + "events": "^3.0.0" + } }, "safer-buffer": { "version": "2.1.2", @@ -2861,6 +3117,7 @@ "resolved": "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz", "integrity": "sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=", "dev": true, + "optional": true, "requires": { "nan": "^2.0.8" } @@ -2871,9 +3128,9 @@ "integrity": "sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q=" }, "scrypt.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/scrypt.js/-/scrypt.js-0.2.0.tgz", - "integrity": "sha1-r40UZbcemZARC+38WTuUeeA6ito=", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/scrypt.js/-/scrypt.js-0.3.0.tgz", + "integrity": "sha512-42LTc1nyFsyv/o0gcHtDztrn+aqpkaCNt5Qh7ATBZfhEZU7IC/0oT/qbBH+uRNoAPvs2fwiOId68FDEoSRA8/A==", "dev": true, "requires": { "scrypt": "^6.0.2", @@ -2890,9 +3147,9 @@ } }, "secp256k1": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.5.0.tgz", - "integrity": "sha512-e5QIJl8W7Y4tT6LHffVcZAxJjvpgE5Owawv6/XCYPQljE9aP2NFFddQ8OYMKhdLshNu88FfL3qCN3/xYkXGRsA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.6.2.tgz", + "integrity": "sha512-90nYt7yb0LmI4A2jJs1grglkTAXrBwxYAjP9bpeKjvJKOjG2fOeH/YI/lchDMIvjrOasd5QXwvV2jwN168xNng==", "requires": { "bindings": "^1.2.1", "bip66": "^1.1.3", @@ -2910,20 +3167,26 @@ "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==" }, "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true }, "set-immediate-shim": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" }, + "setimmediate": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", + "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=" + }, "sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", @@ -2940,25 +3203,42 @@ "dev": true, "requires": { "nan": "2.10.0" + }, + "dependencies": { + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "dev": true + } } }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" }, - "solc": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.24.tgz", - "integrity": "sha512-2xd7Cf1HeVwrIb6Bu1cwY2/TaLRodrppCq3l7rhLimFQgmxptXhTC3+/wesVLpB09F1A2kZgvbMOgH7wvhFnBQ==", - "requires": { - "fs-extra": "^0.30.0", - "memorystream": "^0.3.1", - "require-from-string": "^1.1.0", - "semver": "^5.3.0", - "yargs": "^4.7.1" - } - }, "solmd": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/solmd/-/solmd-0.3.0.tgz", @@ -2971,11 +3251,114 @@ "solc": "^0.4.23" }, "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "dev": true + }, + "solc": { + "version": "0.4.25", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.25.tgz", + "integrity": "sha512-jU1YygRVy6zatgXrLY2rRm7HW1d7a8CkkEgNJwvH2VLpWhMFsMdWcJn6kUqZwcSz/Vm+w89dy7Z/aB5p6AFTrg==", + "dev": true, + "requires": { + "fs-extra": "^0.30.0", + "memorystream": "^0.3.1", + "require-from-string": "^1.1.0", + "semver": "^5.3.0", + "yargs": "^4.7.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "yargs": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", + "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", + "dev": true, + "requires": { + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "lodash.assign": "^4.0.3", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.1", + "which-module": "^1.0.0", + "window-size": "^0.2.0", + "y18n": "^3.2.1", + "yargs-parser": "^2.4.1" + } + }, + "yargs-parser": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", + "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "lodash.assign": "^4.0.6" + } } } }, @@ -2993,37 +3376,41 @@ } }, "spdx-correct": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true }, "spdx-expression-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", + "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", + "dev": true }, "sshpk": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", - "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -3037,13 +3424,30 @@ } }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, "string.prototype.trim": { @@ -3076,10 +3480,17 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, "requires": { "is-utf8": "^0.2.0" } }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, "strip-hex-prefix": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", @@ -3089,29 +3500,25 @@ } }, "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", - "dev": true, - "requires": { - "has-flag": "^2.0.0" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" }, "tape": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/tape/-/tape-4.9.1.tgz", - "integrity": "sha512-6fKIXknLpoe/Jp4rzHKFPpJUHDHDqn8jus99IfPnHIjyz78HYlefTGD3b5EkbQzuLfaEvmfPK3IolLgq2xT3kw==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/tape/-/tape-4.10.1.tgz", + "integrity": "sha512-G0DywYV1jQeY3axeYnXUOt6ktnxS9OPJh97FGR3nrua8lhWi1zPflLxcAHavZ7Jf3qUfY7cxcVIVFa4mY2IY1w==", "requires": { "deep-equal": "~1.0.1", "defined": "~1.0.0", "for-each": "~0.3.3", "function-bind": "~1.1.1", - "glob": "~7.1.2", + "glob": "~7.1.3", "has": "~1.0.3", "inherits": "~2.0.3", "minimist": "~1.2.0", "object-inspect": "~1.6.0", - "resolve": "~1.7.1", + "resolve": "~1.10.0", "resumer": "~0.0.0", "string.prototype.trim": "~1.1.2", "through": "~2.3.8" @@ -3119,22 +3526,22 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" } } }, "through": { "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "requires": { - "readable-stream": "^2.1.5", + "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, @@ -3150,34 +3557,80 @@ "requires": { "psl": "^1.1.24", "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } } }, - "treeify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", - "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==" - }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" - }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" }, "truffle": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/truffle/-/truffle-4.1.12.tgz", - "integrity": "sha1-9F9LbBzhWGX817v19jNA9eFuKVA=", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/truffle/-/truffle-5.0.8.tgz", + "integrity": "sha512-8Sf9GKD6Y99fcHDYQCE9hRxYWm+rpptye4Ez08G8OsaCSsbEqRzyCZf18FdLLL3iWYJZ9S+tA1P0YZVxGDQ2nw==", "dev": true, "requires": { + "app-module-path": "^2.2.0", "mocha": "^4.1.0", "original-require": "1.0.1", - "solc": "0.4.24" + "solc": "0.5.0" + }, + "dependencies": { + "solc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.5.0.tgz", + "integrity": "sha512-mdLHDl9WeYrN+FIKcMc9PlPfnA9DG9ur5QpCDKcv6VC4RINAsTF4EMuXMZMKoQTvZhtLyJIVH/BZ+KU830Z8Xg==", + "dev": true, + "requires": { + "fs-extra": "^0.30.0", + "keccak": "^1.0.2", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "yargs": "^11.0.0" + } + } + } + }, + "truffle-blockchain-utils": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/truffle-blockchain-utils/-/truffle-blockchain-utils-0.0.5.tgz", + "integrity": "sha1-pOXAZNrdafeCoTfz0nbSEJXaekc=" + }, + "truffle-contract": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/truffle-contract/-/truffle-contract-3.0.7.tgz", + "integrity": "sha512-av4MTJDP29PI3oVh8TrvRzRHt+nZJH8ODSiil/TfcXrKMSes52DTA5LHj00siLvcadkxUgoEZfEZ04qqhNGoiA==", + "requires": { + "ethjs-abi": "0.1.8", + "truffle-blockchain-utils": "^0.0.5", + "truffle-contract-schema": "^2.0.2", + "truffle-error": "^0.0.3", + "web3": "0.20.6" } }, + "truffle-contract-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/truffle-contract-schema/-/truffle-contract-schema-2.0.2.tgz", + "integrity": "sha512-8mYAu0Y7wgMqcIa612dxiN9pzr6rq2YxZCzPizvqyDq+/rGWy8s0irl/T7i92a/4ME1V5ddNFf3+86uIlYbPUg==", + "requires": { + "ajv": "^5.1.1", + "crypto-js": "^3.1.9-1", + "debug": "^3.1.0" + } + }, + "truffle-error": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/truffle-error/-/truffle-error-0.0.3.tgz", + "integrity": "sha1-S/VSQuFN7uHHGUkycJGC3v8sl8o=" + }, "truffle-hdwallet-provider": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/truffle-hdwallet-provider/-/truffle-hdwallet-provider-0.0.5.tgz", @@ -3188,6 +3641,32 @@ "ethereumjs-wallet": "^0.6.0", "web3": "^0.18.2", "web3-provider-engine": "^14.0.5" + }, + "dependencies": { + "bignumber.js": { + "version": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", + "from": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", + "dev": true + }, + "crypto-js": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.8.tgz", + "integrity": "sha1-cV8HC/YBTyrpkqmLOSkli3E/CNU=", + "dev": true + }, + "web3": { + "version": "0.18.4", + "resolved": "https://registry.npmjs.org/web3/-/web3-0.18.4.tgz", + "integrity": "sha1-gewXhBRUkfLqqJVbMcBgSeB8Xn0=", + "dev": true, + "requires": { + "bignumber.js": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", + "crypto-js": "^3.1.4", + "utf8": "^2.1.1", + "xhr2": "*", + "xmlhttprequest": "*" + } + } } }, "tunnel-agent": { @@ -3201,8 +3680,7 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "optional": true + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, "typedarray": { "version": "0.0.6", @@ -3210,16 +3688,23 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "unorm": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz", - "integrity": "sha1-NkIA1fE2RsqLzURJAnEzVhR5IwA=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.5.0.tgz", + "integrity": "sha512-sMfSWoiRaXXeDZSXC+YRZ23H4xchQpwxjpw1tmfR+kgbBCaOgln4NI0LXejJIhnBuKINrB3WRn+ZI8IWssirVw==", "dev": true }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + } + }, "utf8": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", - "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=", - "dev": true + "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=" }, "util-deprecate": { "version": "1.0.2", @@ -3227,15 +3712,15 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", - "dev": true + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" }, "validate-npm-package-license": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", - "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -3252,22 +3737,32 @@ } }, "web3": { - "version": "0.18.4", - "resolved": "https://registry.npmjs.org/web3/-/web3-0.18.4.tgz", - "integrity": "sha1-gewXhBRUkfLqqJVbMcBgSeB8Xn0=", - "dev": true, + "version": "0.20.6", + "resolved": "https://registry.npmjs.org/web3/-/web3-0.20.6.tgz", + "integrity": "sha1-PpcwauAk+yThCj11yIQwJWIhUSA=", "requires": { - "bignumber.js": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", + "bignumber.js": "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934", "crypto-js": "^3.1.4", "utf8": "^2.1.1", "xhr2": "*", "xmlhttprequest": "*" + }, + "dependencies": { + "bignumber.js": { + "version": "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934", + "from": "git+https://github.com/frozeman/bignumber.js-nolookahead.git" + }, + "crypto-js": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.8.tgz", + "integrity": "sha1-cV8HC/YBTyrpkqmLOSkli3E/CNU=" + } } }, "web3-provider-engine": { - "version": "14.0.6", - "resolved": "https://registry.npmjs.org/web3-provider-engine/-/web3-provider-engine-14.0.6.tgz", - "integrity": "sha512-tr5cGSyxfSC/JqiUpBlJtfZpwQf1yAA8L/zy1C6fDFm0ntR974pobJ4v4676atpZne4Ze5VFy3kPPahHe9gQiQ==", + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/web3-provider-engine/-/web3-provider-engine-14.2.0.tgz", + "integrity": "sha512-sfLH5VhGjJrJJT5WcF8aGehcIKRUQ553q9tjQkkLaKU2AaLsRcwffnnWvrgeTkmKSf0y9dwkDTa48RVp+GUCSg==", "requires": { "async": "^2.5.0", "backoff": "^2.5.0", @@ -3284,9 +3779,8 @@ "json-stable-stringify": "^1.0.1", "promise-to-callback": "^1.0.0", "readable-stream": "^2.2.9", - "request": "^2.67.0", + "request": "^2.85.0", "semaphore": "^1.0.3", - "tape": "^4.4.0", "ws": "^5.1.1", "xhr": "^2.2.0", "xtend": "^4.0.1" @@ -3294,26 +3788,60 @@ }, "whatwg-fetch": { "version": "2.0.4", - "resolved": "http://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true }, "window-size": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=" + "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", + "dev": true }, "wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } } }, "wrappy": { @@ -3343,8 +3871,7 @@ "xhr2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.1.4.tgz", - "integrity": "sha1-f4dliEdxbbUCYyOBL4GMras4el8=", - "dev": true + "integrity": "sha1-f4dliEdxbbUCYyOBL4GMras4el8=" }, "xmlhttprequest": { "version": "1.8.0", @@ -3359,52 +3886,42 @@ "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true }, "yargs": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", - "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", + "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", + "dev": true, "requires": { - "cliui": "^3.2.0", + "cliui": "^4.0.0", "decamelize": "^1.1.1", + "find-up": "^2.1.0", "get-caller-file": "^1.0.1", - "lodash.assign": "^4.0.3", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", + "os-locale": "^2.0.0", "require-directory": "^2.1.1", "require-main-filename": "^1.0.1", "set-blocking": "^2.0.0", - "string-width": "^1.0.1", - "which-module": "^1.0.0", - "window-size": "^0.2.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", "y18n": "^3.2.1", - "yargs-parser": "^2.4.1" + "yargs-parser": "^9.0.2" } }, "yargs-parser": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", - "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", - "requires": { - "camelcase": "^3.0.0", - "lodash.assign": "^4.0.6" - } - }, - "zeppelin-solidity": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/zeppelin-solidity/-/zeppelin-solidity-1.8.0.tgz", - "integrity": "sha512-7Mxq6Y7EES0PSLrRF6v0EVYqBVRRo8hFrr7m3jEs69VbbQ5kpANzizeEdbP1/PWKSOmBOg208qP2vSA0FlzFLA==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "dev": true, "requires": { - "dotenv": "^4.0.0", - "ethjs-abi": "^0.2.1" - }, - "dependencies": { - "dotenv": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", - "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=" - } + "camelcase": "^4.1.0" } } } diff --git a/package.json b/package.json index a33de8e..3d1f471 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "tokeninc-smart-contracts", - "version": "0.1.0", - "description": "Smart Contracts for Token, Inc.", + "version": "1.0.1", + "description": "Ethereum Smart Contracts for Token, Inc.", "main": "./dist/index.js", "directories": { "test": "test" @@ -35,17 +35,18 @@ "license": "SEE LICENSE IN LICENSE.md", "repository": "https://github.com/tokenio/tokeninc-smart-contracts.git", "dependencies": { + "bignumber.js": "^7.2.0", "bluebird": "^3.5.1", + "ethereumjs-abi": "^0.6.5", "ethereumjs-util": "^5.1.5", "ethers": "^3.0.15", - "web3-provider-engine": "^14.0.6", - "zeppelin-solidity": "1.8.0" + "truffle-contract": "^3.0.6", + "web3-provider-engine": "^14.0.6" }, "devDependencies": { - "dotenv": "^6.0.0", - "solc": "^0.4.24", + "dotenv": "^6.2.0", "solmd": "^0.3.0", - "truffle": "^4.1.12", + "truffle": "^5.0.8", "truffle-hdwallet-provider": "0.0.5" } } diff --git a/test/TokenIOAuthority.js b/test/TokenIOAuthority.js deleted file mode 100644 index 94ad347..0000000 --- a/test/TokenIOAuthority.js +++ /dev/null @@ -1,70 +0,0 @@ -var { utils } = require('ethers'); -var Promise = require('bluebird') -var TokenIOAuthority = artifacts.require("./TokenIOAuthority.sol"); - -const { mode, development, production } = require('../token.config.js'); -const { - AUTHORITY_DETAILS: { firmName, authorityAddress }, - TOKEN_DETAILS -} = mode == 'production' ? production : development; - -const USDx = TOKEN_DETAILS['USDx'] - -contract("TokenIOAuthority", function(accounts) { - - // Global Test Variables; - const AUTHORITY_ACCOUNT_0 = accounts[0]; - const AUTHORITY_ACCOUNT_1 = accounts[1]; - const FIRM_NAME = firmName; - const NEW_FIRM_NAME = "Test Firm, L.L.C." - const AUTHORITY_ACCOUNT_2 = accounts[2]; - - - it("Should confirm AUTHORITY_ACCOUNT has been set appropriately", async () => { - const authority = await TokenIOAuthority.deployed(); - const isAuthorized = await authority.isRegisteredToFirm(FIRM_NAME, AUTHORITY_ACCOUNT_0); - assert.equal(isAuthorized, true, "Authority firm and address should be authorized"); - }); - - it("Should confirm FIRM_NAME has been set appropriately", async () => { - const authority = await TokenIOAuthority.deployed(); - const authorityFirm = await authority.getFirmFromAuthority(AUTHORITY_ACCOUNT_0); - assert.equal(authorityFirm, FIRM_NAME, "Authority firm should be set to the firmName"); - }) - - it("Should confirm non-authority is not authorized", async () => { - const authority = await TokenIOAuthority.deployed(); - const isAuthorized = await authority.isRegisteredAuthority(AUTHORITY_ACCOUNT_1); - assert.equal(isAuthorized, false, "Non registered account should not be authorized"); - }) - - it("Should register a new firm and a firm authority", async () => { - const authority = await TokenIOAuthority.deployed(); - const NEW_FIRM_TX = await authority.setRegisteredFirm(NEW_FIRM_NAME, true) - const NEW_AUTHORITY_TX = await authority.setRegisteredAuthority(NEW_FIRM_NAME, AUTHORITY_ACCOUNT_2, true) - - assert.equal(NEW_FIRM_TX['receipt']['status'], "0x1", "Transaction should succeed") - assert.equal(NEW_AUTHORITY_TX['receipt']['status'], "0x1", "Transaction should succeed") - - const isRegisteredFirm = await authority.isRegisteredFirm(NEW_FIRM_NAME); - assert.equal(isRegisteredFirm, true, "New firm should be registered"); - - const isAuthorized = await authority.isRegisteredToFirm(NEW_FIRM_NAME, AUTHORITY_ACCOUNT_2); - assert.equal(isAuthorized, true, "Authority firm and address should be authorized"); - - }) - - it("Should allow AUTHORITY_ACCOUNT_2 to register AUTHORITY_ACCOUNT_1 to NEW_FIRM_NAME", async () => { - const authority = await TokenIOAuthority.deployed(); - const NEW_AUTHORITY_TX = await authority.setRegisteredAuthority(NEW_FIRM_NAME, AUTHORITY_ACCOUNT_1, true, { from: AUTHORITY_ACCOUNT_2 }) - - assert.equal(NEW_AUTHORITY_TX['receipt']['status'], "0x1", "Transaction should succeed") - - const isAuthorized = await authority.isRegisteredToFirm(NEW_FIRM_NAME, AUTHORITY_ACCOUNT_1); - assert.equal(isAuthorized, true, "Authority firm and address should be authorized"); - - }) - - - -}); diff --git a/test/TokenIOAuthorityProxy.js b/test/TokenIOAuthorityProxy.js new file mode 100644 index 0000000..19e93c5 --- /dev/null +++ b/test/TokenIOAuthorityProxy.js @@ -0,0 +1,109 @@ +var { utils } = require('ethers'); +var Promise = require('bluebird') +var TokenIOAuthorityProxy = artifacts.require("./TokenIOAuthorityProxy.sol"); + + +const { mode, development, production } = require('../token.config.js'); +const { + AUTHORITY_DETAILS: { firmName, authorityAddress }, + TOKEN_DETAILS +} = mode == 'production' ? production : development; + +const USDx = TOKEN_DETAILS['USDx'] + +contract("TokenIOAuthorityProxy", function(accounts) { + + // Global Test Variables; + const AUTHORITY_ACCOUNT_0 = accounts[0]; + const AUTHORITY_ACCOUNT_1 = accounts[1]; + const FIRM_NAME = firmName; + const NEW_FIRM_NAME = "Test Firm, L.L.C." + const AUTHORITY_ACCOUNT_2 = accounts[2]; + const AUTHORITY_ACCOUNT_3 = accounts[3]; + + before(async function () { + this.tokenIOAuthorityProxy = await TokenIOAuthorityProxy.deployed(); + }); + + describe("Should confirm AUTHORITY_ACCOUNT has been set appropriately", function () { + it("Should pass", async function () { + const isAuthorized = await this.tokenIOAuthorityProxy.isRegisteredToFirm(FIRM_NAME, AUTHORITY_ACCOUNT_0); + assert.equal(isAuthorized, true, "Authority firm and address should be authorized"); + }); + }) + + describe("Should confirm FIRM_NAME has been set appropriately", function () { + it("Should pass", async function () { + const authorityFirm = await this.tokenIOAuthorityProxy.getFirmFromAuthority(AUTHORITY_ACCOUNT_0); + assert.equal(authorityFirm, FIRM_NAME, "Authority firm should be set to the firmName"); + }) + }) + + describe("Should confirm non-authority is not authorized", function () { + it("Should pass", async function () { + const isAuthorized = await this.tokenIOAuthorityProxy.isRegisteredAuthority(AUTHORITY_ACCOUNT_1); + assert.equal(isAuthorized, false, "Non registered account should not be authorized"); + }) + }) + + describe("Should register a new firm and a firm authority", function () { + it("Should pass", async function () { + const NEW_FIRM_TX = await this.tokenIOAuthorityProxy.setRegisteredFirm(NEW_FIRM_NAME, true) + const NEW_AUTHORITY_TX = await this.tokenIOAuthorityProxy.setRegisteredAuthority(NEW_FIRM_NAME, AUTHORITY_ACCOUNT_2, true) + + assert.equal(NEW_FIRM_TX['receipt']['status'], "0x1", "Transaction should succeed") + assert.equal(NEW_AUTHORITY_TX['receipt']['status'], "0x1", "Transaction should succeed") + + const isRegisteredFirm = await this.tokenIOAuthorityProxy.isRegisteredFirm(NEW_FIRM_NAME); + assert.equal(isRegisteredFirm, true, "New firm should be registered"); + + const isAuthorized = await this.tokenIOAuthorityProxy.isRegisteredToFirm(NEW_FIRM_NAME, AUTHORITY_ACCOUNT_2); + assert.equal(isAuthorized, true, "Authority firm and address should be authorized"); + }) + }) + + describe("Should allow AUTHORITY_ACCOUNT_2 to register AUTHORITY_ACCOUNT_1 to NEW_FIRM_NAME", function () { + it("Should pass", async function () { + const NEW_AUTHORITY_TX = await this.tokenIOAuthorityProxy.setRegisteredAuthority(NEW_FIRM_NAME, AUTHORITY_ACCOUNT_1, true, { from: AUTHORITY_ACCOUNT_2 }) + + assert.equal(NEW_AUTHORITY_TX['receipt']['status'], "0x1", "Transaction should succeed") + + const isAuthorized = await this.tokenIOAuthorityProxy.isRegisteredToFirm(NEW_FIRM_NAME, AUTHORITY_ACCOUNT_1); + assert.equal(isAuthorized, true, "Authority firm and address should be authorized"); + }) + }) + + describe('staticCall', function () { + it('Should pass', async function () { + const payload = web3.eth.abi.encodeFunctionCall({ + name: 'isRegisteredAuthority', + type: 'function', + inputs: [{ + type: 'address', + name: 'authority' + }] + }, [AUTHORITY_ACCOUNT_3]); + const encodedResult = await this.tokenIOAuthorityProxy.staticCall(payload); + const result = web3.eth.abi.decodeParameters(['bool'], encodedResult); + assert.equal(result[0], false) + }); + }); + + describe('call', function () { + it('Should pass', async function () { + const payload = web3.eth.abi.encodeFunctionCall({ + name: 'setMasterFeeContract', + type: 'function', + inputs: [{ + type: 'address', + name: 'feeContract' + }] + }, [accounts[4]]); + + await this.tokenIOAuthorityProxy.call(payload); + }); + }); + + + +}); diff --git a/test/TokenIOCurrencyAuthority.js b/test/TokenIOCurrencyAuthority.js deleted file mode 100644 index dc1aa9e..0000000 --- a/test/TokenIOCurrencyAuthority.js +++ /dev/null @@ -1,95 +0,0 @@ -var { utils } = require('ethers'); -var Promise = require('bluebird') -var TokenIOERC20 = artifacts.require("./TokenIOERC20.sol"); -var TokenIOCurrencyAuthority = artifacts.require("./TokenIOCurrencyAuthority.sol"); - -const { mode, development, production } = require('../token.config.js'); -const { - AUTHORITY_DETAILS: { firmName, authorityAddress }, - TOKEN_DETAILS -} = mode == 'production' ? production : development; - -const USDx = TOKEN_DETAILS['USDx'] - -contract("TokenIOCurrencyAuthority", function(accounts) { - - // Global Test Variables; - const AUTHORITY_ACCOUNT = accounts[0]; - const DEPOSIT_TO_ACCOUNT = accounts[1]; - const CURRENCY_SYMBOL = USDx.tokenSymbol - const DEPOSIT_AMOUNT = 1123581321e2 - const LIMIT_AMOUNT = 5000e2 - const WITHDRAW_AMOUNT = 81321e2 - const FIRM_NAME = firmName; - - it("Should ensure the AUTHORITY_ACCOUNT cannot receive deposited funds on behalf of an account until the account is KYC'd", async () => { - const CA = await TokenIOCurrencyAuthority.deployed(); - - try { - const { receipt: { status, logs } } = await CA.deposit(CURRENCY_SYMBOL, DEPOSIT_TO_ACCOUNT, DEPOSIT_AMOUNT, FIRM_NAME) - assert.equal(status, "0x0", "Transaction should fail."); - } catch (error) { - assert.equal(error.message.match(RegExp('revert')).length, 1, "Expect transaction to revert due to KYC approval not met"); - } - }) - - it("Should ensure the AUTHORITY_ACCOUNT can approve and deposit funds for an account", async () => { - const CA = await TokenIOCurrencyAuthority.deployed(); - const erc20 = await TokenIOERC20.deployed() - - const { receipt: { status } } = await CA.approveKYCAndDeposit(CURRENCY_SYMBOL, DEPOSIT_TO_ACCOUNT, DEPOSIT_AMOUNT, LIMIT_AMOUNT, FIRM_NAME) - assert.equal(status, "0x1", "Transaction receipt status should be 0x1 successful."); - - const BALANCE = +(await erc20.balanceOf(DEPOSIT_TO_ACCOUNT)).toString() - const TOTAL_SUPPLY = +(await erc20.totalSupply()).toString() - - assert.equal(TOTAL_SUPPLY, DEPOSIT_AMOUNT, "Total supply should equal the amount deposited.") - assert.equal(BALANCE, DEPOSIT_AMOUNT, "Account balance should equal the amount deposited.") - - }) - - it("Should ensure the AUTHORITY_ACCOUNT can withdraw funds from an approved account", async () => { - const CA = await TokenIOCurrencyAuthority.deployed(); - const erc20 = await TokenIOERC20.deployed() - - const { receipt: { status, logs } } = await CA.withdraw(CURRENCY_SYMBOL, DEPOSIT_TO_ACCOUNT, DEPOSIT_AMOUNT, FIRM_NAME) - assert.equal(status, "0x1", "Transaction receipt status should be 0x1 successful."); - - const BALANCE = +(await erc20.balanceOf(DEPOSIT_TO_ACCOUNT)).toString() - const TOTAL_SUPPLY = +(await erc20.totalSupply()).toString() - - assert.equal(TOTAL_SUPPLY, 0, "Total supply should equal 0 after amount is withdrawn.") - assert.equal(BALANCE, 0, "Account balance should equal 0 after amount is withdrawn.") - }) - - it("Should ensure the AUTHORITY_ACCOUNT can freeze account and disallow depositing funds to an account", async () => { - const CA = await TokenIOCurrencyAuthority.deployed(); - const erc20 = await TokenIOERC20.deployed() - - const KYC_TX_RESULT = await CA.freezeAccount(DEPOSIT_TO_ACCOUNT, true, FIRM_NAME); - assert.equal(KYC_TX_RESULT.receipt.status, "0x1", "Transaction receipt status should be 0x1 successful."); - - try { - const { receipt: { status, logs } } = await CA.deposit(CURRENCY_SYMBOL, DEPOSIT_TO_ACCOUNT, DEPOSIT_AMOUNT, FIRM_NAME) - assert.equal(status, "0x1", "Transaction receipt status should be 0x1 successful."); - - // const TX_FEES = +(await erc20.calculateFees(DEPOSIT_AMOUNT)).toString() - const BALANCE = +(await erc20.balanceOf(DEPOSIT_TO_ACCOUNT)).toString() - const TOTAL_SUPPLY = +(await erc20.totalSupply()).toString() - - assert.equal(TOTAL_SUPPLY, DEPOSIT_AMOUNT, "Total supply should equal the amount deposited.") - assert.equal(BALANCE, DEPOSIT_AMOUNT, "Account balance should equal the amount deposited.") - } catch (error) { - assert.equal(error.message.match(RegExp('revert')).length, 1, "Expect transaction to revert due to KYC approval not met"); - } - - - }); - - - - - - - -}); diff --git a/test/TokenIOCurrencyAuthorityProxy.js b/test/TokenIOCurrencyAuthorityProxy.js new file mode 100644 index 0000000..72f4913 --- /dev/null +++ b/test/TokenIOCurrencyAuthorityProxy.js @@ -0,0 +1,145 @@ +var { utils } = require('ethers'); +var Promise = require('bluebird') +var TokenIOERC20 = artifacts.require("./TokenIOERC20.sol"); +var TokenIOERC20Proxy = artifacts.require("./TokenIOERC20Proxy.sol"); +var TokenIOCurrencyAuthorityProxy = artifacts.require("./TokenIOCurrencyAuthorityProxy.sol"); + +const { mode, development, production } = require('../token.config.js'); +const { + AUTHORITY_DETAILS: { firmName, authorityAddress }, + TOKEN_DETAILS +} = mode == 'production' ? production : development; + +const USDx = TOKEN_DETAILS['USDx'] + +contract("TokenIOCurrencyAuthorityProxy", function(accounts) { + + // Global Test Variables; + const AUTHORITY_ACCOUNT = accounts[0]; + const DEPOSIT_TO_ACCOUNT = accounts[1]; + const CURRENCY_SYMBOL = USDx.tokenSymbol + const DEPOSIT_AMOUNT = 1123581321e2 + const LIMIT_AMOUNT = 5000e2 + const WITHDRAW_AMOUNT = 81321e2 + const FIRM_NAME = firmName; + + const TOKEN_NAME = USDx.tokenName; + const TOKEN_SYMBOL = USDx.tokenSymbol + const TOKEN_TLA = USDx.tokenTLA + const TOKEN_VERSION = USDx.tokenVersion + const FEE_CONTRACT = USDx.feeContract + const TOKEN_DECIMALS = USDx.tokenDecimals + + before(async function () { + this.tokenIOCurrencyAuthorityProxy = await TokenIOCurrencyAuthorityProxy.deployed(); + this.tokenIOERC20Proxy = await TokenIOERC20Proxy.deployed(); + }); + + describe("Should ensure the AUTHORITY_ACCOUNT cannot receive deposited funds on behalf of an account until the account is KYC'd", function () { + it("Should pass", async function () { + try { + const { receipt: { status, logs } } = await this.tokenIOCurrencyAuthorityProxy.deposit(CURRENCY_SYMBOL, DEPOSIT_TO_ACCOUNT, DEPOSIT_AMOUNT, FIRM_NAME) + assert.equal(status, "0x0", "Transaction should fail."); + } catch (error) { + assert.equal(error.message.match(RegExp('revert')).length, 1, "Expect transaction to revert due to KYC approval not met"); + } + }) + }) + + describe("Should ensure the AUTHORITY_ACCOUNT can approve and deposit funds for an account", function () { + it("Should pass", async function () { + const { receipt: { status } } = await this.tokenIOCurrencyAuthorityProxy.approveKYCAndDeposit(CURRENCY_SYMBOL, DEPOSIT_TO_ACCOUNT, DEPOSIT_AMOUNT, LIMIT_AMOUNT, FIRM_NAME) + assert.equal(status, "0x1", "Transaction receipt status should be 0x1 successful."); + + const BALANCE = +(await this.tokenIOERC20Proxy.balanceOf(DEPOSIT_TO_ACCOUNT)).toString() + const TOTAL_SUPPLY = +(await this.tokenIOERC20Proxy.totalSupply()).toString() + + assert.equal(TOTAL_SUPPLY, DEPOSIT_AMOUNT, "Total supply should equal the amount deposited.") + assert.equal(BALANCE, DEPOSIT_AMOUNT, "Account balance should equal the amount deposited.") + }) + }) + + describe("Should ensure the AUTHORITY_ACCOUNT can withdraw funds from an approved account", function () { + it("Should pass", async function () { + + const { receipt: { status, logs } } = await this.tokenIOCurrencyAuthorityProxy.withdraw(CURRENCY_SYMBOL, DEPOSIT_TO_ACCOUNT, DEPOSIT_AMOUNT, FIRM_NAME) + assert.equal(status, "0x1", "Transaction receipt status should be 0x1 successful."); + + const BALANCE = +(await this.tokenIOERC20Proxy.balanceOf(DEPOSIT_TO_ACCOUNT)).toString() + const TOTAL_SUPPLY = +(await this.tokenIOERC20Proxy.totalSupply()).toString() + + assert.equal(TOTAL_SUPPLY, 0, "Total supply should equal 0 after amount is withdrawn.") + assert.equal(BALANCE, 0, "Account balance should equal 0 after amount is withdrawn.") + }) + }) + + describe("Should ensure the AUTHORITY_ACCOUNT can freeze account and disallow depositing funds to an account", function () { + it("Should pass", async function () { + const KYC_TX_RESULT = await this.tokenIOCurrencyAuthorityProxy.freezeAccount(DEPOSIT_TO_ACCOUNT, true, FIRM_NAME); + assert.equal(KYC_TX_RESULT.receipt.status, "0x1", "Transaction receipt status should be 0x1 successful."); + + try { + const { receipt: { status, logs } } = await this.tokenIOCurrencyAuthorityProxy.deposit(CURRENCY_SYMBOL, DEPOSIT_TO_ACCOUNT, DEPOSIT_AMOUNT, FIRM_NAME) + assert.equal(status, "0x1", "Transaction receipt status should be 0x1 successful."); + + // const TX_FEES = +(await erc20.calculateFees(DEPOSIT_AMOUNT)).toString() + const BALANCE = +(await this.tokenIOERC20Proxy.balanceOf(DEPOSIT_TO_ACCOUNT)).toString() + const TOTAL_SUPPLY = +(await this.tokenIOERC20Proxy.totalSupply()).toString() + + assert.equal(TOTAL_SUPPLY, DEPOSIT_AMOUNT, "Total supply should equal the amount deposited.") + assert.equal(BALANCE, DEPOSIT_AMOUNT, "Account balance should equal the amount deposited.") + } catch (error) { + assert.equal(error.message.match(RegExp('revert')).length, 1, "Expect transaction to revert due to KYC approval not met"); + } + }) + }); + + describe('staticCall', function () { + it('Should pass', async function () { + const TOTAL_SUPPLY = +(await this.tokenIOERC20Proxy.totalSupply()).toString() + const payload = web3.eth.abi.encodeFunctionCall({ + name: 'getTokenSupply', + type: 'function', + inputs: [{ + type: 'string', + name: 'currency' + }] + }, [CURRENCY_SYMBOL]); + const encodedResult = await this.tokenIOCurrencyAuthorityProxy.staticCall(payload); + const result = web3.eth.abi.decodeParameters(['uint'], encodedResult); + assert.equal(result[0].toString(), TOTAL_SUPPLY) + }); + }); + + describe('call', function () { + it('Should pass', async function () { + const payload = web3.eth.abi.encodeFunctionCall({ + name: 'approveKYCAndDeposit', + type: 'function', + inputs: [{ + type: 'string', + name: 'currency' + }, { + type: 'address', + name: 'account' + }, { + type: 'uint256', + name: 'amount' + }, { + type: 'uint256', + name: 'limit' + }, { + type: 'string', + name: 'issuerFirm' + }, { + type: 'address', + name: 'sender' + }] + }, [CURRENCY_SYMBOL, DEPOSIT_TO_ACCOUNT, DEPOSIT_AMOUNT, LIMIT_AMOUNT, FIRM_NAME, AUTHORITY_ACCOUNT]); + + await this.tokenIOCurrencyAuthorityProxy.call(payload); + }); + }); + + +}); diff --git a/test/TokenIOERC20.js b/test/TokenIOERC20.js deleted file mode 100644 index 5aa2b74..0000000 --- a/test/TokenIOERC20.js +++ /dev/null @@ -1,206 +0,0 @@ -const TokenIOCurrencyAuthority = artifacts.require("./TokenIOCurrencyAuthority.sol"); -const TokenIOStorage = artifacts.require("./TokenIOStorage.sol") -const TokenIOERC20 = artifacts.require("./TokenIOERC20.sol") -const TokenIOFeeContract = artifacts.require("./TokenIOFeeContract.sol") -const { mode, development, production } = require('../token.config.js') -const { utils } = require('ethers') - -const { AUTHORITY_DETAILS: { firmName, authorityAddress }, TOKEN_DETAILS, FEE_PARAMS } = mode - == 'production' ? production : development //set stage - -contract("TokenIOERC20", function(accounts) { - // pull in usdx params - const USDx = TOKEN_DETAILS['USDx'] - - // create test accounts - const TEST_ACCOUNT_1 = accounts[0] - const TEST_ACCOUNT_2 = accounts[1] - const TEST_ACCOUNT_3 = accounts[2] - - const DEPOSIT_AMOUNT = 10000e2 - const LIMIT_AMOUNT = (DEPOSIT_AMOUNT/2) - const TRANSFER_AMOUNT = (DEPOSIT_AMOUNT/4) - - /* PARAMETERS */ - - it(`TOKEN_PARAMS - :should correctly set parameters according to c 'token.config.js' - [name, symbol, tla, decimals]`, async () => { - const TOKEN_NAME = USDx.tokenName; - const TOKEN_SYMBOL = USDx.tokenSymbol - const TOKEN_TLA = USDx.tokenTLA - const TOKEN_VERSION = USDx.tokenVersion - const TOKEN_DECIMALS = USDx.tokenDecimals - - - const erc20 = await TokenIOERC20.deployed() - const name = await erc20.name() - const symbol = await erc20.symbol() - const tla = await erc20.tla() - const version = await erc20.version() - const decimals = await erc20.decimals() - - assert.equal(name, TOKEN_NAME, "Token name should be set in the storage contract.") - assert.equal(symbol, TOKEN_SYMBOL, "Token symbol should be set in the storage contract.") - assert.equal(tla, TOKEN_TLA, "Token tla should be set in the storage contract.") - assert.equal(version, TOKEN_VERSION, "Token version should be set in the storage contract.") - assert.equal(decimals, TOKEN_DECIMALS, "Token decimals should be set in the storage contract.") - }) - - - it(`FEE_PARAMS - :should correctly set fee parameters according to config file 'token.config.js' - [bps, min, max, flat, account]`, async () => { - const TOKEN_FEE_BPS = FEE_PARAMS.feeBps - const TOKEN_FEE_MIN = FEE_PARAMS.feeMin - const TOKEN_FEE_MAX = FEE_PARAMS.feeMax - const TOKEN_FEE_FLAT = FEE_PARAMS.feeFlat - const TOKEN_FEE_MSG = FEE_PARAMS.feeMsg - const TOKEN_FEE_ACCOUNT = (await TokenIOFeeContract.deployed()).address - - const erc20 = await TokenIOERC20.deployed() - const feeParams = await erc20.getFeeParams() - const feeBps = feeParams[0] - const feeMin = feeParams[1] - const feeMax = feeParams[2] - const feeFlat = feeParams[3] - const feeMsg = feeParams[4] - const feeAccount = feeParams[5] - - assert.equal(feeBps, TOKEN_FEE_BPS, "Token feeBps should be set in the storage contract.") - assert.equal(feeMin, TOKEN_FEE_MIN, "Token feeMin should be set in the storage contract.") - assert.equal(feeMax, TOKEN_FEE_MAX, "Token feeMax should be set in the storage contract.") - assert.equal(feeFlat, TOKEN_FEE_FLAT, "Token feeFlat should be set in the storage contract.") - assert.equal(feeMsg, TOKEN_FEE_MSG, "Token feeMsg should be set in the storage contract.") - assert.equal(feeAccount, TOKEN_FEE_ACCOUNT, "Token feeAccount should be set in the storage contract.") - }) - - /* GETTERS */ - - it(`BALANCE_OF - :should get balance of account1`, async () => { - const erc20 = await TokenIOERC20.deployed() - await erc20.setParams(...Object.values(TOKEN_DETAILS['USDx']).map((v) => { return v })) - - const balance = await erc20.balanceOf(TEST_ACCOUNT_1) - assert.equal(balance, 0) - }) - - it(`ALLOWANCE - :should return allowance of account2 on behalf of account 1`, async () => { - const erc20 = await TokenIOERC20.deployed() - await erc20.setParams(...Object.values(TOKEN_DETAILS['USDx']).map((v) => { return v })) - - const allowance = await erc20.allowance(TEST_ACCOUNT_1, TEST_ACCOUNT_2) - assert.equal(allowance, 0) - }) - - /* PUBLIC FUNCTIONS */ - - it(`TRANSFER - :should supply uints, debiting the sender and crediting the receiver`, async () => { - const storage = await TokenIOStorage.deployed() - const erc20 = await TokenIOERC20.deployed() - const CA = await TokenIOCurrencyAuthority.deployed(); - - const kycReceipt1 = await CA.approveKYC(TEST_ACCOUNT_1, true, LIMIT_AMOUNT, "Token, Inc.") - const kycReceipt2= await CA.approveKYC(TEST_ACCOUNT_2, true, LIMIT_AMOUNT, "Token, Inc.") - const kycReceipt3= await CA.approveKYC(TEST_ACCOUNT_3, true, LIMIT_AMOUNT, "Token, Inc.") - - await erc20.setParams(...Object.values(TOKEN_DETAILS['USDx']).map((v) => { return v })) - await storage.allowOwnership(erc20.address) - const tokenSymbol = await erc20.symbol() - const depositReceipt = await CA.deposit(tokenSymbol, TEST_ACCOUNT_1, DEPOSIT_AMOUNT, "Token, Inc.") - - const balance1 = +(await erc20.balanceOf(TEST_ACCOUNT_1)).toString() - const balance2 = +(await erc20.balanceOf(TEST_ACCOUNT_2)).toString() - - assert.equal(balance1, DEPOSIT_AMOUNT) - assert.equal(balance2, 0) - - const transferReceipt = await erc20.transfer(TEST_ACCOUNT_2, TRANSFER_AMOUNT) - const balance1b = +(await erc20.balanceOf(TEST_ACCOUNT_1)).toString() - const balance2b = +(await erc20.balanceOf(TEST_ACCOUNT_2)).toString() - - // calc fees - const TX_FEES = +(await erc20.calculateFees(TRANSFER_AMOUNT)).toString() - - // check spending limit remaining - const SPENDING_LIMIT = +(await CA.getAccountSpendingLimit(TEST_ACCOUNT_1)).toString() - const SPENDING_REMAINING = +(await CA.getAccountSpendingRemaining(TEST_ACCOUNT_1)).toString() - - assert.equal(SPENDING_REMAINING, (SPENDING_LIMIT - TRANSFER_AMOUNT), - "Remaining spending amount should equal the spending limit minus the transfer amount") - - // calculate correct current balance - assert.equal(balance1b, (DEPOSIT_AMOUNT-TRANSFER_AMOUNT-TX_FEES)) - assert.equal(balance2b, TRANSFER_AMOUNT) - }) - - - it(`APPROVE - :should give allowance of remaining balance of account 1 to account 2 - allowances[account1][account2]: 0 --> 100`, async () => { - const storage = await TokenIOStorage.deployed() - const erc20 = await TokenIOERC20.deployed() - const CA = await TokenIOCurrencyAuthority.deployed(); - - const balance1a = +(await erc20.balanceOf(TEST_ACCOUNT_1)) - const balance1b = +(await erc20.balanceOf(TEST_ACCOUNT_2)) - - const approveReceipt = await erc20.approve(TEST_ACCOUNT_2, balance1a) - const allowance = +(await erc20.allowance(TEST_ACCOUNT_1, TEST_ACCOUNT_2)).toString() - - assert.notEqual(allowance, 0, "Allowance should not equal zero.") - assert.equal(allowance, balance1a, "Allowance should be the same value as the balance of account 1") - }) - - it(`TRANSFER_FROM - :account 2 should spend funds transfering from account1 to account 3 on behalf of account1`, async () => { - const storage = await TokenIOStorage.deployed() - const erc20 = await TokenIOERC20.deployed() - const CA = await TokenIOCurrencyAuthority.deployed(); - - - const TEST_ACT_1_BEG_BALANCE = +(await erc20.balanceOf(TEST_ACCOUNT_1)).toString() - const TEST_ACT_2_BEG_BALANCE = +(await erc20.balanceOf(TEST_ACCOUNT_2)).toString() - const TEST_ACT_3_BEG_BALANCE = +(await erc20.balanceOf(TEST_ACCOUNT_3)).toString() - - assert.notEqual(TEST_ACT_1_BEG_BALANCE, 0, "Balance of account 1 should not equal zero.") - assert.notEqual(TEST_ACT_2_BEG_BALANCE, 0, "Balance of account 2 should not equal zero.") - - const BEG_ALLOWANCE = await erc20.allowance(TEST_ACCOUNT_1, TEST_ACCOUNT_2) - assert.equal(BEG_ALLOWANCE, TEST_ACT_1_BEG_BALANCE) - - const TRANSFER_FROM_AMOUNT = +(await CA.getAccountSpendingRemaining(TEST_ACCOUNT_1)).toString() - const transferFromReceipt = await erc20.transferFrom(TEST_ACCOUNT_1, TEST_ACCOUNT_3, TRANSFER_FROM_AMOUNT, { from: TEST_ACCOUNT_2 }) - - const TX_FEES = +(await erc20.calculateFees(TRANSFER_FROM_AMOUNT)).toString() - const TEST_ACT_1_END_BALANCE = +(await erc20.balanceOf(TEST_ACCOUNT_1)) - assert.equal(TEST_ACT_1_END_BALANCE, (TEST_ACT_1_BEG_BALANCE-TRANSFER_FROM_AMOUNT-TX_FEES), "Ending balance should be net of transfer amount and fees") - - const TEST_ACT_3_END_BALANCE = +(await erc20.balanceOf(TEST_ACCOUNT_3)).toString() - assert.equal(TEST_ACT_3_END_BALANCE, TRANSFER_FROM_AMOUNT, "TEST_ACCOUNT_3 Balance should equal transfer amount"); - - const END_ALLOWANCE = +(await erc20.allowance(TEST_ACCOUNT_1, TEST_ACCOUNT_2)).toString() - assert.equal(END_ALLOWANCE, (TEST_ACT_1_BEG_BALANCE-TRANSFER_FROM_AMOUNT), "Allowance should be reduced by amount transferred") - - }) - - it("Should attempt to transfer more than the daily limit for the account and fail", async () => { - const erc20 = await TokenIOERC20.deployed() - const CA = await TokenIOCurrencyAuthority.deployed(); - - const SPENDING_REMAINING = +(await CA.getAccountSpendingRemaining(TEST_ACCOUNT_1)).toString() - assert.equal(0, SPENDING_REMAINING, "Expect daily spending limit to be zero") - - try { - const TRANSFER_AMOUNT = 100e2 - const TRANSFER_TX = await erc20.transfer(TEST_ACCOUNT_2, TRANSFER_AMOUNT) - } catch (error) { - assert.equal(error.message.match(RegExp('revert')).length, 1, "Expect transaction to revert due to excessive spending limit"); - } - }) - - -}) diff --git a/test/TokenIOERC20FeesApplyProxy.js b/test/TokenIOERC20FeesApplyProxy.js new file mode 100644 index 0000000..8886f38 --- /dev/null +++ b/test/TokenIOERC20FeesApplyProxy.js @@ -0,0 +1,183 @@ +const TokenIOCurrencyAuthorityProxy = artifacts.require("./TokenIOCurrencyAuthorityProxy.sol"); +const TokenIOStorage = artifacts.require("./TokenIOStorage.sol") +const TokenIOERC20FeesApplyProxy = artifacts.require("./TokenIOERC20FeesApplyProxy.sol") +const { mode, development, production } = require('../token.config.js') + +const { AUTHORITY_DETAILS: { firmName, authorityAddress }, TOKEN_DETAILS, FEE_PARAMS } = mode + == 'production' ? production : development //set stage + +contract("TokenIOERC20FeesApplyProxy", function(accounts) { + // pull in usdx params + const USDx = TOKEN_DETAILS['USDx'] + + // create test accounts + const TEST_ACCOUNT_1 = accounts[0] + const TEST_ACCOUNT_2 = accounts[1] + const TEST_ACCOUNT_3 = accounts[2] + + const DEPOSIT_AMOUNT = 10000e2 + const LIMIT_AMOUNT = (DEPOSIT_AMOUNT/2) + const TRANSFER_AMOUNT = (DEPOSIT_AMOUNT/4) + + const TOKEN_NAME = USDx.tokenName; + const TOKEN_SYMBOL = USDx.tokenSymbol + const TOKEN_TLA = USDx.tokenTLA + const TOKEN_VERSION = USDx.tokenVersion + const FEE_CONTRACT = USDx.feeContract + const TOKEN_DECIMALS = USDx.tokenDecimals + + before(async function () { + this.tokenIOStorage = await TokenIOStorage.deployed() + this.tokenIOCurrencyAuthorityProxy = await TokenIOCurrencyAuthorityProxy.deployed(); + this.tokenIOERC20FeesApplyProxy = await TokenIOERC20FeesApplyProxy.deployed(); + }); + + /* PARAMETERS */ + describe('TOKEN_PARAMS:should correctly set parameters according to token.config.js [name, symbol, tla, decimals]', function () { + it(`should pass`, async function () { + assert.equal(await this.tokenIOERC20FeesApplyProxy.name(), TOKEN_NAME, "Token name should be set in the storage contract.") + assert.equal(await this.tokenIOERC20FeesApplyProxy.symbol(), TOKEN_SYMBOL, "Token symbol should be set in the storage contract.") + assert.equal(await this.tokenIOERC20FeesApplyProxy.tla(), TOKEN_TLA, "Token tla should be set in the storage contract.") + assert.equal(await this.tokenIOERC20FeesApplyProxy.version(), TOKEN_VERSION, "Token version should be set in the storage contract.") + assert.equal(await this.tokenIOERC20FeesApplyProxy.decimals(), TOKEN_DECIMALS, "Token decimals should be set in the storage contract.") + }) + }); + + describe('TRANSFER:should supply uints, debiting the sender and crediting the receiver', function () { + it('Should pass', async function () { + await this.tokenIOCurrencyAuthorityProxy.approveKYC(TEST_ACCOUNT_1, true, LIMIT_AMOUNT, "Token, Inc.") + await this.tokenIOCurrencyAuthorityProxy.approveKYC(TEST_ACCOUNT_2, true, LIMIT_AMOUNT, "Token, Inc.") + await this.tokenIOCurrencyAuthorityProxy.approveKYC(TEST_ACCOUNT_3, true, LIMIT_AMOUNT, "Token, Inc.") + await this.tokenIOCurrencyAuthorityProxy.deposit(await this.tokenIOERC20FeesApplyProxy.symbol(), TEST_ACCOUNT_1, DEPOSIT_AMOUNT, "Token, Inc."); + + const balance1 = +(await this.tokenIOERC20FeesApplyProxy.balanceOf(TEST_ACCOUNT_1)).toString() + const balance2 = +(await this.tokenIOERC20FeesApplyProxy.balanceOf(TEST_ACCOUNT_2)).toString() + + assert.equal(balance1, DEPOSIT_AMOUNT, "first account should contain all the deposit initially") + assert.equal(balance2, 0, "Second account should have zero balance") + + const transferReceipt = await this.tokenIOERC20FeesApplyProxy.transfer(TEST_ACCOUNT_2, TRANSFER_AMOUNT) + + const balance1b = +(await this.tokenIOERC20FeesApplyProxy.balanceOf(TEST_ACCOUNT_1)).toString() + const balance2b = +(await this.tokenIOERC20FeesApplyProxy.balanceOf(TEST_ACCOUNT_2)).toString() + + // calc fees + const TX_FEES = +(await this.tokenIOERC20FeesApplyProxy.calculateFees(TRANSFER_AMOUNT)).toString() + + // check spending limit remaining + // Spending limit should remain unchanged! + const SPENDING_LIMIT = +(await this.tokenIOCurrencyAuthorityProxy.getAccountSpendingLimit(TEST_ACCOUNT_1)).toString() + const SPENDING_REMAINING = +(await this.tokenIOCurrencyAuthorityProxy.getAccountSpendingRemaining(TEST_ACCOUNT_1)).toString() + + assert.equal(SPENDING_REMAINING, (SPENDING_LIMIT), + "Remaining spending amount should remain equal to set limit amount") + + // calculate correct current balance + assert.equal(balance1b, (DEPOSIT_AMOUNT-TRANSFER_AMOUNT-TX_FEES)) + assert.equal(balance2b, TRANSFER_AMOUNT) + }); + }); + + describe('APPROVE: should give allowance of remaining balance of account 1 to account 2', function () { + it('Should pass', async function () { + const balance1a = +(await this.tokenIOERC20FeesApplyProxy.balanceOf(TEST_ACCOUNT_1)) + + const approveReceipt = await this.tokenIOERC20FeesApplyProxy.approve(TEST_ACCOUNT_2, balance1a) + const allowance = +(await this.tokenIOERC20FeesApplyProxy.allowance(TEST_ACCOUNT_1, TEST_ACCOUNT_2)).toString() + + assert.notEqual(allowance, 0, "Allowance should not equal zero.") + assert.equal(allowance, balance1a, "Allowance should be the same value as the balance of account 1") + }); + }); + + describe('TRANSFER_FROM: account 2 should spend funds transfering from account1 to account 3 on behalf of account1', function () { + it('Should pass', async function () { + + const TEST_ACT_1_BEG_BALANCE = +(await this.tokenIOERC20FeesApplyProxy.balanceOf(TEST_ACCOUNT_1)).toString() + const TEST_ACT_2_BEG_BALANCE = +(await this.tokenIOERC20FeesApplyProxy.balanceOf(TEST_ACCOUNT_2)).toString() + const TEST_ACT_3_BEG_BALANCE = +(await this.tokenIOERC20FeesApplyProxy.balanceOf(TEST_ACCOUNT_3)).toString() + + assert.notEqual(TEST_ACT_1_BEG_BALANCE, 0, "Balance of account 1 should not equal zero.") + assert.notEqual(TEST_ACT_2_BEG_BALANCE, 0, "Balance of account 2 should not equal zero.") + + const BEG_ALLOWANCE = await this.tokenIOERC20FeesApplyProxy.allowance(TEST_ACCOUNT_1, TEST_ACCOUNT_2) + + assert.equal(BEG_ALLOWANCE, TEST_ACT_1_BEG_BALANCE) + + const TRANSFER_FROM_AMOUNT = +(await this.tokenIOCurrencyAuthorityProxy.getAccountSpendingRemaining(TEST_ACCOUNT_1)).toString() + const transferFromReceipt = await this.tokenIOERC20FeesApplyProxy.transferFrom(TEST_ACCOUNT_1, TEST_ACCOUNT_3, TRANSFER_FROM_AMOUNT, { from: TEST_ACCOUNT_2 }) + const TX_FEES = +(await this.tokenIOERC20FeesApplyProxy.calculateFees(TRANSFER_FROM_AMOUNT)).toString() + + const TEST_ACT_1_END_BALANCE = +(await this.tokenIOERC20FeesApplyProxy.balanceOf(TEST_ACCOUNT_1)) + assert.equal(TEST_ACT_1_END_BALANCE, (TEST_ACT_1_BEG_BALANCE-TRANSFER_FROM_AMOUNT-TX_FEES), "Ending balance should be net of transfer amount and fees") + + const TEST_ACT_3_END_BALANCE = +(await this.tokenIOERC20FeesApplyProxy.balanceOf(TEST_ACCOUNT_3)).toString() + assert.equal(TEST_ACT_3_END_BALANCE, TRANSFER_FROM_AMOUNT, "TEST_ACCOUNT_3 Balance should equal transfer amount"); + + const END_ALLOWANCE = +(await this.tokenIOERC20FeesApplyProxy.allowance(TEST_ACCOUNT_1, TEST_ACCOUNT_2)).toString() + assert.equal(END_ALLOWANCE, (TEST_ACT_1_BEG_BALANCE-TRANSFER_FROM_AMOUNT-TX_FEES), "Allowance should be reduced by amount transferred") + }); + }); + + describe('calculateFees', function () { + it('Should pass', async function () { + const TX_FEES = +(await this.tokenIOERC20FeesApplyProxy.calculateFees(TRANSFER_AMOUNT)).toString() + assert.notEqual(TX_FEES, 0, "TX fee should not equal zero.") + }); + }); + + describe('BALANCE_OF: should get balance of account1', function () { + it('Should pass', async function () { + const TEST_ACT_1_BEG_BALANCE = +(await this.tokenIOERC20FeesApplyProxy.balanceOf(TEST_ACCOUNT_1)).toString() + const TEST_ACT_2_BEG_BALANCE = +(await this.tokenIOERC20FeesApplyProxy.balanceOf(TEST_ACCOUNT_2)).toString() + const TEST_ACT_3_BEG_BALANCE = +(await this.tokenIOERC20FeesApplyProxy.balanceOf(TEST_ACCOUNT_3)).toString() + + const balance = +(await this.tokenIOERC20FeesApplyProxy.balanceOf(TEST_ACCOUNT_2)).toString() + assert.equal(balance, TRANSFER_AMOUNT, "first account should contain all the deposit initially") + }); + }); + + describe('ALLOWANCE: should return allowance of account2 on behalf of account 1', function () { + it('Should pass', async function () { + const allowance = await this.tokenIOERC20FeesApplyProxy.allowance(TEST_ACCOUNT_1, TEST_ACCOUNT_2) + assert.equal(allowance.toNumber(), 249848) + }); + }); + + describe('staticCall', function () { + it('Should pass', async function () { + const payload = web3.eth.abi.encodeFunctionSignature('name()') + const encodedResult = await this.tokenIOERC20FeesApplyProxy.staticCall(payload); + const result = web3.eth.abi.decodeParameters(['string'], encodedResult); + assert.equal(result[0], TOKEN_NAME) + }); + }); + + describe('call', function () { + it('Should pass', async function () { + const TEST_ACT_1_BEG_BALANCE = +(await this.tokenIOERC20FeesApplyProxy.balanceOf(TEST_ACCOUNT_1)).toString() + const TEST_ACT_2_BEG_BALANCE = +(await this.tokenIOERC20FeesApplyProxy.balanceOf(TEST_ACCOUNT_2)).toString() + + const payload = web3.eth.abi.encodeFunctionCall({ + name: 'transfer', + type: 'function', + inputs: [{ + type: 'address', + name: 'to' + },{ + type: 'uint256', + name: 'amount' + },{ + type: 'address', + name: 'sender' + }] + }, [TEST_ACCOUNT_2, 1, TEST_ACCOUNT_1]); + + await this.tokenIOERC20FeesApplyProxy.call(payload); + const TX_FEES = +(await this.tokenIOERC20FeesApplyProxy.calculateFees(1)).toString() + assert.equal(+(await this.tokenIOERC20FeesApplyProxy.balanceOf(TEST_ACCOUNT_1)).toString(), TEST_ACT_1_BEG_BALANCE - 1 - TX_FEES) + assert.equal(+(await this.tokenIOERC20FeesApplyProxy.balanceOf(TEST_ACCOUNT_2)).toString(), TEST_ACT_2_BEG_BALANCE + 1) + }); + }); + +}) \ No newline at end of file diff --git a/test/TokenIOERC20Proxy.js b/test/TokenIOERC20Proxy.js new file mode 100644 index 0000000..1840844 --- /dev/null +++ b/test/TokenIOERC20Proxy.js @@ -0,0 +1,226 @@ +const TokenIOStorage = artifacts.require("./TokenIOStorage.sol") +const TokenIOCurrencyAuthorityProxy = artifacts.require("./TokenIOCurrencyAuthorityProxy.sol"); +const TokenIOERC20Proxy = artifacts.require("./TokenIOERC20Proxy.sol") +const TokenIOFeeContractProxy = artifacts.require("./TokenIOFeeContractProxy.sol") +const { mode, development, production } = require('../token.config.js') +const { utils } = require('ethers') + +const { AUTHORITY_DETAILS: { firmName, authorityAddress }, TOKEN_DETAILS, FEE_PARAMS } = mode + == 'production' ? production : development //set stage + +contract("TokenIOERC20Proxy", function(accounts) { + // pull in usdx params + const USDx = TOKEN_DETAILS['USDx'] + + // create test accounts + const TEST_ACCOUNT_1 = accounts[0] + const TEST_ACCOUNT_2 = accounts[1] + const TEST_ACCOUNT_3 = accounts[2] + + const DEPOSIT_AMOUNT = 10000e2 + const LIMIT_AMOUNT = (DEPOSIT_AMOUNT/2) + const TRANSFER_AMOUNT = (DEPOSIT_AMOUNT/4) + + const TOKEN_NAME = USDx.tokenName + const TOKEN_SYMBOL = USDx.tokenSymbol + const TOKEN_TLA = USDx.tokenTLA + const TOKEN_VERSION = USDx.tokenVersion + const TOKEN_DECIMALS = USDx.tokenDecimals + + const TOKEN_FEE_BPS = FEE_PARAMS.feeBps + const TOKEN_FEE_MIN = FEE_PARAMS.feeMin + const TOKEN_FEE_MAX = FEE_PARAMS.feeMax + const TOKEN_FEE_FLAT = FEE_PARAMS.feeFlat + const TOKEN_FEE_MSG = FEE_PARAMS.feeMsg + + before(async function () { + this.tokenIOERC20Proxy = await TokenIOERC20Proxy.deployed(); + this.tokenIOFeeContractProxy = await TokenIOFeeContractProxy.deployed(); + this.tokenIOStorage = await TokenIOStorage.deployed(); + this.tokenIOCurrencyAuthorityProxy = await TokenIOCurrencyAuthorityProxy.deployed(); + + await this.tokenIOERC20Proxy.setParams(TOKEN_NAME, TOKEN_SYMBOL, TOKEN_TLA, TOKEN_VERSION, TOKEN_DECIMALS, this.tokenIOFeeContractProxy.address, 10000); + await this.tokenIOFeeContractProxy.setFeeParams(TOKEN_FEE_BPS, TOKEN_FEE_MIN, TOKEN_FEE_MAX, TOKEN_FEE_FLAT, TOKEN_FEE_MSG); + }); + + /* PARAMETERS */ + + describe("TOKEN_PARAMS: should correctly set parameters according to c 'token.config.js' [name, symbol, tla, decimals]", function () { + it("Should pass", async function () { + + const name = await this.tokenIOERC20Proxy.name() + const symbol = await this.tokenIOERC20Proxy.symbol() + const tla = await this.tokenIOERC20Proxy.tla() + const version = await this.tokenIOERC20Proxy.version() + const decimals = await this.tokenIOERC20Proxy.decimals() + + assert.equal(name, TOKEN_NAME, "Token name should be set in the storage contract.") + assert.equal(symbol, TOKEN_SYMBOL, "Token symbol should be set in the storage contract.") + assert.equal(tla, TOKEN_TLA, "Token tla should be set in the storage contract.") + assert.equal(version, TOKEN_VERSION, "Token version should be set in the storage contract.") + assert.equal(decimals, TOKEN_DECIMALS, "Token decimals should be set in the storage contract.") + }) + }) + + describe("FEE_PARAMS: should correctly set fee parameters according to config file 'token.config.js' [bps, min, max, flat, account]", function () { + it("Should pass", async function () { + const TOKEN_FEE_ACCOUNT = this.tokenIOFeeContractProxy.address + + const feeParams = await this.tokenIOERC20Proxy.getFeeParams() + const feeBps = feeParams[0] + const feeMin = feeParams[1] + const feeMax = feeParams[2] + const feeFlat = feeParams[3] + const feeMsg = feeParams[4] + const feeAccount = feeParams[5] + + assert.equal(feeBps, TOKEN_FEE_BPS, "Token feeBps should be set in the storage contract.") + assert.equal(feeMin, TOKEN_FEE_MIN, "Token feeMin should be set in the storage contract.") + assert.equal(feeMax, TOKEN_FEE_MAX, "Token feeMax should be set in the storage contract.") + assert.equal(feeFlat, TOKEN_FEE_FLAT, "Token feeFlat should be set in the storage contract.") + assert.equal(feeMsg, TOKEN_FEE_MSG, "Token feeMsg should be set in the storage contract.") + assert.equal(feeAccount, TOKEN_FEE_ACCOUNT, "Token feeAccount should be set in the storage contract.") + }) + }) + + /* GETTERS */ + + describe("BALANCE_OF: should get balance of account1", function () { + it("Should pass", async function () { + const balance = await this.tokenIOERC20Proxy.balanceOf(TEST_ACCOUNT_1) + assert.equal(balance, 0) + }) + }) + + describe("ALLOWANCE: should return allowance of account2 on behalf of account 1", function () { + it("Should pass", async function () { + const allowance = await this.tokenIOERC20Proxy.allowance(TEST_ACCOUNT_1, TEST_ACCOUNT_2) + assert.equal(allowance, 0) + }) + }) + + /* PUBLIC FUNCTIONS */ + describe("TRANSFER: should supply uints, debiting the sender and crediting the receiver", function () { + it("Should pass", async function () { + const kycReceipt1 = await this.tokenIOCurrencyAuthorityProxy.approveKYC(TEST_ACCOUNT_1, true, LIMIT_AMOUNT, "Token, Inc.") + const kycReceipt2= await this.tokenIOCurrencyAuthorityProxy.approveKYC(TEST_ACCOUNT_2, true, LIMIT_AMOUNT, "Token, Inc.") + const kycReceipt3= await this.tokenIOCurrencyAuthorityProxy.approveKYC(TEST_ACCOUNT_3, true, LIMIT_AMOUNT, "Token, Inc.") + + await this.tokenIOStorage.allowOwnership(this.tokenIOERC20Proxy.address) + const tokenSymbol = await this.tokenIOERC20Proxy.symbol() + const depositReceipt = await this.tokenIOCurrencyAuthorityProxy.deposit(tokenSymbol, TEST_ACCOUNT_1, DEPOSIT_AMOUNT, "Token, Inc.") + + const balance1 = +(await this.tokenIOERC20Proxy.balanceOf(TEST_ACCOUNT_1)).toString() + const balance2 = +(await this.tokenIOERC20Proxy.balanceOf(TEST_ACCOUNT_2)).toString() + + assert.equal(balance1, DEPOSIT_AMOUNT) + assert.equal(balance2, 0) + + const transferReceipt = await this.tokenIOERC20Proxy.transfer(TEST_ACCOUNT_2, TRANSFER_AMOUNT) + const balance1b = +(await this.tokenIOERC20Proxy.balanceOf(TEST_ACCOUNT_1)).toString() + const balance2b = +(await this.tokenIOERC20Proxy.balanceOf(TEST_ACCOUNT_2)).toString() + + // calc fees + const TX_FEES = +(await this.tokenIOERC20Proxy.calculateFees(TRANSFER_AMOUNT)).toString() + + // check spending limit remaining + const SPENDING_LIMIT = +(await this.tokenIOCurrencyAuthorityProxy.getAccountSpendingLimit(TEST_ACCOUNT_1)).toString() + const SPENDING_REMAINING = +(await this.tokenIOCurrencyAuthorityProxy.getAccountSpendingRemaining(TEST_ACCOUNT_1)).toString() + + assert.equal(SPENDING_REMAINING, (SPENDING_LIMIT - TRANSFER_AMOUNT), + "Remaining spending amount should equal the spending limit minus the transfer amount") + + // calculate correct current balance + assert.equal(balance1b, (DEPOSIT_AMOUNT-TRANSFER_AMOUNT-TX_FEES)) + assert.equal(balance2b, TRANSFER_AMOUNT) + }) + }) + + describe("APPROVE:should give allowance of remaining balance of account 1 to account 2 allowances[account1][account2]: 0 --> 100", function () { + it("Should pass", async function () { + const balance1a = +(await this.tokenIOERC20Proxy.balanceOf(TEST_ACCOUNT_1)) + const balance1b = +(await this.tokenIOERC20Proxy.balanceOf(TEST_ACCOUNT_2)) + + const approveReceipt = await this.tokenIOERC20Proxy.approve(TEST_ACCOUNT_2, balance1a) + const allowance = +(await this.tokenIOERC20Proxy.allowance(TEST_ACCOUNT_1, TEST_ACCOUNT_2)).toString() + + assert.notEqual(allowance, 0, "Allowance should not equal zero.") + assert.equal(allowance, balance1a, "Allowance should be the same value as the balance of account 1") + }) + }) + + describe("TRANSFER_FROM: account 2 should spend funds transfering from account1 to account 3 on behalf of account1", function () { + it("Should pass", async function () { + const TEST_ACT_1_BEG_BALANCE = +(await this.tokenIOERC20Proxy.balanceOf(TEST_ACCOUNT_1)).toString() + const TEST_ACT_2_BEG_BALANCE = +(await this.tokenIOERC20Proxy.balanceOf(TEST_ACCOUNT_2)).toString() + const TEST_ACT_3_BEG_BALANCE = +(await this.tokenIOERC20Proxy.balanceOf(TEST_ACCOUNT_3)).toString() + + assert.notEqual(TEST_ACT_1_BEG_BALANCE, 0, "Balance of account 1 should not equal zero.") + assert.notEqual(TEST_ACT_2_BEG_BALANCE, 0, "Balance of account 2 should not equal zero.") + + const BEG_ALLOWANCE = await this.tokenIOERC20Proxy.allowance(TEST_ACCOUNT_1, TEST_ACCOUNT_2) + assert.equal(BEG_ALLOWANCE, TEST_ACT_1_BEG_BALANCE) + + const TRANSFER_FROM_AMOUNT = +(await this.tokenIOCurrencyAuthorityProxy.getAccountSpendingRemaining(TEST_ACCOUNT_1)).toString() + const transferFromReceipt = await this.tokenIOERC20Proxy.transferFrom(TEST_ACCOUNT_1, TEST_ACCOUNT_3, TRANSFER_FROM_AMOUNT, { from: TEST_ACCOUNT_2 }) + + const TX_FEES = +(await this.tokenIOERC20Proxy.calculateFees(TRANSFER_FROM_AMOUNT)).toString() + const TEST_ACT_1_END_BALANCE = +(await this.tokenIOERC20Proxy.balanceOf(TEST_ACCOUNT_1)) + assert.equal(TEST_ACT_1_END_BALANCE, (TEST_ACT_1_BEG_BALANCE-TRANSFER_FROM_AMOUNT-TX_FEES), "Ending balance should be net of transfer amount and fees") + + const TEST_ACT_3_END_BALANCE = +(await this.tokenIOERC20Proxy.balanceOf(TEST_ACCOUNT_3)).toString() + assert.equal(TEST_ACT_3_END_BALANCE, TRANSFER_FROM_AMOUNT, "TEST_ACCOUNT_3 Balance should equal transfer amount"); + + const END_ALLOWANCE = +(await this.tokenIOERC20Proxy.allowance(TEST_ACCOUNT_1, TEST_ACCOUNT_2)).toString() + assert.equal(END_ALLOWANCE, (TEST_ACT_1_BEG_BALANCE-TRANSFER_FROM_AMOUNT), "Allowance should be reduced by amount transferred") + }) + }) + + describe("Should attempt to transfer more than the daily limit for the account and fail", function () { + it("Should pass", async function () { + const SPENDING_REMAINING = +(await this.tokenIOCurrencyAuthorityProxy.getAccountSpendingRemaining(TEST_ACCOUNT_1)).toString() + assert.equal(0, SPENDING_REMAINING, "Expect daily spending limit to be zero") + + try { + const TRANSFER_AMOUNT = 100e2 + const TRANSFER_TX = await this.tokenIOERC20Proxy.transfer(TEST_ACCOUNT_2, TRANSFER_AMOUNT) + } catch (error) { + assert.equal(error.message.match(RegExp('revert')).length, 1, "Expect transaction to revert due to excessive spending limit"); + } + }) + }) + + describe('staticCall', function () { + it('Should pass', async function () { + const payload = web3.eth.abi.encodeFunctionSignature('name()') + const encodedResult = await this.tokenIOERC20Proxy.staticCall(payload); + const result = web3.eth.abi.decodeParameters(['string'], encodedResult); + assert.equal(result[0], TOKEN_NAME) + }); + }); + + describe('call', function () { + it('Should pass', async function () { + const tokenSymbol = await this.tokenIOERC20Proxy.symbol() + const depositReceipt = await this.tokenIOCurrencyAuthorityProxy.deposit(tokenSymbol, TEST_ACCOUNT_3, DEPOSIT_AMOUNT, "Token, Inc.") + const payload = web3.eth.abi.encodeFunctionCall({ + name: 'approve', + type: 'function', + inputs: [{ + type: 'address', + name: 'spender' + },{ + type: 'uint256', + name: 'amount' + }, { + type: 'address', + name: 'sender' + }] + }, [TEST_ACCOUNT_2, DEPOSIT_AMOUNT, TEST_ACCOUNT_3]); + + await this.tokenIOERC20Proxy.call(payload, { from: TEST_ACCOUNT_3 }); + }); + }); + + +}) diff --git a/test/TokenIOERC20UnlimitedProxy.js b/test/TokenIOERC20UnlimitedProxy.js new file mode 100644 index 0000000..65d2588 --- /dev/null +++ b/test/TokenIOERC20UnlimitedProxy.js @@ -0,0 +1,190 @@ +const TokenIOStorage = artifacts.require("./TokenIOStorage.sol") +const TokenIOCurrencyAuthorityProxy = artifacts.require("./TokenIOCurrencyAuthorityProxy.sol"); +const TokenIOERC20UnlimitedProxy = artifacts.require("./TokenIOERC20UnlimitedProxy.sol") +const TokenIOFeeContractProxy = artifacts.require("./TokenIOFeeContractProxy.sol") +const { mode, development, production } = require('../token.config.js') +const { utils } = require('ethers') + +const { AUTHORITY_DETAILS: { firmName, authorityAddress }, TOKEN_DETAILS, FEE_PARAMS } = mode + == 'production' ? production : development //set stage + +contract("TokenIOERC20UnlimitedProxy", function(accounts) { + // pull in usdx params + const USDx = TOKEN_DETAILS['USDx'] + + // create test accounts + const TEST_ACCOUNT_1 = accounts[0] + const TEST_ACCOUNT_2 = accounts[1] + const TEST_ACCOUNT_3 = accounts[2] + + const DEPOSIT_AMOUNT = 10000e2 + const LIMIT_AMOUNT = (DEPOSIT_AMOUNT/2) + const TRANSFER_AMOUNT = (DEPOSIT_AMOUNT/4) + + const TOKEN_NAME = USDx.tokenName + const TOKEN_SYMBOL = USDx.tokenSymbol + const TOKEN_TLA = USDx.tokenTLA + const TOKEN_VERSION = USDx.tokenVersion + const TOKEN_DECIMALS = USDx.tokenDecimals + + before(async function () { + this.tokenIOERC20UnlimitedProxy = await TokenIOERC20UnlimitedProxy.deployed(); + this.tokenIOFeeContractProxy = await TokenIOFeeContractProxy.deployed(); + this.tokenIOStorage = await TokenIOStorage.deployed(); + this.tokenIOCurrencyAuthorityProxy = await TokenIOCurrencyAuthorityProxy.deployed(); + + await this.tokenIOERC20UnlimitedProxy.setParams(TOKEN_NAME, TOKEN_SYMBOL, TOKEN_TLA, TOKEN_VERSION, TOKEN_DECIMALS, this.tokenIOFeeContractProxy.address, 10000); + }); + + /* PARAMETERS */ + + describe("TOKEN_PARAMS:should correctly set parameters according to c 'token.config.js' [name, symbol, tla, decimals]", function () { + it("Should pass", async function () { + + const name = await this.tokenIOERC20UnlimitedProxy.name() + const symbol = await this.tokenIOERC20UnlimitedProxy.symbol() + const tla = await this.tokenIOERC20UnlimitedProxy.tla() + const version = await this.tokenIOERC20UnlimitedProxy.version() + const decimals = await this.tokenIOERC20UnlimitedProxy.decimals() + + assert.equal(name, TOKEN_NAME, "Token name should be set in the storage contract.") + assert.equal(symbol, TOKEN_SYMBOL, "Token symbol should be set in the storage contract.") + assert.equal(tla, TOKEN_TLA, "Token tla should be set in the storage contract.") + assert.equal(version, TOKEN_VERSION, "Token version should be set in the storage contract.") + assert.equal(decimals, TOKEN_DECIMALS, "Token decimals should be set in the storage contract.") + }) + }) + + /* GETTERS */ + + describe("BALANCE_OF:should get balance of account1", function () { + it("Should pass", async function () { + const balance = await this.tokenIOERC20UnlimitedProxy.balanceOf(TEST_ACCOUNT_1) + assert.equal(balance, 0) + }) + }) + + describe("ALLOWANCE:should return allowance of account2 on behalf of account 1", function () { + it("Should pass", async function () { + const allowance = await this.tokenIOERC20UnlimitedProxy.allowance(TEST_ACCOUNT_1, TEST_ACCOUNT_2) + assert.equal(allowance, 0) + }) + }) + + /* PUBLIC FUNCTIONS */ + + describe("TRANSFER:should supply uints, debiting the sender and crediting the receiver", function () { + it("Should pass", async function () { + const kycReceipt1 = await this.tokenIOCurrencyAuthorityProxy.approveKYC(TEST_ACCOUNT_1, true, LIMIT_AMOUNT, "Token, Inc.") + const kycReceipt2= await this.tokenIOCurrencyAuthorityProxy.approveKYC(TEST_ACCOUNT_2, true, LIMIT_AMOUNT, "Token, Inc.") + const kycReceipt3= await this.tokenIOCurrencyAuthorityProxy.approveKYC(TEST_ACCOUNT_3, true, LIMIT_AMOUNT, "Token, Inc.") + + await this.tokenIOStorage.allowOwnership(this.tokenIOERC20UnlimitedProxy.address) + const tokenSymbol = await this.tokenIOERC20UnlimitedProxy.symbol() + const depositReceipt = await this.tokenIOCurrencyAuthorityProxy.deposit(tokenSymbol, TEST_ACCOUNT_1, DEPOSIT_AMOUNT, "Token, Inc.") + + const balance1 = +(await this.tokenIOERC20UnlimitedProxy.balanceOf(TEST_ACCOUNT_1)).toString() + const balance2 = +(await this.tokenIOERC20UnlimitedProxy.balanceOf(TEST_ACCOUNT_2)).toString() + + assert.equal(balance1, DEPOSIT_AMOUNT) + assert.equal(balance2, 0) + + const transferReceipt = await this.tokenIOERC20UnlimitedProxy.transfer(TEST_ACCOUNT_2, TRANSFER_AMOUNT) + const balance1b = +(await this.tokenIOERC20UnlimitedProxy.balanceOf(TEST_ACCOUNT_1)).toString() + const balance2b = +(await this.tokenIOERC20UnlimitedProxy.balanceOf(TEST_ACCOUNT_2)).toString() + + // calc fees + // const TX_FEES = +(await erc20.calculateFees(TRANSFER_AMOUNT)).toString() + + // check spending limit remaining + // Spending limit should remain unchanged! + const SPENDING_LIMIT = +(await this.tokenIOCurrencyAuthorityProxy.getAccountSpendingLimit(TEST_ACCOUNT_1)).toString() + const SPENDING_REMAINING = +(await this.tokenIOCurrencyAuthorityProxy.getAccountSpendingRemaining(TEST_ACCOUNT_1)).toString() + + assert.equal(SPENDING_REMAINING, (SPENDING_LIMIT), + "Remaining spending amount should remain equal to set limit amount") + + // calculate correct current balance + assert.equal(balance1b, (DEPOSIT_AMOUNT-TRANSFER_AMOUNT)) + assert.equal(balance2b, TRANSFER_AMOUNT) + }) + }) + + describe("APPROVE:should give allowance of remaining balance of account 1 to account 2 allowances[account1][account2]: 0 --> 100", function () { + it("Should pass", async function () { + const kycReceipt1 = await this.tokenIOCurrencyAuthorityProxy.approveKYC(TEST_ACCOUNT_1, true, LIMIT_AMOUNT, "Token, Inc.") + + await this.tokenIOStorage.allowOwnership(this.tokenIOERC20UnlimitedProxy.address) + const tokenSymbol = await this.tokenIOERC20UnlimitedProxy.symbol() + const depositReceipt = await this.tokenIOCurrencyAuthorityProxy.deposit(tokenSymbol, TEST_ACCOUNT_1, DEPOSIT_AMOUNT, "Token, Inc.") + + const balance1a = +(await this.tokenIOERC20UnlimitedProxy.balanceOf(TEST_ACCOUNT_1)) + const balance1b = +(await this.tokenIOERC20UnlimitedProxy.balanceOf(TEST_ACCOUNT_2)) + + const approveReceipt = await this.tokenIOERC20UnlimitedProxy.approve(TEST_ACCOUNT_2, balance1a) + const allowance = +(await this.tokenIOERC20UnlimitedProxy.allowance(TEST_ACCOUNT_1, TEST_ACCOUNT_2)).toString() + + assert.notEqual(allowance, 0, "Allowance should not equal zero.") + assert.equal(allowance, balance1a, "Allowance should be the same value as the balance of account 1") + }) + }) + + describe("TRANSFER_FROM:account 2 should spend funds transfering from account1 to account 3 on behalf of account1", function () { + it("Should pass", async function () { + const TEST_ACT_1_BEG_BALANCE = +(await this.tokenIOERC20UnlimitedProxy.balanceOf(TEST_ACCOUNT_1)).toString() + const TEST_ACT_2_BEG_BALANCE = +(await this.tokenIOERC20UnlimitedProxy.balanceOf(TEST_ACCOUNT_2)).toString() + const TEST_ACT_3_BEG_BALANCE = +(await this.tokenIOERC20UnlimitedProxy.balanceOf(TEST_ACCOUNT_3)).toString() + + assert.notEqual(TEST_ACT_1_BEG_BALANCE, 0, "Balance of account 1 should not equal zero.") + assert.notEqual(TEST_ACT_2_BEG_BALANCE, 0, "Balance of account 2 should not equal zero.") + + const BEG_ALLOWANCE = await this.tokenIOERC20UnlimitedProxy.allowance(TEST_ACCOUNT_1, TEST_ACCOUNT_2) + assert.equal(BEG_ALLOWANCE, TEST_ACT_1_BEG_BALANCE) + + const TRANSFER_FROM_AMOUNT = +(await this.tokenIOCurrencyAuthorityProxy.getAccountSpendingRemaining(TEST_ACCOUNT_1)).toString() + const transferFromReceipt = await this.tokenIOERC20UnlimitedProxy.transferFrom(TEST_ACCOUNT_1, TEST_ACCOUNT_3, TRANSFER_FROM_AMOUNT, { from: TEST_ACCOUNT_2 }) + + // const TX_FEES = +(await erc20.calculateFees(TRANSFER_FROM_AMOUNT)).toString() + const TEST_ACT_1_END_BALANCE = +(await this.tokenIOERC20UnlimitedProxy.balanceOf(TEST_ACCOUNT_1)) + assert.equal(TEST_ACT_1_END_BALANCE, (TEST_ACT_1_BEG_BALANCE-TRANSFER_FROM_AMOUNT), "Ending balance should be net of transfer amount and fees") + + const TEST_ACT_3_END_BALANCE = +(await this.tokenIOERC20UnlimitedProxy.balanceOf(TEST_ACCOUNT_3)).toString() + assert.equal(TEST_ACT_3_END_BALANCE, TRANSFER_FROM_AMOUNT, "TEST_ACCOUNT_3 Balance should equal transfer amount"); + + const END_ALLOWANCE = +(await this.tokenIOERC20UnlimitedProxy.allowance(TEST_ACCOUNT_1, TEST_ACCOUNT_2)).toString() + assert.equal(END_ALLOWANCE, (TEST_ACT_1_BEG_BALANCE-TRANSFER_FROM_AMOUNT), "Allowance should be reduced by amount transferred") + }) + }) + + describe('staticCall', function () { + it('Should pass', async function () { + const payload = web3.eth.abi.encodeFunctionSignature('name()') + const encodedResult = await this.tokenIOERC20UnlimitedProxy.staticCall(payload); + const result = web3.eth.abi.decodeParameters(['string'], encodedResult); + assert.equal(result[0], TOKEN_NAME) + }); + }); + + describe('call', function () { + it('Should pass', async function () { + await this.tokenIOCurrencyAuthorityProxy.deposit(await this.tokenIOERC20UnlimitedProxy.symbol(), TEST_ACCOUNT_3, DEPOSIT_AMOUNT, "Token, Inc.") + const payload = web3.eth.abi.encodeFunctionCall({ + name: 'approve', + type: 'function', + inputs: [{ + type: 'address', + name: 'spender' + },{ + type: 'uint256', + name: 'amount' + },{ + type: 'address', + name: 'sender' + }] + }, [TEST_ACCOUNT_2, 1, TEST_ACCOUNT_3]); + + await this.tokenIOERC20UnlimitedProxy.call(payload); + }); + }); + +}) diff --git a/test/TokenIOFX.js b/test/TokenIOFXProxy.js similarity index 68% rename from test/TokenIOFX.js rename to test/TokenIOFXProxy.js index 4a3af7e..107e667 100644 --- a/test/TokenIOFX.js +++ b/test/TokenIOFXProxy.js @@ -4,6 +4,9 @@ var TokenIOERC20 = artifacts.require("./TokenIOERC20.sol"); var TokenIOCurrencyAuthority = artifacts.require("./TokenIOCurrencyAuthority.sol"); var TokenIOStorage = artifacts.require("./TokenIOStorage.sol"); var TokenIOFX = artifacts.require("./TokenIOFX.sol"); +var TokenIOERC20Proxy = artifacts.require("./TokenIOERC20Proxy.sol"); +var TokenIOCurrencyAuthorityProxy = artifacts.require("./TokenIOCurrencyAuthorityProxy.sol"); +var TokenIOFXProxy = artifacts.require("./TokenIOFXProxy.sol"); const { mode, development, production } = require('../token.config.js'); const { @@ -15,7 +18,7 @@ const USDx = TOKEN_DETAILS['USDx'] const EURx = TOKEN_DETAILS['EURx'] -contract("TokenIOFX", function(accounts) { +contract("TokenIOFXProxy", function(accounts) { // Globals const coder = new utils.AbiCoder() @@ -34,34 +37,42 @@ contract("TokenIOFX", function(accounts) { before(async () => { const storage = await TokenIOStorage.deployed() - TOKEN_A = await TokenIOERC20.new(storage.address) - TOKEN_B = await TokenIOERC20.new(storage.address) + const token1 = await TokenIOERC20.new(storage.address) + const token2 = await TokenIOERC20.new(storage.address) + await storage.allowOwnership(token1.address) + await storage.allowOwnership(token2.address) + TOKEN_A = await TokenIOERC20Proxy.new(token1.address) + TOKEN_B = await TokenIOERC20Proxy.new(token2.address) + await token1.allowOwnership(TOKEN_A.address) + await token1.initProxy(TOKEN_A.address) + await token2.allowOwnership(TOKEN_B.address) + await token2.initProxy(TOKEN_B.address) - await storage.allowOwnership(TOKEN_A.address) - await storage.allowOwnership(TOKEN_B.address) await TOKEN_A.setParams(...Object.values(USDx).map((v) => { return v })) await TOKEN_B.setParams(...Object.values(EURx).map((v) => { return v })) REQUESTER_WALLET = await Wallet.createRandom() }) - it("Should ensure token symbols are correctly set", async () => { + describe("Should ensure token symbols are correctly set", function () { + it("Should pass", async function () { TOKEN_A_SYMBOL = await TOKEN_A.symbol() TOKEN_B_SYMBOL = await TOKEN_B.symbol() assert.equal(TOKEN_A_SYMBOL, "USDx", "Initiated Token should be USDx") assert.equal(TOKEN_B_SYMBOL, "EURx", "Initiated Token should be EURx") - + }) }) - it("Should Deposit EURx into REQUESTER_WALLET account", async () => { - const CA = await TokenIOCurrencyAuthority.deployed(); + describe("Should Deposit EURx into REQUESTER_WALLET account", function () { + it("Should pass", async function () { + const CAProxy = await TokenIOCurrencyAuthorityProxy.deployed(); - const APPROVE_REQUESTER = await CA.approveKYC(REQUESTER_WALLET.address, true, SPENDING_LIMIT, "Token, Inc.") - const APPROVE_FULFILLER = await CA.approveKYC(TEST_ACCOUNT_1, true, SPENDING_LIMIT, "Token, Inc.") + const APPROVE_REQUESTER = await CAProxy.approveKYC(REQUESTER_WALLET.address, true, SPENDING_LIMIT, "Token, Inc.") + const APPROVE_FULFILLER = await CAProxy.approveKYC(TEST_ACCOUNT_1, true, SPENDING_LIMIT, "Token, Inc.") - const DEPOSIT_REQUESTER_AMOUNT_TX = await CA.deposit(TOKEN_B_SYMBOL, REQUESTER_WALLET.address, REQUESTER_OFFERED_AMOUNT, "Token, Inc.") - const DEPOSIT_FULFILLER_AMOUNT_TX = await CA.deposit(TOKEN_A_SYMBOL, TEST_ACCOUNT_1, REQUESTER_DESIRED_AMOUNT, "Token, Inc.") + const DEPOSIT_REQUESTER_AMOUNT_TX = await CAProxy.deposit(TOKEN_B_SYMBOL, REQUESTER_WALLET.address, REQUESTER_OFFERED_AMOUNT, "Token, Inc.") + const DEPOSIT_FULFILLER_AMOUNT_TX = await CAProxy.deposit(TOKEN_A_SYMBOL, TEST_ACCOUNT_1, REQUESTER_DESIRED_AMOUNT, "Token, Inc.") assert.equal(DEPOSIT_REQUESTER_AMOUNT_TX['receipt']['status'], "0x1", "Transaction should be successful") assert.equal(DEPOSIT_FULFILLER_AMOUNT_TX['receipt']['status'], "0x1", "Transaction should be successful") @@ -72,11 +83,12 @@ contract("TokenIOFX", function(accounts) { const FULFILLER_BALANCE = +(await TOKEN_A.balanceOf(TEST_ACCOUNT_1)).toString() assert.equal(FULFILLER_BALANCE, REQUESTER_DESIRED_AMOUNT, "Fulfiller balance should equal the requester desired amount") + }) + }) - }) - - it("Should allow the swap between the requester and the fulfiller", async () => { - const FX = await TokenIOFX.deployed(); + describe("Should allow the swap between the requester and the fulfiller", function () { + it("Should pass", async function () { + const FXProxy = await TokenIOFXProxy.deployed(); const expiration = ((new Date().getTime() * 1000) + 86400 ); @@ -95,7 +107,7 @@ contract("TokenIOFX", function(accounts) { assert.equal(+(await TOKEN_A.balanceOf(TEST_ACCOUNT_1)).toString(), REQUESTER_DESIRED_AMOUNT, "Fulfiller balance should equal the requester desired amount") assert.equal(+(await TOKEN_B.balanceOf(TEST_ACCOUNT_1)).toString(), 0, "Fulfiller balance for token B should be zero") - const SWAP_TX = await FX.swap( + const SWAP_TX = await FXProxy.swap( REQUESTER_WALLET.address.toLowerCase(), TOKEN_A_SYMBOL, TOKEN_B_SYMBOL, REQUESTER_DESIRED_AMOUNT, REQUESTER_OFFERED_AMOUNT, @@ -108,7 +120,7 @@ contract("TokenIOFX", function(accounts) { assert.equal(+(await TOKEN_B.balanceOf(REQUESTER_WALLET.address)).toString(), 0, "Requester balance for token B should be zero after swap") assert.equal(+(await TOKEN_B.balanceOf(TEST_ACCOUNT_1)).toString(), REQUESTER_OFFERED_AMOUNT, "Requester balance should equal desired amount") assert.equal(+(await TOKEN_A.balanceOf(TEST_ACCOUNT_1)).toString(), 0, "Fulfiller balance for token A should be zero after swap") - - }) + }) + }) }); diff --git a/test/TokenIOFeeContract.js b/test/TokenIOFeeContract.js deleted file mode 100644 index 258f6aa..0000000 --- a/test/TokenIOFeeContract.js +++ /dev/null @@ -1,71 +0,0 @@ -var { utils } = require('ethers'); -var Promise = require('bluebird') -var TokenIOFeeContract = artifacts.require("./TokenIOFeeContract.sol"); -var TokenIOERC20 = artifacts.require("./TokenIOERC20.sol"); -var TokenIOCurrencyAuthority = artifacts.require("./TokenIOCurrencyAuthority.sol"); - -const { mode, development, production } = require('../token.config.js'); - -const { - AUTHORITY_DETAILS: { firmName, authorityAddress }, - TOKEN_DETAILS -} = mode == 'production' ? production : development; - -const USDx = TOKEN_DETAILS['USDx'] - - -contract("TokenIOFeeContract", function(accounts) { - - const TEST_ACCOUNT_1 = accounts[0] - const TEST_ACCOUNT_2 = accounts[1] - const TEST_ACCOUNT_3 = accounts[2] - const DEPOSIT_AMOUNT = 10000e2 // 1 million USD; 2 decimal representation - const TRANSFER_AMOUNT = DEPOSIT_AMOUNT/4 - const SPENDING_LIMIT = DEPOSIT_AMOUNT/2 - - it("Should transfer an amount of funds and send the fees to the fee contract", async () => { - const CA = await TokenIOCurrencyAuthority.deployed() - const token = await TokenIOERC20.deployed() - const feeContract = await TokenIOFeeContract.deployed() - - const APPROVE_ACCOUNT_1_TX = await CA.approveKYC(TEST_ACCOUNT_1, true, SPENDING_LIMIT, "Token, Inc.") - const APPROVE_ACCOUNT_2_TX = await CA.approveKYC(TEST_ACCOUNT_2, true, SPENDING_LIMIT, "Token, Inc.") - const APPROVE_ACCOUNT_3_TX = await CA.approveKYC(TEST_ACCOUNT_3, true, SPENDING_LIMIT, "Token, Inc.") - - assert.equal(APPROVE_ACCOUNT_1_TX['receipt']['status'], "0x1", "Transaction should succeed.") - assert.equal(APPROVE_ACCOUNT_2_TX['receipt']['status'], "0x1", "Transaction should succeed.") - - const DEPOSIT_TX = await CA.deposit('USDx', TEST_ACCOUNT_1, DEPOSIT_AMOUNT, "Token, Inc.") - assert.equal(DEPOSIT_TX['receipt']['status'], "0x1", "Transaction should succeed.") - - const TRANSFER_TX = await token.transfer(TEST_ACCOUNT_2, TRANSFER_AMOUNT) - assert.equal(TRANSFER_TX['receipt']['status'], "0x1", "Transaction should succeed.") - - const FEE_CONTRACT_BALANCE = +(await token.balanceOf(feeContract.address)).toString(); - const TX_FEES = +(await token.calculateFees(TRANSFER_AMOUNT)).toString() - assert.equal(FEE_CONTRACT_BALANCE, TX_FEES, "Fee contract should have a balance equal to the transaction fees") - - - }) - - it("Should allow the fee contract to transfer an amount of tokens", async () => { - const feeContract = await TokenIOFeeContract.deployed() - const token = await TokenIOERC20.deployed() - - const TEST_ACCOUNT_3_BALANCE_BEG = +(await token.balanceOf(TEST_ACCOUNT_3)).toString() - assert.equal(0, TEST_ACCOUNT_3_BALANCE_BEG, "TEST_ACCOUNT_3 should have a starting balance of zero.") - - const FEE_BALANCE = +(await feeContract.getTokenBalance('USDx')).toString() - const TRANSFER_COLLECTED_FEES_TX = await feeContract.transferCollectedFees('USDx', TEST_ACCOUNT_3, FEE_BALANCE, "0x") - - assert.equal(TRANSFER_COLLECTED_FEES_TX['receipt']['status'], "0x1", "Transaction should succeed.") - - const TEST_ACCOUNT_3_BALANCE_END = +(await token.balanceOf(TEST_ACCOUNT_3)).toString() - assert.equal(FEE_BALANCE, TEST_ACCOUNT_3_BALANCE_END, "TEST_ACCOUNT_3 should have successfully received the amount of the fee balance.") - - }) - - - - -}) diff --git a/test/TokenIOFeeContractProxy.js b/test/TokenIOFeeContractProxy.js new file mode 100644 index 0000000..4422b84 --- /dev/null +++ b/test/TokenIOFeeContractProxy.js @@ -0,0 +1,113 @@ +var { utils } = require('ethers'); +var Promise = require('bluebird') +var TokenIOERC20Proxy = artifacts.require("./TokenIOERC20Proxy.sol"); +var TokenIOFeeContractProxy = artifacts.require("./TokenIOFeeContractProxy.sol"); +var TokenIOCurrencyAuthorityProxy = artifacts.require("./TokenIOCurrencyAuthorityProxy.sol"); + +const { mode, development, production } = require('../token.config.js'); + +const { + AUTHORITY_DETAILS: { firmName, authorityAddress }, + TOKEN_DETAILS +} = mode == 'production' ? production : development; + +const USDx = TOKEN_DETAILS['USDx'] + + +contract("TokenIOFeeContractProxy", function(accounts) { + + const TEST_ACCOUNT_1 = accounts[0] + const TEST_ACCOUNT_2 = accounts[1] + const TEST_ACCOUNT_3 = accounts[2] + const DEPOSIT_AMOUNT = 10000e2 // 1 million USD; 2 decimal representation + const TRANSFER_AMOUNT = DEPOSIT_AMOUNT/4 + const SPENDING_LIMIT = DEPOSIT_AMOUNT + + const TOKEN_NAME = USDx.tokenName; + const TOKEN_SYMBOL = USDx.tokenSymbol + const TOKEN_TLA = USDx.tokenTLA + const TOKEN_VERSION = USDx.tokenVersion + const TOKEN_DECIMALS = USDx.tokenDecimals + + before(async function () { + this.tokenIOERC20Proxy = await TokenIOERC20Proxy.deployed(); + this.tokenIOFeeContractProxy = await TokenIOFeeContractProxy.deployed(); + this.tokenIOCurrencyAuthorityProxy = await TokenIOCurrencyAuthorityProxy.deployed(); + + await this.tokenIOERC20Proxy.setParams(TOKEN_NAME, TOKEN_SYMBOL, TOKEN_TLA, TOKEN_VERSION, TOKEN_DECIMALS, this.tokenIOFeeContractProxy.address, 0); + }); + + describe('Should transfer an amount of funds and send the fees to the fee contract', function () { + it("Should pass", async function () { + const APPROVE_ACCOUNT_1_TX = await this.tokenIOCurrencyAuthorityProxy.approveKYC(TEST_ACCOUNT_1, true, SPENDING_LIMIT, "Token, Inc.") + const APPROVE_ACCOUNT_2_TX = await this.tokenIOCurrencyAuthorityProxy.approveKYC(TEST_ACCOUNT_2, true, SPENDING_LIMIT, "Token, Inc.") + const APPROVE_ACCOUNT_3_TX = await this.tokenIOCurrencyAuthorityProxy.approveKYC(TEST_ACCOUNT_3, true, SPENDING_LIMIT, "Token, Inc.") + + assert.equal(APPROVE_ACCOUNT_1_TX['receipt']['status'], "0x1", "Transaction should succeed.") + assert.equal(APPROVE_ACCOUNT_2_TX['receipt']['status'], "0x1", "Transaction should succeed.") + + const DEPOSIT_TX = await this.tokenIOCurrencyAuthorityProxy.deposit('USDx', TEST_ACCOUNT_1, DEPOSIT_AMOUNT, "Token, Inc.") + assert.equal(DEPOSIT_TX['receipt']['status'], "0x1", "Transaction should succeed.") + + const TRANSFER_TX = await this.tokenIOERC20Proxy.transfer(TEST_ACCOUNT_2, TRANSFER_AMOUNT) + assert.equal(TRANSFER_TX['receipt']['status'], "0x1", "Transaction should succeed.") + + const FEE_CONTRACT_BALANCE = +(await this.tokenIOERC20Proxy.balanceOf(this.tokenIOFeeContractProxy.address)).toString(); + const TX_FEES = +(await this.tokenIOERC20Proxy.calculateFees(TRANSFER_AMOUNT)).toString() + assert.equal(FEE_CONTRACT_BALANCE, TX_FEES, "Fee contract should have a balance equal to the transaction fees") + + }) + }); + + describe('Should allow the fee contract to transfer an amount of tokens', function () { + it("Should pass", async function () { + const TEST_ACCOUNT_3_BALANCE_BEG = +(await this.tokenIOERC20Proxy.balanceOf(TEST_ACCOUNT_3)).toString() + assert.equal(0, TEST_ACCOUNT_3_BALANCE_BEG, "TEST_ACCOUNT_3 should have a starting balance of zero.") + + const FEE_BALANCE = +(await this.tokenIOFeeContractProxy.getTokenBalance('USDx')).toString() + const TRANSFER_COLLECTED_FEES_TX = await this.tokenIOFeeContractProxy.transferCollectedFees('USDx', TEST_ACCOUNT_3, FEE_BALANCE, "0x") + + assert.equal(TRANSFER_COLLECTED_FEES_TX['receipt']['status'], "0x1", "Transaction should succeed.") + + const TEST_ACCOUNT_3_BALANCE_END = +(await this.tokenIOERC20Proxy.balanceOf(TEST_ACCOUNT_3)).toString() + assert.equal(FEE_BALANCE, TEST_ACCOUNT_3_BALANCE_END, "TEST_ACCOUNT_3 should have successfully received the amount of the fee balance.") + + }) + }) + + describe('staticCall', function () { + it('Should pass', async function () { + const payload = web3.eth.abi.encodeFunctionSignature('name()') + const encodedResult = await this.tokenIOERC20Proxy.staticCall(payload); + const result = web3.eth.abi.decodeParameters(['string'], encodedResult); + assert.equal(result[0], TOKEN_NAME) + }); + }); + + describe('call', function () { + it('Should pass', async function () { + await this.tokenIOERC20Proxy.transfer(TEST_ACCOUNT_2, TRANSFER_AMOUNT) + const FEE_BALANCE = +(await this.tokenIOFeeContractProxy.getTokenBalance('USDx')).toString() + const payload = web3.eth.abi.encodeFunctionCall({ + name: 'transferCollectedFees', + type: 'function', + inputs: [{ + type: 'string', + name: 'currency' + },{ + type: 'address', + name: 'to' + },{ + type: 'uint256', + name: 'amount' + },{ + type: 'bytes', + name: 'data' + }] + }, ['USDx', TEST_ACCOUNT_3, FEE_BALANCE, "0x"]); + + await this.tokenIOFeeContractProxy.call(payload); + }); + }); + +}) diff --git a/test/TokenIOMerchant.js b/test/TokenIOMerchant.js deleted file mode 100644 index d86c5b3..0000000 --- a/test/TokenIOMerchant.js +++ /dev/null @@ -1,78 +0,0 @@ -var { utils } = require('ethers'); -var Promise = require('bluebird') -var TokenIOFeeContract = artifacts.require("./TokenIOFeeContract.sol"); -var TokenIOMerchant = artifacts.require("./TokenIOMerchant.sol"); -var TokenIOERC20 = artifacts.require("./TokenIOERC20.sol"); -var TokenIOCurrencyAuthority = artifacts.require("./TokenIOCurrencyAuthority.sol"); - -const { mode, development, production } = require('../token.config.js'); - -const { - AUTHORITY_DETAILS: { firmName, authorityAddress }, - TOKEN_DETAILS -} = mode == 'production' ? production : development; - -const USDx = TOKEN_DETAILS['USDx'] - - -contract("TokenIOFeeContract", function(accounts) { - - const TEST_ACCOUNT_1 = accounts[0] - const TEST_ACCOUNT_2 = accounts[1] - const MERCHANT_ACCOUNT = TEST_ACCOUNT_2 - const TEST_ACCOUNT_3 = accounts[2] - const DEPOSIT_AMOUNT = 10000e2 // 1 million USD; 2 decimal representation - const TRANSFER_AMOUNT = DEPOSIT_AMOUNT/4 - const SPENDING_LIMIT = DEPOSIT_AMOUNT/2 - const CURRENCY_SYMBOL = 'USDx' - const MERCHANT_PAYS_FEES = true; - - it("Should transfer an amount of funds to merchant and send the fees to the fee contract", async () => { - const CA = await TokenIOCurrencyAuthority.deployed() - const merchant = await TokenIOMerchant.deployed() - const token = await TokenIOERC20.deployed() - const feeContract = await TokenIOFeeContract.deployed() - - const APPROVE_ACCOUNT_1_TX = await CA.approveKYC(TEST_ACCOUNT_1, true, SPENDING_LIMIT, "Token, Inc.") - const APPROVE_ACCOUNT_2_TX = await CA.approveKYC(TEST_ACCOUNT_2, true, SPENDING_LIMIT, "Token, Inc.") - const APPROVE_ACCOUNT_3_TX = await CA.approveKYC(TEST_ACCOUNT_3, true, SPENDING_LIMIT, "Token, Inc.") - - assert.equal(APPROVE_ACCOUNT_1_TX['receipt']['status'], "0x1", "Transaction should succeed.") - assert.equal(APPROVE_ACCOUNT_2_TX['receipt']['status'], "0x1", "Transaction should succeed.") - - const DEPOSIT_TX = await CA.deposit(CURRENCY_SYMBOL, TEST_ACCOUNT_1, DEPOSIT_AMOUNT, "Token, Inc.") - assert.equal(DEPOSIT_TX['receipt']['status'], "0x1", "Transaction should succeed.") - - const TRANSFER_TX = await merchant.pay(CURRENCY_SYMBOL, MERCHANT_ACCOUNT, TRANSFER_AMOUNT, MERCHANT_PAYS_FEES, "0x0") - assert.equal(TRANSFER_TX['receipt']['status'], "0x1", "Transaction should succeed.") - - const FEE_CONTRACT_BALANCE = +(await token.balanceOf(feeContract.address)).toString(); - const TX_FEES = +(await merchant.calculateFees(TRANSFER_AMOUNT)).toString() - assert.equal(FEE_CONTRACT_BALANCE, TX_FEES, "Fee contract should have a balance equal to the transaction fees") - - const MERCHANT_ACCOUNT_BALANCE = +(await token.balanceOf(MERCHANT_ACCOUNT)).toString(); - assert.equal(MERCHANT_ACCOUNT_BALANCE, (TRANSFER_AMOUNT-TX_FEES), "Merchant account should have a balance equal to the transaction amount minus fees") - - }) - - it("Should allow the fee contract to transfer an amount of tokens", async () => { - const feeContract = await TokenIOFeeContract.deployed() - const token = await TokenIOERC20.deployed() - - const TEST_ACCOUNT_3_BALANCE_BEG = +(await token.balanceOf(TEST_ACCOUNT_3)).toString() - assert.equal(0, TEST_ACCOUNT_3_BALANCE_BEG, "TEST_ACCOUNT_3 should have a starting balance of zero.") - - const FEE_BALANCE = +(await feeContract.getTokenBalance(CURRENCY_SYMBOL)).toString() - const TRANSFER_COLLECTED_FEES_TX = await feeContract.transferCollectedFees(CURRENCY_SYMBOL, TEST_ACCOUNT_3, FEE_BALANCE, "0x") - - assert.equal(TRANSFER_COLLECTED_FEES_TX['receipt']['status'], "0x1", "Transaction should succeed.") - - const TEST_ACCOUNT_3_BALANCE_END = +(await token.balanceOf(TEST_ACCOUNT_3)).toString() - assert.equal(FEE_BALANCE, TEST_ACCOUNT_3_BALANCE_END, "TEST_ACCOUNT_3 should have successfully received the amount of the fee balance.") - - }) - - - - -}) diff --git a/test/TokenIOMerchantProxy.js b/test/TokenIOMerchantProxy.js new file mode 100644 index 0000000..8336b7f --- /dev/null +++ b/test/TokenIOMerchantProxy.js @@ -0,0 +1,135 @@ +var { utils } = require('ethers'); +var Promise = require('bluebird') +var TokenIOFeeContractProxy = artifacts.require("./TokenIOFeeContractProxy.sol"); +var TokenIOMerchantProxy = artifacts.require("./TokenIOMerchantProxy.sol"); +var TokenIOERC20Proxy = artifacts.require("./TokenIOERC20Proxy.sol"); +var TokenIOCurrencyAuthorityProxy = artifacts.require("./TokenIOCurrencyAuthorityProxy.sol"); + +const { mode, development, production } = require('../token.config.js'); + +const { + AUTHORITY_DETAILS: { firmName, authorityAddress }, + TOKEN_DETAILS +} = mode == 'production' ? production : development; + +const USDx = TOKEN_DETAILS['USDx'] + + +contract("TokenIOMerchantProxy", function(accounts) { + + const TEST_ACCOUNT_1 = accounts[0] + const TEST_ACCOUNT_2 = accounts[1] + const MERCHANT_ACCOUNT = TEST_ACCOUNT_2 + const TEST_ACCOUNT_3 = accounts[2] + const DEPOSIT_AMOUNT = 10000e2 // 1 million USD; 2 decimal representation + const TRANSFER_AMOUNT = DEPOSIT_AMOUNT/4 + const SPENDING_LIMIT = DEPOSIT_AMOUNT/2 + const MERCHANT_PAYS_FEES = true; + + const TOKEN_NAME = USDx.tokenName + const TOKEN_SYMBOL = USDx.tokenSymbol + const TOKEN_TLA = USDx.tokenTLA + const TOKEN_VERSION = USDx.tokenVersion + const TOKEN_DECIMALS = USDx.tokenDecimals + + it("Should transfer an amount of funds to merchant and send the fees to the fee contract", async () => { + const CAProxy = await TokenIOCurrencyAuthorityProxy.deployed() + const merchantProxy = await TokenIOMerchantProxy.deployed() + const tokenProxy = await TokenIOERC20Proxy.deployed() + const feeContractProxy = await TokenIOFeeContractProxy.deployed(); + + await merchantProxy.setParams(feeContractProxy.address) + await tokenProxy.setParams(TOKEN_NAME, TOKEN_SYMBOL, TOKEN_TLA, TOKEN_VERSION, TOKEN_DECIMALS, feeContractProxy.address, 10000); + + const APPROVE_ACCOUNT_1_TX = await CAProxy.approveKYC(TEST_ACCOUNT_1, true, SPENDING_LIMIT, "Token, Inc.") + const APPROVE_ACCOUNT_2_TX = await CAProxy.approveKYC(TEST_ACCOUNT_2, true, SPENDING_LIMIT, "Token, Inc.") + const APPROVE_ACCOUNT_3_TX = await CAProxy.approveKYC(TEST_ACCOUNT_3, true, SPENDING_LIMIT, "Token, Inc.") + + assert.equal(APPROVE_ACCOUNT_1_TX['receipt']['status'], "0x1", "Transaction should succeed.") + assert.equal(APPROVE_ACCOUNT_2_TX['receipt']['status'], "0x1", "Transaction should succeed.") + + const DEPOSIT_TX = await CAProxy.deposit(TOKEN_SYMBOL, TEST_ACCOUNT_1, DEPOSIT_AMOUNT, "Token, Inc.") + assert.equal(DEPOSIT_TX['receipt']['status'], "0x1", "Transaction should succeed.") + + const TRANSFER_TX = await merchantProxy.pay(TOKEN_SYMBOL, MERCHANT_ACCOUNT, TRANSFER_AMOUNT, MERCHANT_PAYS_FEES, "0x0") + assert.equal(TRANSFER_TX['receipt']['status'], "0x1", "Transaction should succeed.") + + const FEE_CONTRACT_BALANCE = +(await tokenProxy.balanceOf(feeContractProxy.address)).toString(); + const TX_FEES = +(await merchantProxy.calculateFees(TRANSFER_AMOUNT)).toString() + assert.equal(FEE_CONTRACT_BALANCE, TX_FEES, "Fee contract should have a balance equal to the transaction fees") + + const MERCHANT_ACCOUNT_BALANCE = +(await tokenProxy.balanceOf(MERCHANT_ACCOUNT)).toString(); + assert.equal(MERCHANT_ACCOUNT_BALANCE, (TRANSFER_AMOUNT-TX_FEES), "Merchant account should have a balance equal to the transaction amount minus fees") + + }) + + it("Should allow the fee contract to transfer an amount of tokens", async () => { + const tokenProxy = await TokenIOERC20Proxy.deployed() + const feeContractProxy = await TokenIOFeeContractProxy.deployed() + + await tokenProxy.setParams(TOKEN_NAME, TOKEN_SYMBOL, TOKEN_TLA, TOKEN_VERSION, TOKEN_DECIMALS, feeContractProxy.address, 10000); + + const TEST_ACCOUNT_3_BALANCE_BEG = +(await tokenProxy.balanceOf(TEST_ACCOUNT_3)).toString() + assert.equal(0, TEST_ACCOUNT_3_BALANCE_BEG, "TEST_ACCOUNT_3 should have a starting balance of zero.") + + const FEE_BALANCE = +(await feeContractProxy.getTokenBalance(TOKEN_SYMBOL)).toString() + const TRANSFER_COLLECTED_FEES_TX = await feeContractProxy.transferCollectedFees(TOKEN_SYMBOL, TEST_ACCOUNT_3, FEE_BALANCE, "0x") + + assert.equal(TRANSFER_COLLECTED_FEES_TX['receipt']['status'], "0x1", "Transaction should succeed.") + + const TEST_ACCOUNT_3_BALANCE_END = +(await tokenProxy.balanceOf(TEST_ACCOUNT_3)).toString() + assert.equal(FEE_BALANCE, TEST_ACCOUNT_3_BALANCE_END, "TEST_ACCOUNT_3 should have successfully received the amount of the fee balance.") + + }) + + describe('staticCall', function () { + it('Should pass', async function () { + const merchantProxy = await TokenIOMerchantProxy.deployed() + const payload = web3.eth.abi.encodeFunctionCall({ + name: 'calculateFees', + type: 'function', + inputs: [{ + type: 'uint256', + name: 'amount' + }] + }, [TRANSFER_AMOUNT]); + const encodedResult = await merchantProxy.staticCall(payload); + const result = web3.eth.abi.decodeParameters(['uint256'], encodedResult); + assert.equal(result[0] > 0, true) + }); + }); + + describe('call', function () { + it('Should pass', async function () { + const merchantProxy = await TokenIOMerchantProxy.deployed() + const payload = web3.eth.abi.encodeFunctionCall({ + name: 'pay', + type: 'function', + inputs: [{ + type: 'string', + name: 'currency' + },{ + type: 'address', + name: 'merchant' + },{ + type: 'uint256', + name: 'amount' + },{ + type: 'bool', + name: 'merchantPaysFees' + },{ + type: 'bytes', + name: 'data' + },{ + type: 'address', + name: 'sender' + }] + }, [TOKEN_SYMBOL, MERCHANT_ACCOUNT, TRANSFER_AMOUNT, MERCHANT_PAYS_FEES, "0x0", TEST_ACCOUNT_1]); + + await merchantProxy.call(payload); + }); + }); + + + +}) diff --git a/test/TokenIOStableSwapProxy.js b/test/TokenIOStableSwapProxy.js new file mode 100644 index 0000000..c0e6db0 --- /dev/null +++ b/test/TokenIOStableSwapProxy.js @@ -0,0 +1,149 @@ +var { Wallet, utils, SigningKey } = require('ethers'); +var Promise = require('bluebird') + +var TokenIOERC20Unlimited = artifacts.require("./TokenIOERC20Unlimited.sol"); +var TokenIOStorage = artifacts.require("./TokenIOStorage.sol"); +var TokenIOERC20UnlimitedProxy = artifacts.require("./TokenIOERC20UnlimitedProxy.sol"); +var TokenIOCurrencyAuthorityProxy = artifacts.require("./TokenIOCurrencyAuthorityProxy.sol"); +var TokenIOStableSwap = artifacts.require("./TokenIOStableSwap.sol"); +var TokenIOStableSwapProxy = artifacts.require("./TokenIOStableSwapProxy.sol"); + +const { mode, development, production } = require('../token.config.js'); +const { + AUTHORITY_DETAILS: { firmName, authorityAddress }, + FEE_PARAMS: { feeBps, feeMin, feeMax, feeFlat }, + TOKEN_DETAILS +} = mode == 'production' ? production : development; + +const USDc = TOKEN_DETAILS['USDc'] + + +contract("TokenIOStableSwapProxy", function(accounts) { + + // Globals + const DEPOSIT_AMOUNT = 100e6; + const SWAP_AMOUNT = 100e6; + const TEST_ACCOUNT_1 = accounts[1] + + + var USDX, + USDC, + SWAP, + CA; + + before(async () => { + const storage = await TokenIOStorage.deployed() + + CA = await TokenIOCurrencyAuthorityProxy.deployed(); + SWAP = await TokenIOStableSwap.new(storage.address); + await storage.allowOwnership(SWAP.address) + + SWAPproxy = await TokenIOStableSwapProxy.new(SWAP.address); + SWAP.allowOwnership(SWAPproxy.address) + SWAP.initProxy(SWAPproxy.address) + + USDX = await TokenIOERC20UnlimitedProxy.deployed() + + USDC = await TokenIOERC20Unlimited.new(storage.address) + await storage.allowOwnership(USDC.address) + + USDCproxy = await TokenIOERC20UnlimitedProxy.new(USDC.address) + USDC.allowOwnership(USDCproxy.address) + USDC.initProxy(USDCproxy.address) + + await USDCproxy.setParams(...Object.values(USDc).map((v) => { return v })) + + await SWAP.setTokenXCurrency(USDX.address, 'USD'); + + // feeBps, feeMin, feeMax, feeFlat + await SWAP.allowAsset(USDCproxy.address, 'USD', 10, 0, 1e12, 0); + }) + + it("Should Deposit USDc into TEST_ACCOUNT_1 account", async () => { + const APPROVE_REQUESTER = await CA.approveKYC(TEST_ACCOUNT_1, true, DEPOSIT_AMOUNT, firmName) + + const DEPOSIT_REQUESTER_AMOUNT_TX = await CA.deposit((await USDCproxy.symbol()), TEST_ACCOUNT_1, DEPOSIT_AMOUNT, firmName) + + assert.equal(DEPOSIT_REQUESTER_AMOUNT_TX['receipt']['status'], "0x1", "Transaction should be successful") + + + const TEST_ACCOUNT_1_BALANCE = +(await USDCproxy.balanceOf(TEST_ACCOUNT_1)).toString() + assert.equal(TEST_ACCOUNT_1_BALANCE, DEPOSIT_AMOUNT, "Requester balance should equal deposit amount") + + await USDCproxy.approve(SWAP.address, SWAP_AMOUNT, { from: TEST_ACCOUNT_1 }) + assert.equal(+(await USDCproxy.allowance(TEST_ACCOUNT_1, SWAP.address)), SWAP_AMOUNT, "Allowance of swap contract should equal requester deposit amount"); + + }) + + it("Should allow the swap between the requester and the contract", async () => { + await SWAPproxy.convert(USDCproxy.address, USDX.address, SWAP_AMOUNT, { from: TEST_ACCOUNT_1 }) + + // const FEES = +(await USDC.calculateFees(SWAP_AMOUNT)) // NOTE: These fees only apply in testing due to Token X ERC20 dummy asset + const SWAP_FEES = +(await SWAPproxy.calcAssetFees(USDCproxy.address, SWAP_AMOUNT)); + const NET_AMOUNT = (SWAP_AMOUNT-SWAP_FEES); + const CONVERTED_AMOUNT = (NET_AMOUNT * (10 ** 2)) / (10 ** 6) + const TEST_ACCOUNT_1_USDC_BALANCE = +(await USDCproxy.balanceOf(TEST_ACCOUNT_1)).toString() + assert.equal(TEST_ACCOUNT_1_USDC_BALANCE, (DEPOSIT_AMOUNT-SWAP_AMOUNT), "Requester balance should be reduced by swap amount") + + const SWAP_CONTRACT_USDC_BALANCE = +(await USDCproxy.balanceOf(SWAP.address)).toString() + assert.equal(SWAP_CONTRACT_USDC_BALANCE, (SWAP_AMOUNT), "Swap Balance of USDC should be equal to the swamp amount.") + + const TEST_ACCOUNT_1_USDX_BALANCE = +(await USDX.balanceOf(TEST_ACCOUNT_1)).toString() + assert.equal(TEST_ACCOUNT_1_USDX_BALANCE, CONVERTED_AMOUNT, "Requester balance should equal requester deposit amount for USDX contract") + }) + + it("Should allow the swap between the requester and the contract in reverse", async () => { + const SWAP_AMOUNT_2 = +(await USDX.balanceOf(TEST_ACCOUNT_1)); + + await SWAPproxy.convert(USDX.address, USDCproxy.address, SWAP_AMOUNT_2, { from: TEST_ACCOUNT_1 }) + const CONVERTED_AMOUNT = (SWAP_AMOUNT_2 / (10 ** 2)) * (10 ** 6) + const SWAP_FEES = +(await SWAPproxy.calcAssetFees(USDCproxy.address, CONVERTED_AMOUNT)); + + const TEST_ACCOUNT_1_USDX_BALANCE = +(await USDX.balanceOf(TEST_ACCOUNT_1)).toString() + assert.equal(TEST_ACCOUNT_1_USDX_BALANCE, 0, "Requester balance should be reduced by swap amount") + + const TEST_ACCOUNT_1_USDC_BALANCE = +(await USDCproxy.balanceOf(TEST_ACCOUNT_1)).toString() + assert.equal(TEST_ACCOUNT_1_USDC_BALANCE, CONVERTED_AMOUNT-SWAP_FEES, "Requester balance should equal requester deposit amount for USDC contract") + + const SWAP_CONTRACT_USDC_BALANCE = +(await USDCproxy.balanceOf(SWAP.address)).toString() + + assert.equal(SWAP_CONTRACT_USDC_BALANCE, ( + +(await SWAPproxy.calcAssetFees(USDCproxy.address, SWAP_AMOUNT)) + + +(await SWAPproxy.calcAssetFees(USDCproxy.address, CONVERTED_AMOUNT)) + ), "Swap Balance of USDC should be equal to the swamp amount.") + }) + + describe('staticCall', function () { + it('Should pass', async function () { + const payload = web3.eth.abi.encodeFunctionCall({ + name: 'calcAssetFees', + type: 'function', + inputs: [{ + type: 'address', + name: 'asset' + },{ + type: 'uint256', + name: 'amount' + }] + }, [USDCproxy.address, (await USDX.balanceOf(TEST_ACCOUNT_1) / (10 ** 2)) * (10 ** 6)]); + const encodedResult = await SWAPproxy.staticCall(payload); + const result = web3.eth.abi.decodeParameters(['uint256'], encodedResult); + }); + }); + + describe('call', function () { + it('Should pass', async function () { + const payload = web3.eth.abi.encodeFunctionCall({ + name: 'initProxy', + type: 'function', + inputs: [{ + type: 'address', + name: '_proxy' + }] + }, [SWAPproxy.address]); + + await SWAPproxy.call(payload); + }); + }); + +}); diff --git a/test/TokenIOStorage.js b/test/TokenIOStorage.js index 7838870..724b851 100644 --- a/test/TokenIOStorage.js +++ b/test/TokenIOStorage.js @@ -24,7 +24,7 @@ contract("TokenIOStorage", function(accounts) { const TEST_ACCOUNT_1 = accounts[0] const TEST_ACCOUNT_2 = accounts[1] const DEPOSIT_AMOUNT = 10000e2 - const SPENDING_LIMIT = DEPOSIT_AMOUNT/2 + const SPENDING_LIMIT = DEPOSIT_AMOUNT/2 it("Should get the token details directly from the storage contract", async () => { const storage = await TokenIOStorage.deployed() @@ -46,7 +46,7 @@ contract("TokenIOStorage", function(accounts) { const storage = await TokenIOStorage.deployed() const token = await TokenIOERC20.deployed() - const APPROVE_AND_DEPOSIT = await CA.approveKYCAndDeposit('USDx', TEST_ACCOUNT_2, DEPOSIT_AMOUNT, SPENDING_LIMIT, "Token, Inc.") + const APPROVE_AND_DEPOSIT = await CA.approveKYCAndDeposit('USDx', TEST_ACCOUNT_2, DEPOSIT_AMOUNT, SPENDING_LIMIT, "Token, Inc.", TEST_ACCOUNT_1) assert.equal(APPROVE_AND_DEPOSIT['receipt']['status'], "0x1", "Transaction should succeed.") const TOKEN_SUPPLY = +(await CA.getTokenSupply('USDx')).toString() @@ -127,7 +127,7 @@ contract("TokenIOStorage", function(accounts) { assert.equal(DELETE_TX['receipt']['status'], "0x1", "Transaction should succeed.") const GET_VALUE_END = await storage.getBytes(id) - assert.equal("0x", GET_VALUE_END, "Bytes value should be deleted from storage.") + assert.equal(null, GET_VALUE_END, "Bytes value should be deleted from storage.") }) it("Should set, get, and delete a bool value", async () => { @@ -164,6 +164,91 @@ contract("TokenIOStorage", function(accounts) { assert.equal(0, GET_VALUE_END, "Int value should be deleted from storage.") }) + it("Should set, get and delete token name value", async () => { + const storage = await TokenIOStorage.deployed() + const id = "0x166a8e28b4afdb04d6ce602644452c71e9f5f885"; // test account + const value = "test" + const SET_TX = await storage.setTokenName(id, value) + assert.equal(SET_TX['receipt']['status'], "0x1", "Transaction should succeed.") + + const GET_VALUE_BEG = await storage.getTokenName(id) + assert.equal(value, GET_VALUE_BEG, "Int value should be the same value retrieved from storage.") + + const DELETE_TX = await storage.deleteTokenName(id) + assert.equal(DELETE_TX['receipt']['status'], "0x1", "Transaction should succeed.") + + const GET_VALUE_END = await storage.getTokenName(id) + assert.equal("", GET_VALUE_END, "String value should be deleted from storage.") + }) + + it("Should set, get and delete token symbol value", async () => { + const storage = await TokenIOStorage.deployed() + const id = "0x166a8e28b4afdb04d6ce602644452c71e9f5f885"; // test account + const value = "test symbol" + const SET_TX = await storage.setTokenSymbol(id, value) + assert.equal(SET_TX['receipt']['status'], "0x1", "Transaction should succeed.") + + const GET_VALUE_BEG = await storage.getTokenSymbol(id) + assert.equal(value, GET_VALUE_BEG, "Int value should be the same value retrieved from storage.") + + const DELETE_TX = await storage.deleteTokenSymbol(id) + assert.equal(DELETE_TX['receipt']['status'], "0x1", "Transaction should succeed.") + + const GET_VALUE_END = await storage.getTokenSymbol(id) + assert.equal("", GET_VALUE_END, "String value should be deleted from storage.") + }) + + it("Should set, get and delete TLA value", async () => { + const storage = await TokenIOStorage.deployed() + const id = "0x166a8e28b4afdb04d6ce602644452c71e9f5f885"; // test account + const value = "test TLA" + const SET_TX = await storage.setTokenTLA(id, value) + assert.equal(SET_TX['receipt']['status'], "0x1", "Transaction should succeed.") + + const GET_VALUE_BEG = await storage.getTokenTLA(id) + assert.equal(value, GET_VALUE_BEG, "Int value should be the same value retrieved from storage.") + + const DELETE_TX = await storage.deleteTokenTLA(id) + assert.equal(DELETE_TX['receipt']['status'], "0x1", "Transaction should succeed.") + + const GET_VALUE_END = await storage.getTokenTLA(id) + assert.equal("", GET_VALUE_END, "String value should be deleted from storage.") + }) + + it("Should set, get and delete token version value", async () => { + const storage = await TokenIOStorage.deployed() + const id = "0x166a8e28b4afdb04d6ce602644452c71e9f5f885"; // test account + const value = "test Token version" + const SET_TX = await storage.setTokenVersion(id, value) + assert.equal(SET_TX['receipt']['status'], "0x1", "Transaction should succeed.") + + const GET_VALUE_BEG = await storage.getTokenVersion(id) + assert.equal(value, GET_VALUE_BEG, "Int value should be the same value retrieved from storage.") + + const DELETE_TX = await storage.deleteTokenVersion(id) + assert.equal(DELETE_TX['receipt']['status'], "0x1", "Transaction should succeed.") + + const GET_VALUE_END = await storage.getTokenVersion(id) + assert.equal("", GET_VALUE_END, "String value should be deleted from storage.") + }) + + it("Should set, get and delete token fee contract", async () => { + const storage = await TokenIOStorage.deployed() + const id = "0x166a8e28b4afdb04d6ce602644452c71e9f5f885"; // test account + const value = "0x3fd181cf0594b266ee8187e1dad94de229c98192" + const SET_TX = await storage.setTokenFeeContract(id, value) + assert.equal(SET_TX['receipt']['status'], "0x1", "Transaction should succeed.") + + const GET_VALUE_BEG = await storage.getTokenFeeContract(id) + assert.equal(value, GET_VALUE_BEG.toLowerCase(), "Int value should be the same value retrieved from storage.") + + const DELETE_TX = await storage.deleteTokenFeeContract(id) + assert.equal(DELETE_TX['receipt']['status'], "0x1", "Transaction should succeed.") + + const GET_VALUE_END = await storage.getTokenFeeContract(id) + assert.equal("0x0000000000000000000000000000000000000000", GET_VALUE_END, "String value should be deleted from storage.") + }) + it("Should not allow an unauthorized account to set or delete a storage value", async () => { try { const storage = await TokenIOStorage.deployed() diff --git a/token.config.js b/token.config.js index 61dbbfb..5fce97e 100644 --- a/token.config.js +++ b/token.config.js @@ -4,9 +4,21 @@ const USDx = { tokenName: 'TokenX USD', // tokenName tokenSymbol: 'USDx', // tokenSymbol tokenTLA: 'USD', // tokenTLA - tokenVersion: 'v0.3.0', // tokenVersion + tokenVersion: 'v1.0.1', // tokenVersion tokenDecimals: 2, // tokenDecimals - feeContract: "0x0", // fee account + feeContract: "0x0000000000000000000000000000000000000000", // fee account + fxBPSRate: 10000 +} + +const USDc = { + // Ensure these values are ordered in the object for the respective param list + // index in the erc20 contract setPrams() method. + tokenName: 'Dummy Token For USDc', // tokenName + tokenSymbol: 'USDc', // tokenSymbol + tokenTLA: 'USD', // tokenTLA + tokenVersion: 'v1.0.1', // tokenVersion + tokenDecimals: 6, // tokenDecimals + feeContract: "0x0000000000000000000000000000000000000000", // fee account fxBPSRate: 10000 } @@ -16,9 +28,9 @@ const MXNx = { tokenName: 'TokenX MXN', // tokenName tokenSymbol: 'MXNx', // tokenSymbol tokenTLA: 'MXN', // tokenTLA - tokenVersion: 'v0.3.0', // tokenVersion + tokenVersion: 'v1.0.1', // tokenVersion tokenDecimals: 2, // tokenDecimals - feeContract: "0x0", // fee account + feeContract: "0x0000000000000000000000000000000000000000", // fee account fxBPSRate: 510 } @@ -28,9 +40,9 @@ const GBPx = { tokenName: 'TokenX GBP', // tokenName tokenSymbol: 'GBPx', // tokenSymbol tokenTLA: 'GBP', // tokenTLA - tokenVersion: 'v0.3.0', // tokenVersion + tokenVersion: 'v1.0.1', // tokenVersion tokenDecimals: 2, // tokenDecimals - feeContract: "0x0", // fee account + feeContract: "0x0000000000000000000000000000000000000000", // fee account fxBPSRate: 13200 } @@ -40,9 +52,9 @@ const JPYx = { tokenName: 'TokenX JPY', // tokenName tokenSymbol: 'JPYx', // tokenSymbol tokenTLA: 'JPY', // tokenTLA - tokenVersion: 'v0.3.0', // tokenVersion + tokenVersion: 'v1.0.1', // tokenVersion tokenDecimals: 0, // tokenDecimals - feeContract: "0x0", // fee account + feeContract: "0x0000000000000000000000000000000000000000", // fee account fxBPSRate: 90 } @@ -52,13 +64,14 @@ const EURx = { tokenName: 'TokenX EUR', // tokenName tokenSymbol: 'EURx', // tokenSymbol tokenTLA: 'EUR', // tokenTLA - tokenVersion: 'v0.3.0', // tokenVersion + tokenVersion: 'v1.0.1', // tokenVersion tokenDecimals: 2, // tokenDecimals - feeContract: "0x0", // fee account + feeContract: "0x0000000000000000000000000000000000000000", // fee account fxBPSRate: 11700 } const TOKEN_DETAILS = { + USDc, // DUMMY TOKEN, NOT FOR DEPLOYMENT, ONLY FOR TESTS USDx, EURx, // MXNx, @@ -92,12 +105,3 @@ module.exports = { FEE_PARAMS } } - - -// "Token USD", -// "USDx", -// "USD", -// "v0.1.2", -// 2, -// "0x310bd4225ecef15ba21bab3fce87289ee6568f4f", -// 10000 diff --git a/truffle.js b/truffle.js index 72a319a..0bd7538 100644 --- a/truffle.js +++ b/truffle.js @@ -6,16 +6,16 @@ const NonceTrackerSubprovider = require("web3-provider-engine/subproviders/nonce module.exports = { networks: { develop: { - host: "0.0.0.0", - port: 9545, - network_id: "*", // Match any network id - gas: 7e6 + host: "127.0.0.1", + port: 8545, + network_id: 0, // Match any network id + gas: 6e6 }, poa: { host: "104.236.47.153", port: 4000, network_id: 9, // Match any network id - gas: 8e6 + gas: 8e6 }, ropsten: { provider: () => { @@ -41,10 +41,13 @@ module.exports = { gasPrice: 10e9 // 10 gwei } }, - solc: { - optimizer: { - enabled: true, - runs: 200 + compilers: { + solc: { + version: '0.5.2', + optimizer: { + enabled: true, + runs: 200 + } } } -}; +}; \ No newline at end of file