{"sources":{"OwnedUpgradeabilityProxy.sol":{"content":"pragma solidity ^0.4.23;\r\n\r\n// This is the proxy contract for the TrustToken Registry\r\n\r\n// File: contracts/Proxy/Proxy.sol\r\n\r\n/**\r\n * @title Proxy\r\n * @dev Gives the possibility to delegate any call to a foreign implementation.\r\n */\r\ncontract Proxy {\r\n    \r\n    /**\r\n    * @dev Tells the address of the implementation where every call will be delegated.\r\n    * @return address of the implementation to which it will be delegated\r\n    */\r\n    function implementation() public view returns (address);\r\n\r\n    /**\r\n    * @dev Fallback function allowing to perform a delegatecall to the given implementation.\r\n    * This function will return whatever the implementation call returns\r\n    */\r\n    function() external payable {\r\n        address _impl = implementation();\r\n        require(_impl != address(0), \"implementation contract not set\");\r\n        \r\n        assembly {\r\n            let ptr := mload(0x40)\r\n            calldatacopy(ptr, 0, calldatasize)\r\n            let result := delegatecall(gas, _impl, ptr, calldatasize, 0, 0)\r\n            let size := returndatasize\r\n            returndatacopy(ptr, 0, size)\r\n\r\n            switch result\r\n            case 0 { revert(ptr, size) }\r\n            default { return(ptr, size) }\r\n        }\r\n    }\r\n}\r\n\r\n// File: contracts/Proxy/UpgradeabilityProxy.sol\r\n\r\n/**\r\n * @title UpgradeabilityProxy\r\n * @dev This contract represents a proxy where the implementation address to which it will delegate can be upgraded\r\n */\r\ncontract UpgradeabilityProxy is Proxy {\r\n    /**\r\n    * @dev This event will be emitted every time the implementation gets upgraded\r\n    * @param implementation representing the address of the upgraded implementation\r\n    */\r\n    event Upgraded(address indexed implementation);\r\n\r\n    // Storage position of the address of the current implementation\r\n    bytes32 private constant implementationPosition = keccak256(\"trueUSD.proxy.implementation\");\r\n\r\n    /**\r\n    * @dev Tells the address of the current implementation\r\n    * @return address of the current implementation\r\n    */\r\n    function implementation() public view returns (address impl) {\r\n        bytes32 position = implementationPosition;\r\n        assembly {\r\n          impl := sload(position)\r\n        }\r\n    }\r\n\r\n    /**\r\n    * @dev Sets the address of the current implementation\r\n    * @param newImplementation address representing the new implementation to be set\r\n    */\r\n    function _setImplementation(address newImplementation) internal {\r\n        bytes32 position = implementationPosition;\r\n        assembly {\r\n          sstore(position, newImplementation)\r\n        }\r\n    }\r\n\r\n    /**\r\n    * @dev Upgrades the implementation address\r\n    * @param newImplementation representing the address of the new implementation to be set\r\n    */\r\n    function _upgradeTo(address newImplementation) internal {\r\n        address currentImplementation = implementation();\r\n        require(currentImplementation != newImplementation);\r\n        _setImplementation(newImplementation);\r\n        emit Upgraded(newImplementation);\r\n    }\r\n}\r\n\r\n// File: contracts/Proxy/OwnedUpgradeabilityProxy.sol\r\n\r\n/**\r\n * @title OwnedUpgradeabilityProxy\r\n * @dev This contract combines an upgradeability proxy with basic authorization control functionalities\r\n */\r\ncontract OwnedUpgradeabilityProxy is UpgradeabilityProxy {\r\n    /**\r\n    * @dev Event to show ownership has been transferred\r\n    * @param previousOwner representing the address of the previous owner\r\n    * @param newOwner representing the address of the new owner\r\n    */\r\n    event ProxyOwnershipTransferred(address indexed previousOwner, address indexed newOwner);\r\n\r\n    /**\r\n    * @dev Event to show ownership transfer is pending\r\n    * @param currentOwner representing the address of the current owner\r\n    * @param pendingOwner representing the address of the pending owner\r\n    */\r\n    event NewPendingOwner(address currentOwner, address pendingOwner);\r\n    \r\n    // Storage position of the owner and pendingOwner of the contract\r\n    bytes32 private constant proxyOwnerPosition = keccak256(\"trueUSD.proxy.owner\");\r\n    bytes32 private constant pendingProxyOwnerPosition = keccak256(\"trueUSD.pending.proxy.owner\");\r\n\r\n    /**\r\n    * @dev the constructor sets the original owner of the contract to the sender account.\r\n    */\r\n    constructor() public {\r\n        _setUpgradeabilityOwner(msg.sender);\r\n    }\r\n\r\n    /**\r\n    * @dev Throws if called by any account other than the owner.\r\n    */\r\n    modifier onlyProxyOwner() {\r\n        require(msg.sender == proxyOwner(), \"only Proxy Owner\");\r\n        _;\r\n    }\r\n\r\n    /**\r\n    * @dev Throws if called by any account other than the pending owner.\r\n    */\r\n    modifier onlyPendingProxyOwner() {\r\n        require(msg.sender == pendingProxyOwner(), \"only pending Proxy Owner\");\r\n        _;\r\n    }\r\n\r\n    /**\r\n    * @dev Tells the address of the owner\r\n    * @return the address of the owner\r\n    */\r\n    function proxyOwner() public view returns (address owner) {\r\n        bytes32 position = proxyOwnerPosition;\r\n        assembly {\r\n            owner := sload(position)\r\n        }\r\n    }\r\n\r\n    /**\r\n    * @dev Tells the address of the owner\r\n    * @return the address of the owner\r\n    */\r\n    function pendingProxyOwner() public view returns (address pendingOwner) {\r\n        bytes32 position = pendingProxyOwnerPosition;\r\n        assembly {\r\n            pendingOwner := sload(position)\r\n        }\r\n    }\r\n\r\n    /**\r\n    * @dev Sets the address of the owner\r\n    */\r\n    function _setUpgradeabilityOwner(address newProxyOwner) internal {\r\n        bytes32 position = proxyOwnerPosition;\r\n        assembly {\r\n            sstore(position, newProxyOwner)\r\n        }\r\n    }\r\n\r\n    /**\r\n    * @dev Sets the address of the owner\r\n    */\r\n    function _setPendingUpgradeabilityOwner(address newPendingProxyOwner) internal {\r\n        bytes32 position = pendingProxyOwnerPosition;\r\n        assembly {\r\n            sstore(position, newPendingProxyOwner)\r\n        }\r\n    }\r\n\r\n    /**\r\n    * @dev Allows the current owner to transfer control of the contract to a newOwner.\r\n    *changes the pending owner to newOwner. But doesn't actually transfer\r\n    * @param newOwner The address to transfer ownership to.\r\n    */\r\n    function transferProxyOwnership(address newOwner) external onlyProxyOwner {\r\n        require(newOwner != address(0));\r\n        _setPendingUpgradeabilityOwner(newOwner);\r\n        emit NewPendingOwner(proxyOwner(), newOwner);\r\n    }\r\n\r\n    /**\r\n    * @dev Allows the pendingOwner to claim ownership of the proxy\r\n    */\r\n    function claimProxyOwnership() external onlyPendingProxyOwner {\r\n        emit ProxyOwnershipTransferred(proxyOwner(), pendingProxyOwner());\r\n        _setUpgradeabilityOwner(pendingProxyOwner());\r\n        _setPendingUpgradeabilityOwner(address(0));\r\n    }\r\n\r\n    /**\r\n    * @dev Allows the proxy owner to upgrade the current version of the proxy.\r\n    * @param implementation representing the address of the new implementation to be set.\r\n    */\r\n    function upgradeTo(address implementation) external onlyProxyOwner {\r\n        _upgradeTo(implementation);\r\n    }\r\n}"}},"compilation":{"language":"Solidity","compiler":"solc","compilerVersion":"0.4.23+commit.124ca40d","compilerSettings":{"libraries":{},"optimizer":{"runs":200,"enabled":true},"evmVersion":"byzantium","remappings":[]},"name":"OwnedUpgradeabilityProxy","fullyQualifiedName":"OwnedUpgradeabilityProxy.sol:OwnedUpgradeabilityProxy"},"runtimeBytecode":{"onchainBytecode":"0x6080604052600436106100775763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025313a281146101085780630add8140146101395780633659cfe61461014e5780635c60da1b146101715780639965b3d614610186578063f1739cae1461019b575b60006100816101bc565b9050600160a060020a03811615156100e3576040805160e560020a62461bcd02815260206004820152601f60248201527f696d706c656d656e746174696f6e20636f6e7472616374206e6f742073657400604482015290519081900360640190fd5b60405136600082376000803683855af43d806000843e818015610104578184f35b8184fd5b34801561011457600080fd5b5061011d6101f2565b60408051600160a060020a039092168252519081900360200190f35b34801561014557600080fd5b5061011d610228565b34801561015a57600080fd5b5061016f600160a060020a036004351661025e565b005b34801561017d57600080fd5b5061011d6101bc565b34801561019257600080fd5b5061016f6102dc565b3480156101a757600080fd5b5061016f600160a060020a03600435166103b8565b604080517f747275655553442e70726f78792e696d706c656d656e746174696f6e000000008152905190819003601c0190205490565b604080517f747275655553442e70726f78792e6f776e657200000000000000000000000000815290519081900360130190205490565b604080517f747275655553442e70656e64696e672e70726f78792e6f776e657200000000008152905190819003601b0190205490565b6102666101f2565b600160a060020a031633600160a060020a03161415156102d0576040805160e560020a62461bcd02815260206004820152601060248201527f6f6e6c792050726f7879204f776e657200000000000000000000000000000000604482015290519081900360640190fd5b6102d981610496565b50565b6102e4610228565b600160a060020a031633600160a060020a031614151561034e576040805160e560020a62461bcd02815260206004820152601860248201527f6f6e6c792070656e64696e672050726f7879204f776e65720000000000000000604482015290519081900360640190fd5b610356610228565b600160a060020a03166103676101f2565b600160a060020a03167f5a3e66efaa1e445ebd894728a69d6959842ea1e97bd79b892797106e270efcd960405160405180910390a36103ac6103a7610228565b6104fc565b6103b66000610531565b565b6103c06101f2565b600160a060020a031633600160a060020a031614151561042a576040805160e560020a62461bcd02815260206004820152601060248201527f6f6e6c792050726f7879204f776e657200000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038116151561043f57600080fd5b61044881610531565b7fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b6104716101f2565b60408051600160a060020a03928316815291841660208301528051918290030190a150565b60006104a06101bc565b9050600160a060020a0380821690831614156104bb57600080fd5b6104c482610566565b604051600160a060020a038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b604080517f747275655553442e70726f78792e6f776e6572000000000000000000000000008152905190819003601301902055565b604080517f747275655553442e70656e64696e672e70726f78792e6f776e657200000000008152905190819003601b01902055565b604080517f747275655553442e70726f78792e696d706c656d656e746174696f6e000000008152905190819003601c019020555600a165627a7a7230582066d4b5932adad66dd7b19bdf5b36c25e9e99e563f06c779eeef9427bb3c9c7670029","recompiledBytecode":"0x6080604052600436106100775763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025313a281146101085780630add8140146101395780633659cfe61461014e5780635c60da1b146101715780639965b3d614610186578063f1739cae1461019b575b60006100816101bc565b9050600160a060020a03811615156100e3576040805160e560020a62461bcd02815260206004820152601f60248201527f696d706c656d656e746174696f6e20636f6e7472616374206e6f742073657400604482015290519081900360640190fd5b60405136600082376000803683855af43d806000843e818015610104578184f35b8184fd5b34801561011457600080fd5b5061011d6101f2565b60408051600160a060020a039092168252519081900360200190f35b34801561014557600080fd5b5061011d610228565b34801561015a57600080fd5b5061016f600160a060020a036004351661025e565b005b34801561017d57600080fd5b5061011d6101bc565b34801561019257600080fd5b5061016f6102dc565b3480156101a757600080fd5b5061016f600160a060020a03600435166103b8565b604080517f747275655553442e70726f78792e696d706c656d656e746174696f6e000000008152905190819003601c0190205490565b604080517f747275655553442e70726f78792e6f776e657200000000000000000000000000815290519081900360130190205490565b604080517f747275655553442e70656e64696e672e70726f78792e6f776e657200000000008152905190819003601b0190205490565b6102666101f2565b600160a060020a031633600160a060020a03161415156102d0576040805160e560020a62461bcd02815260206004820152601060248201527f6f6e6c792050726f7879204f776e657200000000000000000000000000000000604482015290519081900360640190fd5b6102d981610496565b50565b6102e4610228565b600160a060020a031633600160a060020a031614151561034e576040805160e560020a62461bcd02815260206004820152601860248201527f6f6e6c792070656e64696e672050726f7879204f776e65720000000000000000604482015290519081900360640190fd5b610356610228565b600160a060020a03166103676101f2565b600160a060020a03167f5a3e66efaa1e445ebd894728a69d6959842ea1e97bd79b892797106e270efcd960405160405180910390a36103ac6103a7610228565b6104fc565b6103b66000610531565b565b6103c06101f2565b600160a060020a031633600160a060020a031614151561042a576040805160e560020a62461bcd02815260206004820152601060248201527f6f6e6c792050726f7879204f776e657200000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038116151561043f57600080fd5b61044881610531565b7fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b6104716101f2565b60408051600160a060020a03928316815291841660208301528051918290030190a150565b60006104a06101bc565b9050600160a060020a0380821690831614156104bb57600080fd5b6104c482610566565b604051600160a060020a038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b604080517f747275655553442e70726f78792e6f776e6572000000000000000000000000008152905190819003601301902055565b604080517f747275655553442e70656e64696e672e70726f78792e6f776e657200000000008152905190819003601b01902055565b604080517f747275655553442e70726f78792e696d706c656d656e746174696f6e000000008152905190819003601c019020555600a165627a7a723058206d47003d6d62ed340456807ec665c380f89b47e807bd40fcd93e715c1a617ebb0029","sourceMap":"3261:3852:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;731:13;747:16;:14;:16::i;:::-;731:32;-1:-1:-1;;;;;;782:19:0;;;;774:63;;;;;-1:-1:-1;;;;;774:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;899:4;893:11;939:12;936:1;931:3;918:34;1027:1;1024;1010:12;1005:3;998:5;993:3;980:49;1055:14;1106:4;1103:1;1098:3;1083:28;1134:6;1154:28;;;;1218:4;1213:3;1206:17;1154:28;1175:4;1170:3;1163:17;4918:183;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4918:183:0;;;;;;;;-1:-1:-1;;;;;4918:183:0;;;;;;;;;;;;;;5209:211;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5209:211:0;;;;6998:112;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6998:112:0;-1:-1:-1;;;;;6998:112:0;;;;;;;2045:187;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2045:187:0;;;;6548:254;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6548:254:0;;;;6225:230;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6225:230:0;-1:-1:-1;;;;;6225:230:0;;;;;2045:187;1865:41;;;;;;;;;;;;;;;;2199:15;;2178:47::o;4918:183::-;4050:32;;;;;;;;;;;;;;;;5068:15;;5044:50::o;5209:211::-;4142:40;;;;;;;;;;;;;;;;5387:15;;5356:57::o;6998:112::-;4524:12;:10;:12::i;:::-;-1:-1:-1;;;;;4510:26:0;:10;-1:-1:-1;;;;;4510:26:0;;4502:55;;;;;;;-1:-1:-1;;;;;4502:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7076:26;7087:14;7076:10;:26::i;:::-;6998:112;:::o;6548:254::-;4742:19;:17;:19::i;:::-;-1:-1:-1;;;;;4728:33:0;:10;-1:-1:-1;;;;;4728:33:0;;4720:70;;;;;;;-1:-1:-1;;;;;4720:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6666:19;:17;:19::i;:::-;-1:-1:-1;;;;;6626:60:0;6652:12;:10;:12::i;:::-;-1:-1:-1;;;;;6626:60:0;;;;;;;;;;;6697:44;6721:19;:17;:19::i;:::-;6697:23;:44::i;:::-;6752:42;6791:1;6752:30;:42::i;:::-;6548:254::o;6225:230::-;4524:12;:10;:12::i;:::-;-1:-1:-1;;;;;4510:26:0;:10;-1:-1:-1;;;;;4510:26:0;;4502:55;;;;;;;-1:-1:-1;;;;;4502:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6318:22:0;;;;6310:31;;;;;;6352:40;6383:8;6352:30;:40::i;:::-;6408:39;6424:12;:10;:12::i;:::-;6408:39;;;-1:-1:-1;;;;;6408:39:0;;;;;;;;;;;;;;;;;;;;;6225:230;:::o;2770:276::-;2837:29;2869:16;:14;:16::i;:::-;2837:48;-1:-1:-1;;;;;;2904:42:0;;;;;;;;2896:51;;;;;;2958:37;2977:17;2958:18;:37::i;:::-;3011:27;;-1:-1:-1;;;;;3011:27:0;;;;;;;;2770:276;;:::o;5487:197::-;4050:32;;;;;;;;;;;;;;;;5635:31;5620:57::o;5751:225::-;4142:40;;;;;;;;;;;;;;;;5920:38;5905:64::o;2402:202::-;1865:41;;;;;;;;;;;;;;;;2551:35;2538:59::o","linkReferences":{},"cborAuxdata":{"1":{"value":"0xa165627a7a723058206d47003d6d62ed340456807ec665c380f89b47e807bd40fcd93e715c1a617ebb0029","offset":1436}},"immutableReferences":null,"transformations":[{"id":"1","type":"replace","offset":1436,"reason":"cborAuxdata"}],"transformationValues":{"cborAuxdata":{"1":"0xa165627a7a7230582066d4b5932adad66dd7b19bdf5b36c25e9e99e563f06c779eeef9427bb3c9c7670029"}}},"proxyResolution":{"isProxy":false,"proxyType":null,"implementations":[]},"deployment":{"transactionHash":"0x109dd106b68123f40b6112ee660d619d152db7e2468623ee57829c3be686c6b8","blockNumber":"6988184","transactionIndex":"43","deployer":"0x7bA7EF06A2621267f063eF2DB2d482D5B507D8b3"},"matchId":"469716","creationMatch":"match","runtimeMatch":"match","verifiedAt":"2024-08-08T11:25:57Z","match":"match","chainId":"1","address":"0x0000000000085d4780B73119b644AE5ecd22b376"}