{
  "contractName": "SecurityTokenCreator",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "deploySecurityToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"deploySecurityToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/SecurityTokenCreator.sol\":\"SecurityTokenCreator\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"@onchain-id/solidity/contracts/interface/IClaimIssuer.sol\":{\"keccak256\":\"0xd0493be7cb7342962b46f8e2afdca4614ea0fe34a7f493b2da9db7d361a9042c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://105232aae24e3d0fcb4c80c00793b61b6019f6127c0ec6f9e3082ae01b2e778b\",\"dweb:/ipfs/QmV5C1wbq7H5H6DiakafSX5agAAP6rQSZ5qq7Qgq6VLkXo\"]},\"@onchain-id/solidity/contracts/interface/IERC734.sol\":{\"keccak256\":\"0x3302de9e9fe7a548cb7395b6fda38f952f6a6d1c599dfeee181a1ef80741fc1d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://fc9f00e5b2f1523fecf52b1a833e9263a53edbebb7d1458f9004cfd41dd0402e\",\"dweb:/ipfs/QmWcNcVQrg66KeQz39jPgJun7jF3CbdJKHQa19q97n5Hzb\"]},\"@onchain-id/solidity/contracts/interface/IERC735.sol\":{\"keccak256\":\"0x3b77ce6012a96cf0075197cdeb1b98b66ca1722ef23241e40ba6185f03bf4584\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://766e139f0c3cc0c6489561e75df0d8eab8c277f90009e4fa19add4f22bb40d82\",\"dweb:/ipfs/QmcbAReZn9nLcnYn9AHiDmcYJ42JqAU5QSy4dKhUcJUnjy\"]},\"@onchain-id/solidity/contracts/interface/IIdentity.sol\":{\"keccak256\":\"0xdcefbe2a850f9f43e959b9f7ed93fd5b35f29ff3dfbfaac7530af737c9eba7c6\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2e887c7cc67fdb2710c48bed22dbb27880f6dfb84ee93178ad4fcd659099cb96\",\"dweb:/ipfs/QmUuDEsZJC7uQQEErmuNJzePsNgHiTDdS2TuMzG1GRqrC3\"]},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"project:/contracts/SecurityTokenCreator.sol\":{\"keccak256\":\"0xc792fc93a52672154ce55014cf0dd5b449b1dfb9f5cc71ad9a4db7dce901cc0c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://5cb859c97c35a5921be6d17bbd11088f9f26b51fbe55ad6d7c9a9f945d1f2537\",\"dweb:/ipfs/QmNaehVRiWuZqRM4HcwHo8wbK8euHvdyerg9WMQXyK9YMS\"]},\"project:/contracts/compliance/ICompliance.sol\":{\"keccak256\":\"0x4049905b34eab118c0c3f644450299a5ed8022bbbdb26036e7c2854dae8ae1ba\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://f8144953d88f543b2f537514f1136b8adf705837ba6d420b95569f6895153edb\",\"dweb:/ipfs/QmRqM7A6XrofFR67k8RtNNEkriAbKsQHDgUYaKZTMr9Nm5\"]},\"project:/contracts/registry/IClaimTopicsRegistry.sol\":{\"keccak256\":\"0x95f8fa17a716771125b203f00890eceb20ac3807f7a39a25b644427b1ff81d61\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://460dceb9e88957d5ce002b80748767c80a7e146c9b38b055a3c1ca04586b2009\",\"dweb:/ipfs/QmVdqEpGMRzSpLKBCtPzaPGatBgUyNm3NS5rQnkkYMnc1C\"]},\"project:/contracts/registry/IIdentityRegistry.sol\":{\"keccak256\":\"0x16a31f2d35143f99cc6b83d0cf6e9da9543c2b8561712079098f3a39d12ae32a\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://7669a9272b1df8e27e0fc3f5f64977b2b16615e585b673383db1eb157a62bf7c\",\"dweb:/ipfs/QmQzXmoFcFyBPehPyiUzGjaKfXJHLEPZMtFTBTgjuCavah\"]},\"project:/contracts/registry/IIdentityRegistryStorage.sol\":{\"keccak256\":\"0x8cd4de1e77c5da8ca2ff732069bc184aef86bcb94f95a5229e5bd6336abbd06d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://f88894a3d046940be03a12cc2da3b3fb6efb51e0461fbea060a9a3190cadcf16\",\"dweb:/ipfs/QmNndZUPdpc83A9LungeAsrcencq3CzTum1tkU6KVdSRNC\"]},\"project:/contracts/registry/ITrustedIssuersRegistry.sol\":{\"keccak256\":\"0x01af20f2f537db3122c60b7c6e60e5036e07c673ef9762428b42129f65fcbc60\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://28f514b876c975777fe84bdb9f96ec5c687e4e4ff5d2b14961ba61affc57d46c\",\"dweb:/ipfs/QmdbVRsg1Q71PVHYxy1r7e5MeiMN5hHHDD8vRnXBSr8JiV\"]},\"project:/contracts/roles/AgentRoleUpgradeable.sol\":{\"keccak256\":\"0xe19da0daf8a0c29fc5df7e30f66948d57549e58a678b7bd47b4525104084ff81\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://aef968c1f1ac0af55e5c3fa8eb7f8256b0dc9c3ac9bebac951de23cf0206c5f9\",\"dweb:/ipfs/QmbkfpqVvJbd2zjkh5CWa4uQgtQygJn7unA5PTzCGATniK\"]},\"project:/contracts/roles/Roles.sol\":{\"keccak256\":\"0x9e018cafd4e2a2890d4ed32f0a4e5edf92fe95000f35b15d7932890bd0efdb95\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://6c07fd269689b662d782817bc4fdfc00d33fd7e320c20916528fff7853847954\",\"dweb:/ipfs/QmUz39kdgQM8M2W2gcBZ8Vi3mzzSmXUx9NXxTJatYYQJyw\"]},\"project:/contracts/token/IToken.sol\":{\"keccak256\":\"0x34ce3cabab2f6b66aeb4e89fe8e9952b8aa57663e7b33429963169a835fc1f25\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://cffd212e911fd0a6a402d5438e5f5da0c1637226bfcab173a7c58efba12f2655\",\"dweb:/ipfs/QmVbqFNczrUAETfAX6F9MxXKivALRvt1HBTMhrjAKWHniq\"]},\"project:/contracts/token/Storage.sol\":{\"keccak256\":\"0x15ddd5f8ee0881bf07137cd04ef9d529b2bf8acb006db3c2b451be5ae07ac71c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://09c5d5ef2d9818a431fe3d05024ac03040ec9ca51d9eb43f452f388a9d282025\",\"dweb:/ipfs/QmSUHCthksYjJeoWLTm1Car1zoVHJPKSvuQZEe9YHMCNJw\"]},\"project:/contracts/token/Token.sol\":{\"keccak256\":\"0x6d31369f226850078d31303c0c6071767164a1af0b97cb9d65ae6bdc8410b6a3\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://eaaac98375ae921d2bf809076c1ebbf7a677abf43ae20d8cd6d02c41e513ba12\",\"dweb:/ipfs/QmU6XVbaj8oCYbUGNes5XAa6VaPoKpEpAQ2gxPMV28DHgE\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b50600080546001600160a01b03191633179055613385806100326000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80638da5cb5b1461003b578063bc188d9e1461006a575b600080fd5b60005461004e906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b61004e600060405161007b9061009d565b604051809103906000f080158015610097573d6000803e3d6000fd5b50905090565b6132a5806100ab8339019056fe6080604052606e805460ff1916905534801561001a57600080fd5b5061327b8061002a6000396000f3fe608060405234801561001057600080fd5b506004361061023b5760003560e01c806306fdde0314610240578063095ea7b31461025e578063125c4a3314610281578063134e18f414610296578063158b1a57146102b557806318160ddd146102ec5780631a7af379146102f45780631fe56f7d146103075780631ffbb0641461031a57806323b872dd1461032d578063313ce5671461034057806339509351146103555780633d1ddc5b146103685780633f4ba83a1461037b57806340c10f191461038357806342a47abc146103965780634710362d146103a95780634a6cc677146103bc57806351411b33146103cf57806354fd4d50146103e25780635c975abb146104035780635dc7a3cb1461040e5780636290865d14610421578063685731071461043257806370a0823114610445578063715018a6146104585780638456cb591461046057806384e798421461046857806388d695b21461047b5780638da5cb5b1461048e5780639285948a1461049657806395d89b41146104a957806397a6278e146104b15780639dc29fac146104c45780639fc1d0e7146104d7578063a457c2d7146104ea578063a9059cbb146104fd578063aba6370514610510578063b422d83014610526578063b84c824614610539578063c47f00271461054c578063c69c09cf1461055f578063cbf3f86114610572578063dd62ed3e14610585578063e5839836146105be578063f2fde38b146105ea578063f8981789146105fd578063f91b619c14610610578063fc7e5fa814610623575b600080fd5b610248610636565b6040516102559190612816565b60405180910390f35b61027161026c366004612845565b6106c8565b6040519015158152602001610255565b61029461028f366004612845565b6106df565b005b606e5461010090046001600160a01b03165b604051610255919061286f565b6102de6102c3366004612883565b6001600160a01b03166000908152606d602052604090205490565b604051908152602001610255565b6068546102de565b6102946103023660046128e9565b61080e565b610294610315366004612845565b610883565b610271610328366004612883565b61099a565b61027161033b366004612954565b6109a7565b606b5460405160ff9091168152602001610255565b610271610363366004612845565b610c67565b610294610376366004612883565b610c9e565b610294610d26565b610294610391366004612845565b610dd8565b6102946103a4366004612990565b610fe7565b6102946103b73660046128e9565b61107d565b6102946103ca3660046128e9565b6110e2565b6102946103dd366004612883565b611147565b604080518082019091526005815264332e352e3160d81b6020820152610248565b606e5460ff16610271565b61029461041c366004612883565b61115b565b606f546001600160a01b03166102a8565b6102946104403660046128e9565b611164565b6102de610453366004612883565b6111c9565b6102946111e4565b6102946111f8565b610294610476366004612883565b61127d565b6102946104893660046128e9565b6112c7565b6102a861132d565b6102716104a4366004612a29565b61133c565b6102486116af565b6102946104bf366004612883565b6116be565b6102946104d2366004612845565b611708565b6102716104e5366004612954565b611847565b6102716104f8366004612845565b611a13565b61027161050b366004612845565b611a4a565b606b5461010090046001600160a01b03166102a8565b610294610534366004612883565b611c77565b610294610547366004612a6c565b611c80565b61029461055a366004612a6c565b611cf7565b61029461056d366004612aeb565b611d0c565b610294610580366004612883565b611d86565b6102de610593366004612b22565b6001600160a01b03918216600090815260676020908152604080832093909416825291909152205490565b6102716105cc366004612883565b6001600160a01b03166000908152606c602052604090205460ff1690565b6102946105f8366004612883565b611dce565b61029461060b366004612883565b611e44565b61029461061e366004612bf7565b611e84565b6102946106313660046128e9565b6120a4565b60606069805461064590612ca3565b80601f016020809104026020016040519081016040528092919081815260200182805461067190612ca3565b80156106be5780601f10610693576101008083540402835291602001916106be565b820191906000526020600020905b8154815290600101906020018083116106a157829003601f168201915b5050505050905090565b60006106d5338484612109565b5060015b92915050565b6106e83361099a565b61070d5760405162461bcd60e51b815260040161070490612cdd565b60405180910390fd5b6000610718836111c9565b6001600160a01b0384166000908152606d602052604090205490915061073f908390612d41565b81101561078e5760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206578636565647320617661696c61626c652062616c616e63656044820152606401610704565b6001600160a01b0383166000908152606d60205260409020546107b2908390612d41565b6001600160a01b0384166000818152606d6020526040908190209290925590517fa065e63c631c86f1b9f66a4a2f63f2093bf1c2168d23290259dbd969e0222a45906108019085815260200190565b60405180910390a2505050565b60005b8381101561087c5761086a85858381811061082e5761082e612d54565b90506020020160208101906108439190612883565b84848481811061085557610855612d54565b905060200201602081019061056d9190612d6a565b8061087481612d87565b915050610811565b5050505050565b61088c3361099a565b6108a85760405162461bcd60e51b815260040161070490612cdd565b6001600160a01b0382166000908152606d602052604090205481111561092d5760405162461bcd60e51b815260206004820152603460248201527f416d6f756e742073686f756c64206265206c657373207468616e206f7220657160448201527375616c20746f2066726f7a656e20746f6b656e7360601b6064820152608401610704565b6001600160a01b0382166000908152606d6020526040902054610951908290612da0565b6001600160a01b0383166000818152606d6020526040908190209290925590516000805160206131a68339815191529061098e9084815260200190565b60405180910390a25050565b60006106d960658361222e565b606e5460009060ff16156109cd5760405162461bcd60e51b815260040161070490612db3565b6001600160a01b0383166000908152606c602052604090205460ff16158015610a0f57506001600160a01b0384166000908152606c602052604090205460ff16155b610a2b5760405162461bcd60e51b815260040161070490612ddd565b6001600160a01b0384166000908152606d6020526040902054610a4d856111c9565b610a579190612da0565b821115610a765760405162461bcd60e51b815260040161070490612e07565b606e5460405163b9209e3360e01b81526101009091046001600160a01b03169063b9209e3390610aaa90869060040161286f565b602060405180830381865afa158015610ac7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aeb9190612e35565b8015610b675750606f546040516372331c7360e11b81526001600160a01b039091169063e46638e690610b2690879087908790600401612e52565b602060405180830381865afa158015610b43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b679190612e35565b15610c2057606f546040516322ebca6d60e21b81526001600160a01b0390911690638baf29b490610ba090879087908790600401612e52565b600060405180830381600087803b158015610bba57600080fd5b505af1158015610bce573d6000803e3d6000fd5b50505050610bdd8484846122b1565b6001600160a01b038416600090815260676020908152604080832033808552925290912054610c18918691610c13908690612da0565b612109565b506001610c60565b60405162461bcd60e51b81526020600482015260156024820152745472616e73666572206e6f7420706f737369626c6560581b6044820152606401610704565b9392505050565b3360008181526067602090815260408083206001600160a01b038716845290915281205490916106d5918590610c13908690612d41565b610ca661240d565b606b80546001600160a01b03808416610100908102610100600160a81b031984168117948590556040805180820182526005815264332e352e3160d81b6020820152905160008051602061320683398151915296610d1b96606996606a9660ff96871696909216959095179491041690612ef3565b60405180910390a150565b610d2f3361099a565b610d4b5760405162461bcd60e51b815260040161070490612cdd565b606e5460ff16610d945760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610704565b606e805460ff191690556040517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90610dce90339061286f565b60405180910390a1565b610de13361099a565b610dfd5760405162461bcd60e51b815260040161070490612cdd565b606e5460405163b9209e3360e01b81526101009091046001600160a01b03169063b9209e3390610e3190859060040161286f565b602060405180830381865afa158015610e4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e729190612e35565b610eba5760405162461bcd60e51b815260206004820152601960248201527824b232b73a34ba3c9034b9903737ba103b32b934b334b2b21760391b6044820152606401610704565b606f546040516372331c7360e11b81526001600160a01b039091169063e46638e690610eee90339086908690600401612e52565b602060405180830381865afa158015610f0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2f9190612e35565b610f755760405162461bcd60e51b815260206004820152601760248201527610dbdb5c1b1a585b98d9481b9bdd08199bdb1b1bddd959604a1b6044820152606401610704565b610f7f828261246c565b606f54604051635f8dead360e01b81526001600160a01b0390911690635f8dead390610fb19085908590600401612f50565b600060405180830381600087803b158015610fcb57600080fd5b505af1158015610fdf573d6000803e3d6000fd5b505050505050565b60005b858110156110745761106187878381811061100757611007612d54565b905060200201602081019061101c9190612883565b86868481811061102e5761102e612d54565b90506020020160208101906110439190612883565b85858581811061105557611055612d54565b90506020020135611847565b508061106c81612d87565b915050610fea565b50505050505050565b60005b8381101561087c576110d085858381811061109d5761109d612d54565b90506020020160208101906110b29190612883565b8484848181106110c4576110c4612d54565b90506020020135610883565b806110da81612d87565b915050611080565b60005b8381101561087c5761113585858381811061110257611102612d54565b90506020020160208101906111179190612883565b84848481811061112957611129612d54565b90506020020135611708565b8061113f81612d87565b9150506110e5565b61114f61240d565b61115881611dce565b50565b611158816116be565b60005b8381101561087c576111b785858381811061118457611184612d54565b90506020020160208101906111999190612883565b8484848181106111ab576111ab612d54565b90506020020135610dd8565b806111c181612d87565b915050611167565b6001600160a01b031660009081526066602052604090205490565b6111ec61240d565b6111f66000612542565b565b6112013361099a565b61121d5760405162461bcd60e51b815260040161070490612cdd565b606e5460ff16156112405760405162461bcd60e51b815260040161070490612db3565b606e805460ff191660011790556040517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890610dce90339061286f565b61128561240d565b611290606582612594565b6040516001600160a01b038216907ff68e73cec97f2d70aa641fb26e87a4383686e2efacb648f2165aeb02ac562ec590600090a250565b60005b8381101561087c5761131a8585838181106112e7576112e7612d54565b90506020020160208101906112fc9190612883565b84848481811061130e5761130e612d54565b90506020020135611a4a565b508061132581612d87565b9150506112ca565b6033546001600160a01b031690565b60006113473361099a565b6113635760405162461bcd60e51b815260040161070490612cdd565b61136c846111c9565b6000036113b25760405162461bcd60e51b81526020600482015260146024820152733737903a37b5b2b739903a37903932b1b7bb32b960611b6044820152606401610704565b60405182906000906113c890869060200161286f565b60408051808303601f1901815290829052805160209091012063d202158d60e01b8252600482018190526001602483015291506001600160a01b0383169063d202158d90604401602060405180830381865afa15801561142c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114509190612e35565b1561166f576000611460876111c9565b6001600160a01b038089166000908152606d60205260409081902054606e549151637e42683b60e01b8152939450926101009091049091169063454a03e090899087908490637e42683b906114b9908f9060040161286f565b602060405180830381865afa1580156114d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fa9190612f69565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015261ffff166044820152606401600060405180830381600087803b15801561154d57600080fd5b505af1158015611561573d6000803e3d6000fd5b5050606e5460405163a8d29d1d60e01b81526101009091046001600160a01b0316925063a8d29d1d9150611599908b9060040161286f565b600060405180830381600087803b1580156115b357600080fd5b505af11580156115c7573d6000803e3d6000fd5b505050506115d6888884611847565b5080156115e7576115e787826106df565b6001600160a01b0388166000908152606c602052604090205460ff16151560010361161757611617876001611d0c565b604080516001600160a01b038a81168252898116602083015288168183015290517ff0c9129a94f30f1caaceb63e44b9811d0a3edf1d6c23757f346093af5553fed09181900360600190a16001945050505050610c60565b60405162461bcd60e51b81526020600482015260156024820152745265636f76657279206e6f7420706f737369626c6560581b6044820152606401610704565b6060606a805461064590612ca3565b6116c661240d565b6116d1606582612610565b6040516001600160a01b038216907fed9c8ad8d5a0a66898ea49d2956929c93ae2e8bd50281b2ed897c5d1a6737e0b90600090a250565b6117113361099a565b61172d5760405162461bcd60e51b815260040161070490612cdd565b6001600160a01b0382166000908152606d602052604081205461174f846111c9565b6117599190612da0565b9050808211156117dd57600061176f8284612da0565b6001600160a01b0385166000908152606d6020526040902054909150611796908290612da0565b6001600160a01b0385166000818152606d6020526040908190209290925590516000805160206131a6833981519152906117d39084815260200190565b60405180910390a2505b6117e78383612692565b606f5460405163469753b960e11b81526001600160a01b0390911690638d2ea772906118199086908690600401612f50565b600060405180830381600087803b15801561183357600080fd5b505af1158015611074573d6000803e3d6000fd5b60006118523361099a565b61186e5760405162461bcd60e51b815260040161070490612cdd565b6001600160a01b0384166000908152606d6020526040812054611890866111c9565b61189a9190612da0565b90508083111561191e5760006118b08285612da0565b6001600160a01b0387166000908152606d60205260409020549091506118d7908290612da0565b6001600160a01b0387166000818152606d6020526040908190209290925590516000805160206131a6833981519152906119149084815260200190565b60405180910390a2505b606e5460405163b9209e3360e01b81526101009091046001600160a01b03169063b9209e339061195290879060040161286f565b602060405180830381865afa15801561196f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119939190612e35565b15610c2057606f546040516322ebca6d60e21b81526001600160a01b0390911690638baf29b4906119cc90889088908890600401612e52565b600060405180830381600087803b1580156119e657600080fd5b505af11580156119fa573d6000803e3d6000fd5b50505050611a098585856122b1565b6001915050610c60565b3360008181526067602090815260408083206001600160a01b038716845290915281205490916106d5918590610c13908690612da0565b606e5460009060ff1615611a705760405162461bcd60e51b815260040161070490612db3565b6001600160a01b0383166000908152606c602052604090205460ff16158015611aa95750336000908152606c602052604090205460ff16155b611ac55760405162461bcd60e51b815260040161070490612ddd565b336000818152606d602052604090205490611adf906111c9565b611ae99190612da0565b821115611b085760405162461bcd60e51b815260040161070490612e07565b606e5460405163b9209e3360e01b81526101009091046001600160a01b03169063b9209e3390611b3c90869060040161286f565b602060405180830381865afa158015611b59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7d9190612e35565b8015611bf95750606f546040516372331c7360e11b81526001600160a01b039091169063e46638e690611bb890339087908790600401612e52565b602060405180830381865afa158015611bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf99190612e35565b15610c2057606f546040516322ebca6d60e21b81526001600160a01b0390911690638baf29b490611c3290339087908790600401612e52565b600060405180830381600087803b158015611c4c57600080fd5b505af1158015611c60573d6000803e3d6000fd5b50505050611c6f3384846122b1565b5060016106d9565b6111588161127d565b611c8861240d565b606a611c95828483612fe8565b50606b546040805180820182526005815264332e352e3160d81b6020820152905160008051602061320683398151915292611ceb92606992606a9260ff811692916101009091046001600160a01b031690612ef3565b60405180910390a15050565b611cff61240d565b6069611c95828483612fe8565b611d153361099a565b611d315760405162461bcd60e51b815260040161070490612cdd565b6001600160a01b0382166000818152606c6020526040808220805460ff19168515159081179091559051339391927f7fa523c84ab8d7fc5b72f08b9e46dbbf10c39e119a075b3e317002d14bc9f43691a45050565b611d8e61240d565b606e8054610100600160a81b0319166101006001600160a01b0384169081029190911790915560405160008051602061322683398151915290600090a250565b611dd661240d565b6001600160a01b038116611e3b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610704565b61115881612542565b611e4c61240d565b606f80546001600160a01b0319166001600160a01b0383169081179091556040516000805160206131c683398151915290600090a250565b600054610100900460ff1615808015611ea45750600054600160ff909116105b80611ebe5750303b158015611ebe575060005460ff166001145b611f215760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610704565b6000805460ff191660011790558015611f44576000805461ff0019166101001790555b6069611f5086826130a1565b50606a611f5d85826130a1565b50606b805460ff85166001600160a81b0319909116176101006001600160a01b03858116820292909217909255606e8054610100600160a81b031916918a1692830291909117905560405160008051602061322683398151915290600090a2606f80546001600160a01b0319166001600160a01b0388169081179091556040516000805160206131c683398151915290600090a2606b546040805180820182526005815264332e352e3160d81b602082015290516000805160206132068339815191529261204692606992606a9260ff811692916101009091046001600160a01b031690612ef3565b60405180910390a161205661276c565b8015611074576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050565b60005b8381101561087c576120f78585838181106120c4576120c4612d54565b90506020020160208101906120d99190612883565b8484848181106120eb576120eb612d54565b905060200201356106df565b8061210181612d87565b9150506120a7565b6001600160a01b03831661216b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610704565b6001600160a01b0382166121cc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610704565b6001600160a01b0383811660008181526067602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006001600160a01b0382166122915760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b6064820152608401610704565b506001600160a01b03166000908152602091909152604090205460ff1690565b6001600160a01b0383166123155760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610704565b6001600160a01b0382166123775760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610704565b6001600160a01b03831660009081526066602052604090205461239b908290612da0565b6001600160a01b0380851660009081526066602052604080822093909355908416815220546123cb908290612d41565b6001600160a01b0380841660008181526066602052604090819020939093559151908516906000805160206131e6833981519152906122219085815260200190565b3361241661132d565b6001600160a01b0316146111f65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610704565b6001600160a01b0382166124c25760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610704565b806068546124d09190612d41565b6068556001600160a01b0382166000908152606660205260409020546124f7908290612d41565b6001600160a01b0383166000818152606660205260408082209390935591519091906000805160206131e6833981519152906125369085815260200190565b60405180910390a35050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61259e828261222e565b156125eb5760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006044820152606401610704565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b61261a828261222e565b6126705760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b6064820152608401610704565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b0382166126f25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610704565b6001600160a01b038216600090815260666020526040902054612716908290612da0565b6001600160a01b03831660009081526066602052604090205560685461273d908290612da0565b6068556040518181526000906001600160a01b038416906000805160206131e683398151915290602001612536565b600054610100900460ff166127935760405162461bcd60e51b81526004016107049061315a565b6111f66127a0565b505050565b600054610100900460ff166127c75760405162461bcd60e51b81526004016107049061315a565b6111f633612542565b6000815180845260005b818110156127f6576020818501810151868301820152016127da565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610c6060208301846127d0565b80356001600160a01b038116811461284057600080fd5b919050565b6000806040838503121561285857600080fd5b61286183612829565b946020939093013593505050565b6001600160a01b0391909116815260200190565b60006020828403121561289557600080fd5b610c6082612829565b60008083601f8401126128b057600080fd5b5081356001600160401b038111156128c757600080fd5b6020830191508360208260051b85010111156128e257600080fd5b9250929050565b600080600080604085870312156128ff57600080fd5b84356001600160401b038082111561291657600080fd5b6129228883890161289e565b9096509450602087013591508082111561293b57600080fd5b506129488782880161289e565b95989497509550505050565b60008060006060848603121561296957600080fd5b61297284612829565b925061298060208501612829565b9150604084013590509250925092565b600080600080600080606087890312156129a957600080fd5b86356001600160401b03808211156129c057600080fd5b6129cc8a838b0161289e565b909850965060208901359150808211156129e557600080fd5b6129f18a838b0161289e565b90965094506040890135915080821115612a0a57600080fd5b50612a1789828a0161289e565b979a9699509497509295939492505050565b600080600060608486031215612a3e57600080fd5b612a4784612829565b9250612a5560208501612829565b9150612a6360408501612829565b90509250925092565b60008060208385031215612a7f57600080fd5b82356001600160401b0380821115612a9657600080fd5b818501915085601f830112612aaa57600080fd5b813581811115612ab957600080fd5b866020828501011115612acb57600080fd5b60209290920196919550909350505050565b801515811461115857600080fd5b60008060408385031215612afe57600080fd5b612b0783612829565b91506020830135612b1781612add565b809150509250929050565b60008060408385031215612b3557600080fd5b612b3e83612829565b9150612b4c60208401612829565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612b7c57600080fd5b81356001600160401b0380821115612b9657612b96612b55565b604051601f8301601f19908116603f01168101908282118183101715612bbe57612bbe612b55565b81604052838152866020858801011115612bd757600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060008060008060c08789031215612c1057600080fd5b612c1987612829565b9550612c2760208801612829565b945060408701356001600160401b0380821115612c4357600080fd5b612c4f8a838b01612b6b565b95506060890135915080821115612c6557600080fd5b50612c7289828a01612b6b565b935050608087013560ff81168114612c8957600080fd5b9150612c9760a08801612829565b90509295509295509295565b600181811c90821680612cb757607f821691505b602082108103612cd757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f4167656e74526f6c653a2063616c6c657220646f6573206e6f7420686176652060408201526d746865204167656e7420726f6c6560901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156106d9576106d9612d2b565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612d7c57600080fd5b8135610c6081612add565b600060018201612d9957612d99612d2b565b5060010190565b818103818111156106d9576106d9612d2b565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526010908201526f3bb0b63632ba1034b990333937bd32b760811b604082015260600190565b602080825260149082015273496e73756666696369656e742042616c616e636560601b604082015260600190565b600060208284031215612e4757600080fd5b8151610c6081612add565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60008154612e8381612ca3565b808552602060018381168015612ea05760018114612eba57612ee8565b60ff1985168884015283151560051b880183019550612ee8565b866000528260002060005b85811015612ee05781548a8201860152908301908401612ec5565b890184019650505b505050505092915050565b60a081526000612f0660a0830188612e76565b8281036020840152612f188188612e76565b905060ff861660408401528281036060840152612f3581866127d0565b91505060018060a01b03831660808301529695505050505050565b6001600160a01b03929092168252602082015260400190565b600060208284031215612f7b57600080fd5b815161ffff81168114610c6057600080fd5b601f82111561279b57600081815260208120601f850160051c81016020861015612fb45750805b601f850160051c820191505b81811015610fdf57828155600101612fc0565b600019600383901b1c191660019190911b1790565b6001600160401b03831115612fff57612fff612b55565b6130138361300d8354612ca3565b83612f8d565b6000601f841160018114613041576000851561302f5750838201355b6130398682612fd3565b84555061087c565b600083815260209020601f19861690835b828110156130725786850135825560209485019460019092019101613052565b508682101561308f5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81516001600160401b038111156130ba576130ba612b55565b6130ce816130c88454612ca3565b84612f8d565b602080601f8311600181146130fd57600084156130eb5750858301515b6130f58582612fd3565b865550610fdf565b600085815260208120601f198616915b8281101561312c5788860151825594840194600190910190840161310d565b508582101561314a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe9bed35cb62ad0dba04f9d5bfee4b5bc91443e77da8a65c4c84834c51bb08b0d67f3a888862559648ec01d97deb7b5012bff86dc91e654a1de397170db40e35b6ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6a1105ac8148a3c319adbc369f9072573e8a11d3a3d195e067e7c40767ec54d1d2be862d755bca7e0d39772b2cab3a5578da9c285f69199f4c063c2294a7f36ca264697066735822122040fb71c1e5e337f4eb323e68d287ec15c8b3da02510210c2f20e4650e10d788f64736f6c63430008110033a2646970667358221220ec8af9fefcce0efabbcf144309fa9a40ff5b76866c1970b6988d29b59318bed064736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c80638da5cb5b1461003b578063bc188d9e1461006a575b600080fd5b60005461004e906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b61004e600060405161007b9061009d565b604051809103906000f080158015610097573d6000803e3d6000fd5b50905090565b6132a5806100ab8339019056fe6080604052606e805460ff1916905534801561001a57600080fd5b5061327b8061002a6000396000f3fe608060405234801561001057600080fd5b506004361061023b5760003560e01c806306fdde0314610240578063095ea7b31461025e578063125c4a3314610281578063134e18f414610296578063158b1a57146102b557806318160ddd146102ec5780631a7af379146102f45780631fe56f7d146103075780631ffbb0641461031a57806323b872dd1461032d578063313ce5671461034057806339509351146103555780633d1ddc5b146103685780633f4ba83a1461037b57806340c10f191461038357806342a47abc146103965780634710362d146103a95780634a6cc677146103bc57806351411b33146103cf57806354fd4d50146103e25780635c975abb146104035780635dc7a3cb1461040e5780636290865d14610421578063685731071461043257806370a0823114610445578063715018a6146104585780638456cb591461046057806384e798421461046857806388d695b21461047b5780638da5cb5b1461048e5780639285948a1461049657806395d89b41146104a957806397a6278e146104b15780639dc29fac146104c45780639fc1d0e7146104d7578063a457c2d7146104ea578063a9059cbb146104fd578063aba6370514610510578063b422d83014610526578063b84c824614610539578063c47f00271461054c578063c69c09cf1461055f578063cbf3f86114610572578063dd62ed3e14610585578063e5839836146105be578063f2fde38b146105ea578063f8981789146105fd578063f91b619c14610610578063fc7e5fa814610623575b600080fd5b610248610636565b6040516102559190612816565b60405180910390f35b61027161026c366004612845565b6106c8565b6040519015158152602001610255565b61029461028f366004612845565b6106df565b005b606e5461010090046001600160a01b03165b604051610255919061286f565b6102de6102c3366004612883565b6001600160a01b03166000908152606d602052604090205490565b604051908152602001610255565b6068546102de565b6102946103023660046128e9565b61080e565b610294610315366004612845565b610883565b610271610328366004612883565b61099a565b61027161033b366004612954565b6109a7565b606b5460405160ff9091168152602001610255565b610271610363366004612845565b610c67565b610294610376366004612883565b610c9e565b610294610d26565b610294610391366004612845565b610dd8565b6102946103a4366004612990565b610fe7565b6102946103b73660046128e9565b61107d565b6102946103ca3660046128e9565b6110e2565b6102946103dd366004612883565b611147565b604080518082019091526005815264332e352e3160d81b6020820152610248565b606e5460ff16610271565b61029461041c366004612883565b61115b565b606f546001600160a01b03166102a8565b6102946104403660046128e9565b611164565b6102de610453366004612883565b6111c9565b6102946111e4565b6102946111f8565b610294610476366004612883565b61127d565b6102946104893660046128e9565b6112c7565b6102a861132d565b6102716104a4366004612a29565b61133c565b6102486116af565b6102946104bf366004612883565b6116be565b6102946104d2366004612845565b611708565b6102716104e5366004612954565b611847565b6102716104f8366004612845565b611a13565b61027161050b366004612845565b611a4a565b606b5461010090046001600160a01b03166102a8565b610294610534366004612883565b611c77565b610294610547366004612a6c565b611c80565b61029461055a366004612a6c565b611cf7565b61029461056d366004612aeb565b611d0c565b610294610580366004612883565b611d86565b6102de610593366004612b22565b6001600160a01b03918216600090815260676020908152604080832093909416825291909152205490565b6102716105cc366004612883565b6001600160a01b03166000908152606c602052604090205460ff1690565b6102946105f8366004612883565b611dce565b61029461060b366004612883565b611e44565b61029461061e366004612bf7565b611e84565b6102946106313660046128e9565b6120a4565b60606069805461064590612ca3565b80601f016020809104026020016040519081016040528092919081815260200182805461067190612ca3565b80156106be5780601f10610693576101008083540402835291602001916106be565b820191906000526020600020905b8154815290600101906020018083116106a157829003601f168201915b5050505050905090565b60006106d5338484612109565b5060015b92915050565b6106e83361099a565b61070d5760405162461bcd60e51b815260040161070490612cdd565b60405180910390fd5b6000610718836111c9565b6001600160a01b0384166000908152606d602052604090205490915061073f908390612d41565b81101561078e5760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206578636565647320617661696c61626c652062616c616e63656044820152606401610704565b6001600160a01b0383166000908152606d60205260409020546107b2908390612d41565b6001600160a01b0384166000818152606d6020526040908190209290925590517fa065e63c631c86f1b9f66a4a2f63f2093bf1c2168d23290259dbd969e0222a45906108019085815260200190565b60405180910390a2505050565b60005b8381101561087c5761086a85858381811061082e5761082e612d54565b90506020020160208101906108439190612883565b84848481811061085557610855612d54565b905060200201602081019061056d9190612d6a565b8061087481612d87565b915050610811565b5050505050565b61088c3361099a565b6108a85760405162461bcd60e51b815260040161070490612cdd565b6001600160a01b0382166000908152606d602052604090205481111561092d5760405162461bcd60e51b815260206004820152603460248201527f416d6f756e742073686f756c64206265206c657373207468616e206f7220657160448201527375616c20746f2066726f7a656e20746f6b656e7360601b6064820152608401610704565b6001600160a01b0382166000908152606d6020526040902054610951908290612da0565b6001600160a01b0383166000818152606d6020526040908190209290925590516000805160206131a68339815191529061098e9084815260200190565b60405180910390a25050565b60006106d960658361222e565b606e5460009060ff16156109cd5760405162461bcd60e51b815260040161070490612db3565b6001600160a01b0383166000908152606c602052604090205460ff16158015610a0f57506001600160a01b0384166000908152606c602052604090205460ff16155b610a2b5760405162461bcd60e51b815260040161070490612ddd565b6001600160a01b0384166000908152606d6020526040902054610a4d856111c9565b610a579190612da0565b821115610a765760405162461bcd60e51b815260040161070490612e07565b606e5460405163b9209e3360e01b81526101009091046001600160a01b03169063b9209e3390610aaa90869060040161286f565b602060405180830381865afa158015610ac7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aeb9190612e35565b8015610b675750606f546040516372331c7360e11b81526001600160a01b039091169063e46638e690610b2690879087908790600401612e52565b602060405180830381865afa158015610b43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b679190612e35565b15610c2057606f546040516322ebca6d60e21b81526001600160a01b0390911690638baf29b490610ba090879087908790600401612e52565b600060405180830381600087803b158015610bba57600080fd5b505af1158015610bce573d6000803e3d6000fd5b50505050610bdd8484846122b1565b6001600160a01b038416600090815260676020908152604080832033808552925290912054610c18918691610c13908690612da0565b612109565b506001610c60565b60405162461bcd60e51b81526020600482015260156024820152745472616e73666572206e6f7420706f737369626c6560581b6044820152606401610704565b9392505050565b3360008181526067602090815260408083206001600160a01b038716845290915281205490916106d5918590610c13908690612d41565b610ca661240d565b606b80546001600160a01b03808416610100908102610100600160a81b031984168117948590556040805180820182526005815264332e352e3160d81b6020820152905160008051602061320683398151915296610d1b96606996606a9660ff96871696909216959095179491041690612ef3565b60405180910390a150565b610d2f3361099a565b610d4b5760405162461bcd60e51b815260040161070490612cdd565b606e5460ff16610d945760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610704565b606e805460ff191690556040517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90610dce90339061286f565b60405180910390a1565b610de13361099a565b610dfd5760405162461bcd60e51b815260040161070490612cdd565b606e5460405163b9209e3360e01b81526101009091046001600160a01b03169063b9209e3390610e3190859060040161286f565b602060405180830381865afa158015610e4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e729190612e35565b610eba5760405162461bcd60e51b815260206004820152601960248201527824b232b73a34ba3c9034b9903737ba103b32b934b334b2b21760391b6044820152606401610704565b606f546040516372331c7360e11b81526001600160a01b039091169063e46638e690610eee90339086908690600401612e52565b602060405180830381865afa158015610f0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2f9190612e35565b610f755760405162461bcd60e51b815260206004820152601760248201527610dbdb5c1b1a585b98d9481b9bdd08199bdb1b1bddd959604a1b6044820152606401610704565b610f7f828261246c565b606f54604051635f8dead360e01b81526001600160a01b0390911690635f8dead390610fb19085908590600401612f50565b600060405180830381600087803b158015610fcb57600080fd5b505af1158015610fdf573d6000803e3d6000fd5b505050505050565b60005b858110156110745761106187878381811061100757611007612d54565b905060200201602081019061101c9190612883565b86868481811061102e5761102e612d54565b90506020020160208101906110439190612883565b85858581811061105557611055612d54565b90506020020135611847565b508061106c81612d87565b915050610fea565b50505050505050565b60005b8381101561087c576110d085858381811061109d5761109d612d54565b90506020020160208101906110b29190612883565b8484848181106110c4576110c4612d54565b90506020020135610883565b806110da81612d87565b915050611080565b60005b8381101561087c5761113585858381811061110257611102612d54565b90506020020160208101906111179190612883565b84848481811061112957611129612d54565b90506020020135611708565b8061113f81612d87565b9150506110e5565b61114f61240d565b61115881611dce565b50565b611158816116be565b60005b8381101561087c576111b785858381811061118457611184612d54565b90506020020160208101906111999190612883565b8484848181106111ab576111ab612d54565b90506020020135610dd8565b806111c181612d87565b915050611167565b6001600160a01b031660009081526066602052604090205490565b6111ec61240d565b6111f66000612542565b565b6112013361099a565b61121d5760405162461bcd60e51b815260040161070490612cdd565b606e5460ff16156112405760405162461bcd60e51b815260040161070490612db3565b606e805460ff191660011790556040517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890610dce90339061286f565b61128561240d565b611290606582612594565b6040516001600160a01b038216907ff68e73cec97f2d70aa641fb26e87a4383686e2efacb648f2165aeb02ac562ec590600090a250565b60005b8381101561087c5761131a8585838181106112e7576112e7612d54565b90506020020160208101906112fc9190612883565b84848481811061130e5761130e612d54565b90506020020135611a4a565b508061132581612d87565b9150506112ca565b6033546001600160a01b031690565b60006113473361099a565b6113635760405162461bcd60e51b815260040161070490612cdd565b61136c846111c9565b6000036113b25760405162461bcd60e51b81526020600482015260146024820152733737903a37b5b2b739903a37903932b1b7bb32b960611b6044820152606401610704565b60405182906000906113c890869060200161286f565b60408051808303601f1901815290829052805160209091012063d202158d60e01b8252600482018190526001602483015291506001600160a01b0383169063d202158d90604401602060405180830381865afa15801561142c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114509190612e35565b1561166f576000611460876111c9565b6001600160a01b038089166000908152606d60205260409081902054606e549151637e42683b60e01b8152939450926101009091049091169063454a03e090899087908490637e42683b906114b9908f9060040161286f565b602060405180830381865afa1580156114d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fa9190612f69565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015261ffff166044820152606401600060405180830381600087803b15801561154d57600080fd5b505af1158015611561573d6000803e3d6000fd5b5050606e5460405163a8d29d1d60e01b81526101009091046001600160a01b0316925063a8d29d1d9150611599908b9060040161286f565b600060405180830381600087803b1580156115b357600080fd5b505af11580156115c7573d6000803e3d6000fd5b505050506115d6888884611847565b5080156115e7576115e787826106df565b6001600160a01b0388166000908152606c602052604090205460ff16151560010361161757611617876001611d0c565b604080516001600160a01b038a81168252898116602083015288168183015290517ff0c9129a94f30f1caaceb63e44b9811d0a3edf1d6c23757f346093af5553fed09181900360600190a16001945050505050610c60565b60405162461bcd60e51b81526020600482015260156024820152745265636f76657279206e6f7420706f737369626c6560581b6044820152606401610704565b6060606a805461064590612ca3565b6116c661240d565b6116d1606582612610565b6040516001600160a01b038216907fed9c8ad8d5a0a66898ea49d2956929c93ae2e8bd50281b2ed897c5d1a6737e0b90600090a250565b6117113361099a565b61172d5760405162461bcd60e51b815260040161070490612cdd565b6001600160a01b0382166000908152606d602052604081205461174f846111c9565b6117599190612da0565b9050808211156117dd57600061176f8284612da0565b6001600160a01b0385166000908152606d6020526040902054909150611796908290612da0565b6001600160a01b0385166000818152606d6020526040908190209290925590516000805160206131a6833981519152906117d39084815260200190565b60405180910390a2505b6117e78383612692565b606f5460405163469753b960e11b81526001600160a01b0390911690638d2ea772906118199086908690600401612f50565b600060405180830381600087803b15801561183357600080fd5b505af1158015611074573d6000803e3d6000fd5b60006118523361099a565b61186e5760405162461bcd60e51b815260040161070490612cdd565b6001600160a01b0384166000908152606d6020526040812054611890866111c9565b61189a9190612da0565b90508083111561191e5760006118b08285612da0565b6001600160a01b0387166000908152606d60205260409020549091506118d7908290612da0565b6001600160a01b0387166000818152606d6020526040908190209290925590516000805160206131a6833981519152906119149084815260200190565b60405180910390a2505b606e5460405163b9209e3360e01b81526101009091046001600160a01b03169063b9209e339061195290879060040161286f565b602060405180830381865afa15801561196f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119939190612e35565b15610c2057606f546040516322ebca6d60e21b81526001600160a01b0390911690638baf29b4906119cc90889088908890600401612e52565b600060405180830381600087803b1580156119e657600080fd5b505af11580156119fa573d6000803e3d6000fd5b50505050611a098585856122b1565b6001915050610c60565b3360008181526067602090815260408083206001600160a01b038716845290915281205490916106d5918590610c13908690612da0565b606e5460009060ff1615611a705760405162461bcd60e51b815260040161070490612db3565b6001600160a01b0383166000908152606c602052604090205460ff16158015611aa95750336000908152606c602052604090205460ff16155b611ac55760405162461bcd60e51b815260040161070490612ddd565b336000818152606d602052604090205490611adf906111c9565b611ae99190612da0565b821115611b085760405162461bcd60e51b815260040161070490612e07565b606e5460405163b9209e3360e01b81526101009091046001600160a01b03169063b9209e3390611b3c90869060040161286f565b602060405180830381865afa158015611b59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7d9190612e35565b8015611bf95750606f546040516372331c7360e11b81526001600160a01b039091169063e46638e690611bb890339087908790600401612e52565b602060405180830381865afa158015611bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf99190612e35565b15610c2057606f546040516322ebca6d60e21b81526001600160a01b0390911690638baf29b490611c3290339087908790600401612e52565b600060405180830381600087803b158015611c4c57600080fd5b505af1158015611c60573d6000803e3d6000fd5b50505050611c6f3384846122b1565b5060016106d9565b6111588161127d565b611c8861240d565b606a611c95828483612fe8565b50606b546040805180820182526005815264332e352e3160d81b6020820152905160008051602061320683398151915292611ceb92606992606a9260ff811692916101009091046001600160a01b031690612ef3565b60405180910390a15050565b611cff61240d565b6069611c95828483612fe8565b611d153361099a565b611d315760405162461bcd60e51b815260040161070490612cdd565b6001600160a01b0382166000818152606c6020526040808220805460ff19168515159081179091559051339391927f7fa523c84ab8d7fc5b72f08b9e46dbbf10c39e119a075b3e317002d14bc9f43691a45050565b611d8e61240d565b606e8054610100600160a81b0319166101006001600160a01b0384169081029190911790915560405160008051602061322683398151915290600090a250565b611dd661240d565b6001600160a01b038116611e3b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610704565b61115881612542565b611e4c61240d565b606f80546001600160a01b0319166001600160a01b0383169081179091556040516000805160206131c683398151915290600090a250565b600054610100900460ff1615808015611ea45750600054600160ff909116105b80611ebe5750303b158015611ebe575060005460ff166001145b611f215760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610704565b6000805460ff191660011790558015611f44576000805461ff0019166101001790555b6069611f5086826130a1565b50606a611f5d85826130a1565b50606b805460ff85166001600160a81b0319909116176101006001600160a01b03858116820292909217909255606e8054610100600160a81b031916918a1692830291909117905560405160008051602061322683398151915290600090a2606f80546001600160a01b0319166001600160a01b0388169081179091556040516000805160206131c683398151915290600090a2606b546040805180820182526005815264332e352e3160d81b602082015290516000805160206132068339815191529261204692606992606a9260ff811692916101009091046001600160a01b031690612ef3565b60405180910390a161205661276c565b8015611074576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050565b60005b8381101561087c576120f78585838181106120c4576120c4612d54565b90506020020160208101906120d99190612883565b8484848181106120eb576120eb612d54565b905060200201356106df565b8061210181612d87565b9150506120a7565b6001600160a01b03831661216b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610704565b6001600160a01b0382166121cc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610704565b6001600160a01b0383811660008181526067602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006001600160a01b0382166122915760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b6064820152608401610704565b506001600160a01b03166000908152602091909152604090205460ff1690565b6001600160a01b0383166123155760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610704565b6001600160a01b0382166123775760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610704565b6001600160a01b03831660009081526066602052604090205461239b908290612da0565b6001600160a01b0380851660009081526066602052604080822093909355908416815220546123cb908290612d41565b6001600160a01b0380841660008181526066602052604090819020939093559151908516906000805160206131e6833981519152906122219085815260200190565b3361241661132d565b6001600160a01b0316146111f65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610704565b6001600160a01b0382166124c25760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610704565b806068546124d09190612d41565b6068556001600160a01b0382166000908152606660205260409020546124f7908290612d41565b6001600160a01b0383166000818152606660205260408082209390935591519091906000805160206131e6833981519152906125369085815260200190565b60405180910390a35050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61259e828261222e565b156125eb5760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006044820152606401610704565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b61261a828261222e565b6126705760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b6064820152608401610704565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b0382166126f25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610704565b6001600160a01b038216600090815260666020526040902054612716908290612da0565b6001600160a01b03831660009081526066602052604090205560685461273d908290612da0565b6068556040518181526000906001600160a01b038416906000805160206131e683398151915290602001612536565b600054610100900460ff166127935760405162461bcd60e51b81526004016107049061315a565b6111f66127a0565b505050565b600054610100900460ff166127c75760405162461bcd60e51b81526004016107049061315a565b6111f633612542565b6000815180845260005b818110156127f6576020818501810151868301820152016127da565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610c6060208301846127d0565b80356001600160a01b038116811461284057600080fd5b919050565b6000806040838503121561285857600080fd5b61286183612829565b946020939093013593505050565b6001600160a01b0391909116815260200190565b60006020828403121561289557600080fd5b610c6082612829565b60008083601f8401126128b057600080fd5b5081356001600160401b038111156128c757600080fd5b6020830191508360208260051b85010111156128e257600080fd5b9250929050565b600080600080604085870312156128ff57600080fd5b84356001600160401b038082111561291657600080fd5b6129228883890161289e565b9096509450602087013591508082111561293b57600080fd5b506129488782880161289e565b95989497509550505050565b60008060006060848603121561296957600080fd5b61297284612829565b925061298060208501612829565b9150604084013590509250925092565b600080600080600080606087890312156129a957600080fd5b86356001600160401b03808211156129c057600080fd5b6129cc8a838b0161289e565b909850965060208901359150808211156129e557600080fd5b6129f18a838b0161289e565b90965094506040890135915080821115612a0a57600080fd5b50612a1789828a0161289e565b979a9699509497509295939492505050565b600080600060608486031215612a3e57600080fd5b612a4784612829565b9250612a5560208501612829565b9150612a6360408501612829565b90509250925092565b60008060208385031215612a7f57600080fd5b82356001600160401b0380821115612a9657600080fd5b818501915085601f830112612aaa57600080fd5b813581811115612ab957600080fd5b866020828501011115612acb57600080fd5b60209290920196919550909350505050565b801515811461115857600080fd5b60008060408385031215612afe57600080fd5b612b0783612829565b91506020830135612b1781612add565b809150509250929050565b60008060408385031215612b3557600080fd5b612b3e83612829565b9150612b4c60208401612829565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612b7c57600080fd5b81356001600160401b0380821115612b9657612b96612b55565b604051601f8301601f19908116603f01168101908282118183101715612bbe57612bbe612b55565b81604052838152866020858801011115612bd757600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060008060008060c08789031215612c1057600080fd5b612c1987612829565b9550612c2760208801612829565b945060408701356001600160401b0380821115612c4357600080fd5b612c4f8a838b01612b6b565b95506060890135915080821115612c6557600080fd5b50612c7289828a01612b6b565b935050608087013560ff81168114612c8957600080fd5b9150612c9760a08801612829565b90509295509295509295565b600181811c90821680612cb757607f821691505b602082108103612cd757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f4167656e74526f6c653a2063616c6c657220646f6573206e6f7420686176652060408201526d746865204167656e7420726f6c6560901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156106d9576106d9612d2b565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612d7c57600080fd5b8135610c6081612add565b600060018201612d9957612d99612d2b565b5060010190565b818103818111156106d9576106d9612d2b565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526010908201526f3bb0b63632ba1034b990333937bd32b760811b604082015260600190565b602080825260149082015273496e73756666696369656e742042616c616e636560601b604082015260600190565b600060208284031215612e4757600080fd5b8151610c6081612add565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60008154612e8381612ca3565b808552602060018381168015612ea05760018114612eba57612ee8565b60ff1985168884015283151560051b880183019550612ee8565b866000528260002060005b85811015612ee05781548a8201860152908301908401612ec5565b890184019650505b505050505092915050565b60a081526000612f0660a0830188612e76565b8281036020840152612f188188612e76565b905060ff861660408401528281036060840152612f3581866127d0565b91505060018060a01b03831660808301529695505050505050565b6001600160a01b03929092168252602082015260400190565b600060208284031215612f7b57600080fd5b815161ffff81168114610c6057600080fd5b601f82111561279b57600081815260208120601f850160051c81016020861015612fb45750805b601f850160051c820191505b81811015610fdf57828155600101612fc0565b600019600383901b1c191660019190911b1790565b6001600160401b03831115612fff57612fff612b55565b6130138361300d8354612ca3565b83612f8d565b6000601f841160018114613041576000851561302f5750838201355b6130398682612fd3565b84555061087c565b600083815260209020601f19861690835b828110156130725786850135825560209485019460019092019101613052565b508682101561308f5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81516001600160401b038111156130ba576130ba612b55565b6130ce816130c88454612ca3565b84612f8d565b602080601f8311600181146130fd57600084156130eb5750858301515b6130f58582612fd3565b865550610fdf565b600085815260208120601f198616915b8281101561312c5788860151825594840194600190910190840161310d565b508582101561314a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe9bed35cb62ad0dba04f9d5bfee4b5bc91443e77da8a65c4c84834c51bb08b0d67f3a888862559648ec01d97deb7b5012bff86dc91e654a1de397170db40e35b6ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6a1105ac8148a3c319adbc369f9072573e8a11d3a3d195e067e7c40767ec54d1d2be862d755bca7e0d39772b2cab3a5578da9c285f69199f4c063c2294a7f36ca264697066735822122040fb71c1e5e337f4eb323e68d287ec15c8b3da02510210c2f20e4650e10d788f64736f6c63430008110033a2646970667358221220ec8af9fefcce0efabbcf144309fa9a40ff5b76866c1970b6988d29b59318bed064736f6c63430008110033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:219:54",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:54",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "115:102:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "125:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "137:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "148:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "133:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "133:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "125:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "167:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "182:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "198:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "203:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "194:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "194:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "207:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "190:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "190:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "178:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "178:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "160:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "160:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "160:51:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "84:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "95:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "106:4:54",
                "type": ""
              }
            ],
            "src": "14:203:54"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n}",
      "id": 54,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "90:220:26:-:0;;;153:49;;;;;;;;;-1:-1:-1;177:5:26;:18;;-1:-1:-1;;;;;;177:18:26;185:10;177:18;;;90:220;;;;;;",
  "deployedSourceMap": "90:220:26:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;126:20;;;;;-1:-1:-1;;;;;126:20:26;;;;;;-1:-1:-1;;;;;178:32:54;;;160:51;;148:2;133:18;126:20:26;;;;;;;208:100;;255:7;289:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;274:27;;208:100;:::o;-1:-1:-1:-;;;;;;;;:::o",
  "source": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.0;\n\nimport './token/Token.sol';\n\ncontract SecurityTokenCreator {\n    address public owner;\n\n    constructor() {\n        owner = msg.sender;\n    }\n\n    function deploySecurityToken() public returns (address) {\n        return address(new Token());\n    }\n}\n",
  "sourcePath": "/home/webxpert/workspace/shipfinex/latest-repos/tokenx_smartcontract/contracts/SecurityTokenCreator.sol",
  "ast": {
    "absolutePath": "project:/contracts/SecurityTokenCreator.sol",
    "exportedSymbols": {
      "AddressUpgradeable": [
        2350
      ],
      "AgentRoleUpgradeable": [
        9203
      ],
      "ContextUpgradeable": [
        2392
      ],
      "IClaimIssuer": [
        1456
      ],
      "IClaimTopicsRegistry": [
        6444
      ],
      "ICompliance": [
        5596
      ],
      "IERC20": [
        3317
      ],
      "IERC734": [
        1609
      ],
      "IERC735": [
        1734
      ],
      "IIdentity": [
        1743
      ],
      "IIdentityRegistry": [
        6637
      ],
      "IIdentityRegistryStorage": [
        6759
      ],
      "IToken": [
        12234
      ],
      "ITrustedIssuersRegistry": [
        6856
      ],
      "Initializable": [
        2107
      ],
      "OwnableUpgradeable": [
        1956
      ],
      "Roles": [
        11901
      ],
      "SecurityTokenCreator": [
        4904
      ],
      "Token": [
        13849
      ],
      "TokenStorage": [
        12284
      ]
    },
    "id": 4905,
    "license": "GPL-3.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4877,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "36:23:26"
      },
      {
        "absolutePath": "project:/contracts/token/Token.sol",
        "file": "./token/Token.sol",
        "id": 4878,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 4905,
        "sourceUnit": 13850,
        "src": "61:27:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "SecurityTokenCreator",
        "contractDependencies": [
          13849
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 4904,
        "linearizedBaseContracts": [
          4904
        ],
        "name": "SecurityTokenCreator",
        "nameLocation": "99:20:26",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "functionSelector": "8da5cb5b",
            "id": 4880,
            "mutability": "mutable",
            "name": "owner",
            "nameLocation": "141:5:26",
            "nodeType": "VariableDeclaration",
            "scope": 4904,
            "src": "126:20:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 4879,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "126:7:26",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "body": {
              "id": 4888,
              "nodeType": "Block",
              "src": "167:35:26",
              "statements": [
                {
                  "expression": {
                    "id": 4886,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 4883,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4880,
                      "src": "177:5:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 4884,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967281,
                        "src": "185:3:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 4885,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "189:6:26",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "185:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "177:18:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4887,
                  "nodeType": "ExpressionStatement",
                  "src": "177:18:26"
                }
              ]
            },
            "id": 4889,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4881,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "164:2:26"
            },
            "returnParameters": {
              "id": 4882,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "167:0:26"
            },
            "scope": 4904,
            "src": "153:49:26",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4902,
              "nodeType": "Block",
              "src": "264:44:26",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 4898,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "NewExpression",
                          "src": "289:9:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_creation_nonpayable$__$returns$_t_contract$_Token_$13849_$",
                            "typeString": "function () returns (contract Token)"
                          },
                          "typeName": {
                            "id": 4897,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                              "id": 4896,
                              "name": "Token",
                              "nameLocations": [
                                "293:5:26"
                              ],
                              "nodeType": "IdentifierPath",
                              "referencedDeclaration": 13849,
                              "src": "293:5:26"
                            },
                            "referencedDeclaration": 13849,
                            "src": "293:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Token_$13849",
                              "typeString": "contract Token"
                            }
                          }
                        },
                        "id": 4899,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "289:11:26",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Token_$13849",
                          "typeString": "contract Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Token_$13849",
                          "typeString": "contract Token"
                        }
                      ],
                      "id": 4895,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "281:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 4894,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "281:7:26",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 4900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "281:20:26",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 4893,
                  "id": 4901,
                  "nodeType": "Return",
                  "src": "274:27:26"
                }
              ]
            },
            "functionSelector": "bc188d9e",
            "id": 4903,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deploySecurityToken",
            "nameLocation": "217:19:26",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4890,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "236:2:26"
            },
            "returnParameters": {
              "id": 4893,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4892,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 4903,
                  "src": "255:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4891,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "255:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "254:9:26"
            },
            "scope": 4904,
            "src": "208:100:26",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 4905,
        "src": "90:220:26",
        "usedErrors": []
      }
    ],
    "src": "36:275:26"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.17+commit.8df45f5f.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.8",
  "updatedAt": "2022-12-08T12:51:01.348Z",
  "devdoc": {
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}