{
  "contractName": "SecurityTokenManager",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "deployClaimTopicsRegistry",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "deployTrustedIssuersRegistry",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "deployIdentityRegistryStorage",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_trustedIssuersRegistry",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_claimTopicsRegistry",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_identityRegistryStorage",
          "type": "address"
        }
      ],
      "name": "deployIdentityRegistry",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "deployCompliance",
      "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\":\"deployClaimTopicsRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deployCompliance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_trustedIssuersRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_claimTopicsRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_identityRegistryStorage\",\"type\":\"address\"}],\"name\":\"deployIdentityRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deployIdentityRegistryStorage\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deployTrustedIssuersRegistry\",\"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/SecurityTokenManager.sol\":\"SecurityTokenManager\"},\"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/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"project:/contracts/SecurityTokenManager.sol\":{\"keccak256\":\"0xce22e04a42b8519280d1bd75666f7087dca07ea1e4099368c2eaed1d779d6392\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://4bf66c4026549cf8e95c6c9f81389250a75da5741f0648bde7baa9eead8a65d2\",\"dweb:/ipfs/Qmc2u6PPFofvNK1YHmYuTaQujuwot1FrEWx3EWzh4mKY9C\"]},\"project:/contracts/compliance/DefaultCompliance.sol\":{\"keccak256\":\"0xe8c76d868128706ffc86a87997679e3b6782d15a06f68839e42aa10d549974bd\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://5cf35c5aa040b93c7df8c0709d7b8d8441bb19f99d71fb9cf1228bfdc1056e27\",\"dweb:/ipfs/QmTcspRyapBn5gkaRcjgVc7GVugXmRPTFaEEeyz3AEK67D\"]},\"project:/contracts/compliance/ICompliance.sol\":{\"keccak256\":\"0x4049905b34eab118c0c3f644450299a5ed8022bbbdb26036e7c2854dae8ae1ba\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://f8144953d88f543b2f537514f1136b8adf705837ba6d420b95569f6895153edb\",\"dweb:/ipfs/QmRqM7A6XrofFR67k8RtNNEkriAbKsQHDgUYaKZTMr9Nm5\"]},\"project:/contracts/registry/ClaimTopicsRegistry.sol\":{\"keccak256\":\"0x27e1d03b60423a957fc841aa7ff0d4b1538b6f2d5f5891e21b7147f767e89fac\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://dd4d39c443fd16883ffcfe9fe19943a13ffde53de2aa5595f3c5db559fd1a9e2\",\"dweb:/ipfs/QmXA4vp4YozVQkjitT6SAgLMBLMrGyEE8SgZ3UDoUR6hMs\"]},\"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/registry/IdentityRegistry.sol\":{\"keccak256\":\"0x9f5e386d77238448ac8e214dad94244e4b902756e9a76095d18af542c14b3126\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://c38a372f4e73df5e894ac3f6c0cad0cb6d3f5942a37b946eb9fedd2d8611fdec\",\"dweb:/ipfs/QmUcr8BYHYUUGCQr77siHj7yxFdwBZAMB4vkY8Fjdf4i3C\"]},\"project:/contracts/registry/IdentityRegistryStorage.sol\":{\"keccak256\":\"0x040e79ab7ae519a3f153bd7ed1a5240474096b4b978e6cfb2d4c50240a932e79\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9c1ae05064603d205344a9fc14110b028c6bb9553dace68fbe7382cae6f3f415\",\"dweb:/ipfs/QmYSxMq8sDHfESxkhorrVtUuLrDpqrhGawVivuHti5x8Lm\"]},\"project:/contracts/registry/TrustedIssuersRegistry.sol\":{\"keccak256\":\"0xeb871277304a1dd95485ea678ab4183829fb8ea073d53db7204fe8a8923654d8\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://7add52f3520dfa9567ee11da9dae21728d6c9b74d909fd08728c6d3c80cb5aa9\",\"dweb:/ipfs/QmWDrJdo4DbFFNnv1qudieymctfp5pHBgHvh6HwW4DM6Zc\"]},\"project:/contracts/roles/AgentRole.sol\":{\"keccak256\":\"0x2a264adff17bd254164e69c882dc033d8b7e9bc6eab01c5e7d2ad26324a2c953\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://585dfaafc7e37d38ff6f0c5ca4a8e0ad1e92b0babd1f54762bfaa8c67c1ec2d7\",\"dweb:/ipfs/QmXVnTvX1zVVQoxSZBgKRptSVz22T2vyXC3P89Bsv9x7Jg\"]},\"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": "0x608060405234801561001057600080fd5b50600080546001600160a01b031916331790556146e1806100326000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80634f3428ee1461006757806354174040146100965780635d4b2d121461009e578063820d385e146100a65780638da5cb5b146100ae578063c1c7ee40146100c1575b600080fd5b61007a6100753660046101d6565b6100c9565b6040516001600160a01b03909116815260200160405180910390f35b61007a61011f565b61007a61014f565b61007a61015d565b60005461007a906001600160a01b031681565b61007a61016b565b60008383836040516100da90610179565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610116573d6000803e3d6000fd5b50949350505050565b600060405161012d90610186565b604051809103906000f080158015610149573d6000803e3d6000fd5b50905090565b600060405161012d90610193565b600060405161012d906101a0565b600060405161012d906101ad565b611a468061021a83390190565b61065080611c6083390190565b6107d7806122b083390190565b610f8280612a8783390190565b610ca380613a0983390190565b80356001600160a01b03811681146101d157600080fd5b919050565b6000806000606084860312156101eb57600080fd5b6101f4846101ba565b9250610202602085016101ba565b9150610210604085016101ba565b9050925092509256fe60806040523480156200001157600080fd5b5060405162001a4638038062001a46833981016040819052620000349162000181565b6200003f3362000114565b600280546001600160a01b038085166001600160a01b031992831681179093556003805487831690841617905560048054918516919092161790556040517f7170bf15b246e880b2369cd7c67d057760d8a35149e8c64dde91efa22bcc76d090600090a26040516001600160a01b038416907f1b98cb79e6f73020175fe87333f1b91ad6a881519c0afe30340c2599b2b4bde090600090a26040516001600160a01b038216907f2fa8b95c1db7afe99e3398f3792f008135cedc1fa26b0bb2ecd2352cd166d53c90600090a2505050620001cb565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200017c57600080fd5b919050565b6000806000606084860312156200019757600080fd5b620001a28462000164565b9250620001b26020850162000164565b9150620001c26040850162000164565b90509250925092565b61186b80620001db6000396000f3fe608060405234801561001057600080fd5b50600436106101285760003560e01c80631ffbb0641461012d57806326d941ae146101555780633b239a7f1461016a5780633b3e12f41461017d578063454a03e01461019757806350bc7bda146101aa5780635dbe47e8146101bd5780635e5741f3146101d0578063653dc9f1146101e3578063670af6a9146101f6578063715018a6146102095780637e42683b1461021157806384e79842146102375780638da5cb5b1461024a5780638e098ca11461025257806397a6278e14610265578063a8d29d1d14610278578063b4f3fcb71461028b578063b9209e331461029c578063ce240d9c146102af578063e744d789146102c2578063f0eb5e54146102d5578063f11abfd8146102e8578063f2fde38b146102f9575b600080fd5b61014061013b366004611269565b61030c565b60405190151581526020015b60405180910390f35b610168610163366004611269565b61031f565b005b61016861017836600461129d565b610371565b6002546001600160a01b03165b60405161014c91906112d6565b6101686101a53660046112ea565b610448565b6101686101b8366004611269565b61051d565b6101406101cb366004611269565b610529565b6101686101de366004611269565b610553565b6101686101f1366004611380565b61055c565b610168610204366004611269565b6105fa565b61016861064c565b61022461021f366004611269565b610660565b60405161ffff909116815260200161014c565b610168610245366004611269565b6106d3565b61018a61071d565b610168610260366004611419565b61072c565b610168610273366004611269565b610804565b610168610286366004611269565b61084e565b6003546001600160a01b031661018a565b6101406102aa366004611269565b61091f565b6101686102bd366004611269565b610ed8565b6101686102d0366004611269565b610ee9565b61018a6102e3366004611269565b610f3b565b6004546001600160a01b031661018a565b610168610307366004611269565b610fae565b6000610319600183611024565b92915050565b6103276110a7565b600480546001600160a01b0319166001600160a01b0383169081179091556040517f2fa8b95c1db7afe99e3398f3792f008135cedc1fa26b0bb2ecd2352cd166d53c90600090a250565b61037a3361030c565b61039f5760405162461bcd60e51b815260040161039690611447565b60405180910390fd5b60048054604051639f3418d560e01b81526001600160a01b038581169382019390935261ffff84166024820152911690639f3418d590604401600060405180830381600087803b1580156103f257600080fd5b505af1158015610406573d6000803e3d6000fd5b505060405161ffff841692506001600160a01b03851691507f04ed3b726495c2dca1ff1215d9ca54e1a4030abb5e82b0f6ce55702416cee85390600090a35050565b6104513361030c565b61046d5760405162461bcd60e51b815260040161039690611447565b6004805460405163a53410dd60e01b81526001600160a01b0386811693820193909352848316602482015261ffff8416604482015291169063a53410dd90606401600060405180830381600087803b1580156104c857600080fd5b505af11580156104dc573d6000803e3d6000fd5b50506040516001600160a01b038086169350861691507f6ae73635c50d24a45af6fbd5e016ac4bed179addbc8bf24e04ff0fcc6d33af1990600090a3505050565b610526816106d3565b50565b60008061053583610f3b565b6001600160a01b03160361054b57506000919050565b506001919050565b61052681610804565b60005b858110156105f1576105df87878381811061057c5761057c611495565b90506020020160208101906105919190611269565b8686848181106105a3576105a3611495565b90506020020160208101906105b89190611269565b8585858181106105ca576105ca611495565b90506020020160208101906101a591906114ab565b806105e9816114de565b91505061055f565b50505050505050565b6106026110a7565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f7170bf15b246e880b2369cd7c67d057760d8a35149e8c64dde91efa22bcc76d090600090a250565b6106546110a7565b61065e6000611106565b565b60048054604051631c9f84ef60e21b81526000926001600160a01b039092169163727e13bc91610692918691016112d6565b602060405180830381865afa1580156106af573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061031991906114f7565b6106db6110a7565b6106e6600182611156565b6040516001600160a01b038216907ff68e73cec97f2d70aa641fb26e87a4383686e2efacb648f2165aeb02ac562ec590600090a250565b6000546001600160a01b031690565b6107353361030c565b6107515760405162461bcd60e51b815260040161039690611447565b600061075c83610f3b565b60048054604051637402e7c360e11b81526001600160a01b03878116938201939093528583166024820152929350169063e805cf8690604401600060405180830381600087803b1580156107af57600080fd5b505af11580156107c3573d6000803e3d6000fd5b50506040516001600160a01b038086169350841691507fe98082932c8056a0f514da9104e4a66bc2cbaef102ad59d90c4b24220ebf601090600090a3505050565b61080c6110a7565b6108176001826111d2565b6040516001600160a01b038216907fed9c8ad8d5a0a66898ea49d2956929c93ae2e8bd50281b2ed897c5d1a6737e0b90600090a250565b6108573361030c565b6108735760405162461bcd60e51b815260040161039690611447565b6004805460405163cf191bcd60e01b81526001600160a01b039091169163cf191bcd916108a2918591016112d6565b600060405180830381600087803b1580156108bc57600080fd5b505af11580156108d0573d6000803e3d6000fd5b505050506108dd81610f3b565b6001600160a01b0316816001600160a01b03167f59d6590e225b81befe259af056324092801080acbb7feab310eb34678871f32760405160405180910390a350565b60008061092b83610f3b565b6001600160a01b03160361094157506000919050565b600254604080516337c2758160e21b815290516000926001600160a01b03169163df09d60491600480830192869291908290030181865afa15801561098a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109b2919081019061157d565b905080516000036109c65750600192915050565b600080600060608060005b8651811015610ec95760006109e58a610f3b565b6001600160a01b03166380e9e9e1898481518110610a0557610a05611495565b60200260200101516040518263ffffffff1660e01b8152600401610a2b91815260200190565b600060405180830381865afa158015610a48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a70919081019061157d565b90508051600003610a8b575060009998505050505050505050565b60005b8151811015610eb457610aa08b610f3b565b6001600160a01b031663c9100bcb838381518110610ac057610ac0611495565b60200260200101516040518263ffffffff1660e01b8152600401610ae691815260200190565b600060405180830381865afa158015610b03573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b2b91908101906116a4565b50939b509199509750955093506001600160a01b03861663c0969a6e610b508d610f3b565b8b8681518110610b6257610b62611495565b602002602001015188886040518563ffffffff1660e01b8152600401610b8b9493929190611791565b602060405180830381865afa925050508015610bc4575060408051601f3d908101601f19168201909252610bc1918101906117ca565b60015b610bf25760018251610bd691906117ec565b8103610bed575060009a9950505050505050505050565b610ea2565b808015610c8b57506003548a516001600160a01b03909116906334a899879089908d9088908110610c2557610c25611495565b60200260200101516040518363ffffffff1660e01b8152600401610c4a9291906117ff565b602060405180830381865afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8b91906117ca565b8015610d035750600354604051633bcbb46960e21b81526001600160a01b039091169063ef2ed1a490610cc2908a906004016112d6565b602060405180830381865afa158015610cdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0391906117ca565b15610d0d57825191505b600354604051633bcbb46960e21b81526001600160a01b039091169063ef2ed1a490610d3d908a906004016112d6565b602060405180830381865afa158015610d5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7e91906117ca565b158015610d97575060018351610d9491906117ec565b82145b15610dae575060009b9a5050505050505050505050565b6003548a516001600160a01b03909116906334a899879089908d9088908110610dd957610dd9611495565b60200260200101516040518363ffffffff1660e01b8152600401610dfe9291906117ff565b602060405180830381865afa158015610e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3f91906117ca565b158015610e58575060018351610e5591906117ec565b82145b15610e6f575060009b9a5050505050505050505050565b80158015610e89575060018351610e8691906117ec565b82145b15610ea0575060009b9a5050505050505050505050565b505b80610eac816114de565b915050610a8e565b50508080610ec1906114de565b9150506109d1565b50600198975050505050505050565b610ee06110a7565b61052681610fae565b610ef16110a7565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f1b98cb79e6f73020175fe87333f1b91ad6a881519c0afe30340c2599b2b4bde090600090a250565b60048054604051637988d3a560e01b81526000926001600160a01b0390921691637988d3a591610f6d918691016112d6565b602060405180830381865afa158015610f8a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103199190611818565b610fb66110a7565b6001600160a01b03811661101b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610396565b61052681611106565b60006001600160a01b0382166110875760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b6064820152608401610396565b506001600160a01b03166000908152602091909152604090205460ff1690565b336110b061071d565b6001600160a01b03161461065e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610396565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6111608282611024565b156111ad5760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006044820152606401610396565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6111dc8282611024565b6112325760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b6064820152608401610396565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b038116811461052657600080fd5b60006020828403121561127b57600080fd5b813561128681611254565b9392505050565b61ffff8116811461052657600080fd5b600080604083850312156112b057600080fd5b82356112bb81611254565b915060208301356112cb8161128d565b809150509250929050565b6001600160a01b0391909116815260200190565b6000806000606084860312156112ff57600080fd5b833561130a81611254565b9250602084013561131a81611254565b9150604084013561132a8161128d565b809150509250925092565b60008083601f84011261134757600080fd5b5081356001600160401b0381111561135e57600080fd5b6020830191508360208260051b850101111561137957600080fd5b9250929050565b6000806000806000806060878903121561139957600080fd5b86356001600160401b03808211156113b057600080fd5b6113bc8a838b01611335565b909850965060208901359150808211156113d557600080fd5b6113e18a838b01611335565b909650945060408901359150808211156113fa57600080fd5b5061140789828a01611335565b979a9699509497509295939492505050565b6000806040838503121561142c57600080fd5b823561143781611254565b915060208301356112cb81611254565b6020808252602e908201527f4167656e74526f6c653a2063616c6c657220646f6573206e6f7420686176652060408201526d746865204167656e7420726f6c6560901b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156114bd57600080fd5b81356112868161128d565b634e487b7160e01b600052601160045260246000fd5b6000600182016114f0576114f06114c8565b5060010190565b60006020828403121561150957600080fd5b81516112868161128d565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561155257611552611514565b604052919050565b60006001600160401b0382111561157357611573611514565b5060051b60200190565b6000602080838503121561159057600080fd5b82516001600160401b038111156115a657600080fd5b8301601f810185136115b757600080fd5b80516115ca6115c58261155a565b61152a565b81815260059190911b820183019083810190878311156115e957600080fd5b928401925b82841015611607578351825292840192908401906115ee565b979650505050505050565b60005b8381101561162d578181015183820152602001611615565b50506000910152565b60006001600160401b0383111561164f5761164f611514565b611662601f8401601f191660200161152a565b905082815283838301111561167657600080fd5b611286836020830184611612565b600082601f83011261169557600080fd5b61128683835160208501611636565b60008060008060008060c087890312156116bd57600080fd5b865195506020870151945060408701516116d681611254565b60608801519094506001600160401b03808211156116f357600080fd5b6116ff8a838b01611684565b9450608089015191508082111561171557600080fd5b6117218a838b01611684565b935060a089015191508082111561173757600080fd5b508701601f8101891361174957600080fd5b61175889825160208401611636565b9150509295509295509295565b6000815180845261177d816020860160208601611612565b601f01601f19169290920160200192915050565b60018060a01b03851681528360208201526080604082015260006117b86080830185611765565b82810360608401526116078185611765565b6000602082840312156117dc57600080fd5b8151801515811461128657600080fd5b81810381811115610319576103196114c8565b6001600160a01b03929092168252602082015260400190565b60006020828403121561182a57600080fd5b81516112868161125456fea26469706673582212207ee5ed5cffd617d877c97c9e8194bc9f310fff132e95ae4c4c4c3076fbaa2e2164736f6c63430008110033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6105d28061007e6000396000f3fe608060405234801561001057600080fd5b506004361061006d5760003560e01c80630829784614610072578063715018a6146100875780638da5cb5b1461008f578063c7b22551146100b4578063d5144472146100c7578063df09d604146100da578063f2fde38b146100ef575b600080fd5b61008561008036600461049b565b610102565b005b6100856101f2565b610097610206565b6040516001600160a01b0390911681526020015b60405180910390f35b6100856100c236600461049b565b610215565b6100856100d53660046104b4565b61030a565b6100e261031e565b6040516100ab91906104e4565b6100856100fd3660046104b4565b610376565b61010a6103ec565b60015460005b818110156101ed57826001828154811061012c5761012c610528565b9060005260206000200154036101db5760016101488184610554565b8154811061015857610158610528565b90600052602060002001546001828154811061017657610176610528565b60009182526020909120015560018054806101935761019361056d565b60019003818190600052602060002001600090559055827f0b1381093c776453c1bbe54fd68be1b235c65db61d099cb50d194b2991e0eec560405160405180910390a2505050565b806101e581610583565b915050610110565b505050565b6101fa6103ec565b610204600061044b565b565b6000546001600160a01b031690565b61021d6103ec565b60015460005b818110156102aa57826001828154811061023f5761023f610528565b9060005260206000200154036102985760405162461bcd60e51b8152602060048201526019602482015278636c61696d546f70696320616c72656164792065786973747360381b60448201526064015b60405180910390fd5b806102a281610583565b915050610223565b5060018054808201825560009182527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60183905560405183917f01c928b7f7ade2949e92366aa9454dbef3a416b731cf6ec786ba9595bbd814d691a25050565b6103126103ec565b61031b81610376565b50565b6060600180548060200260200160405190810160405280929190818152602001828054801561036c57602002820191906000526020600020905b815481526020019060010190808311610358575b5050505050905090565b61037e6103ec565b6001600160a01b0381166103e35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161028f565b61031b8161044b565b336103f5610206565b6001600160a01b0316146102045760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156104ad57600080fd5b5035919050565b6000602082840312156104c657600080fd5b81356001600160a01b03811681146104dd57600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b8181101561051c57835183529284019291840191600101610500565b50909695505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156105675761056761053e565b92915050565b634e487b7160e01b600052603160045260246000fd5b6000600182016105955761059561053e565b506001019056fea2646970667358221220a78a451c1b3d166bef39ca48e02f82b4494847fc7fe085f9a619d95f9a4fb1aa64736f6c63430008110033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6107598061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100ba5760003560e01c8063346531fa146100bf5780633ff5aa021461010057806340db3b50146101155780635f8dead314610128578063715018a61461013a5780637bcf0487146101425780638baf29b4146101555780638d2ea772146101285780638da5cb5b14610168578063993e8b951461017d578063cdde2932146101a9578063e46638e6146101bc578063f2fde38b146101d3578063ff3e6954146101e6575b600080fd5b6100eb6100cd366004610687565b6001600160a01b031660009081526001602052604090205460ff1690565b60405190151581526020015b60405180910390f35b61011361010e366004610687565b6101f9565b005b610113610123366004610687565b6102cb565b6101136101363660046106a9565b5050565b610113610389565b610113610150366004610687565b61039d565b6101136101633660046106d3565b505050565b6101706103b1565b6040516100f7919061070f565b6100eb61018b366004610687565b6001600160a01b031660009081526002602052604090205460ff1690565b6101136101b7366004610687565b6103c0565b6100eb6101ca3660046106d3565b60019392505050565b6101136101e1366004610687565b610480565b6101136101f4366004610687565b6104f6565b6102016105bc565b6001600160a01b03811660009081526002602052604090205460ff161561026d5760405162461bcd60e51b815260206004820152601b60248201527a151a1a5cc81d1bdad95b881a5cc8185b1c9958591e48189bdd5b99602a1b60448201526064015b60405180910390fd5b6001600160a01b03811660009081526002602052604090819020805460ff19166001179055517f2de35142b19ed5a07796cf30791959c592018f70b1d2d7c460eef8ffe713692b906102c090839061070f565b60405180910390a150565b6102d36105bc565b6001600160a01b03811660009081526002602052604090205460ff166103395760405162461bcd60e51b815260206004820152601b60248201527a151a1a5cc81d1bdad95b881a5cc81b9bdd08189bdd5b99081e595d602a1b6044820152606401610264565b6001600160a01b03811660009081526002602052604090819020805460ff19169055517f28a4ca7134a3b3f9aff286e79ad3daadb4a06d1b43d037a3a98bdc074edd9b7a906102c090839061070f565b6103916105bc565b61039b600061061b565b565b6103a56105bc565b6103ae81610480565b50565b6000546001600160a01b031690565b6103c86105bc565b6001600160a01b03811660009081526001602052604090205460ff166104305760405162461bcd60e51b815260206004820181905260248201527f54686973204167656e74206973206e6f742072656769737465726564207965746044820152606401610264565b6001600160a01b03811660009081526001602052604090819020805460ff19169055517f6a659bb87bb23efbdc295f8eed8ae8c4379bfb77660ced2ef0f3d7d26b05c6a6906102c090839061070f565b6104886105bc565b6001600160a01b0381166104ed5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610264565b6103ae8161061b565b6104fe6105bc565b6001600160a01b03811660009081526001602052604090205460ff16156105675760405162461bcd60e51b815260206004820181905260248201527f54686973204167656e7420697320616c726561647920726567697374657265646044820152606401610264565b6001600160a01b038116600090815260016020819052604091829020805460ff19169091179055517fd62c45e13ac30396aceb3ad37c89bd1ba9048032fe61679000e92eb93dbfd67d906102c090839061070f565b336105c56103b1565b6001600160a01b03161461039b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610264565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461068257600080fd5b919050565b60006020828403121561069957600080fd5b6106a28261066b565b9392505050565b600080604083850312156106bc57600080fd5b6106c58361066b565b946020939093013593505050565b6000806000606084860312156106e857600080fd5b6106f18461066b565b92506106ff6020850161066b565b9150604084013590509250925092565b6001600160a01b039190911681526020019056fea2646970667358221220a07950ac50d69eda6d9047a66840e329950d44170805982a8421f7a81637ad5c64736f6c63430008110033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f048061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100d05760003560e01c80631ffbb064146100d55780635ccbbe49146100fd578063690a49f914610112578063715018a614610125578063727e13bc1461012d5780637988d3a51461017457806384e79842146101b85780638da5cb5b146101cb57806397a012f7146101d357806397a6278e146101e65780639f3418d5146101f9578063a53410dd1461020c578063bf9eb9591461021f578063cf191bcd14610234578063e805cf8614610247578063f2fde38b1461025a575b600080fd5b6100e86100e3366004610c49565b61026d565b60405190151581526020015b60405180910390f35b61011061010b366004610c49565b610280565b005b610110610120366004610c49565b610294565b610110610315565b61016161013b366004610c49565b6001600160a01b0316600090815260026020526040902054600160a01b900461ffff1690565b60405161ffff90911681526020016100f4565b6101a0610182366004610c49565b6001600160a01b039081166000908152600260205260409020541690565b6040516001600160a01b0390911681526020016100f4565b6101106101c6366004610c49565b610329565b6101a0610373565b6101106101e1366004610c49565b610382565b6101106101f4366004610c49565b61051e565b610110610207366004610c84565b610568565b61011061021a366004610cb9565b610627565b61022761075a565b6040516100f49190610d00565b610110610242366004610c49565b6107bc565b610110610255366004610d4d565b6108aa565b610110610268366004610c49565b61098e565b600061027a600183610a04565b92915050565b610288610a87565b6102918161098e565b50565b61029d81610329565b6003805460018101825560009182527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b03841690811790915560405190917f500c250171aa20e861b680f93502547b9d436eda7d4c537fc360db6e0c6eedfb91a250565b61031d610a87565b6103276000610ae6565b565b610331610a87565b61033c600182610b36565b6040516001600160a01b038216907ff68e73cec97f2d70aa641fb26e87a4383686e2efacb648f2165aeb02ac562ec590600090a250565b6000546001600160a01b031690565b6003546103d65760405162461bcd60e51b815260206004820152601f60248201527f6964656e74697479207265676973747279206973206e6f742073746f7265640060448201526064015b60405180910390fd5b60035460005b818110156104dc57826001600160a01b03166003828154811061040157610401610d86565b6000918252602090912001546001600160a01b0316036104ca576003610428600184610db2565b8154811061043857610438610d86565b600091825260209091200154600380546001600160a01b03909216918390811061046457610464610d86565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060038054806104a3576104a3610dc5565b600082815260209020810160001990810180546001600160a01b03191690550190556104dc565b806104d481610ddb565b9150506103dc565b506104e68261051e565b6040516001600160a01b038316907f51f353eb5801583fdf2706e43c045b62fdf6b1566820b349390616363ecf72c990600090a25050565b610526610a87565b610531600182610bb2565b6040516001600160a01b038216907fed9c8ad8d5a0a66898ea49d2956929c93ae2e8bd50281b2ed897c5d1a6737e0b90600090a250565b6105713361026d565b61058d5760405162461bcd60e51b81526004016103cd90610df4565b6001600160a01b03828116600090815260026020526040902054166105c45760405162461bcd60e51b81526004016103cd90610e42565b6001600160a01b038216600081815260026020526040808220805461ffff60a01b1916600160a01b61ffff87169081029190911790915590519092917f20965fcdc6eed7ae398065b40ece4e732ba667992ca819fc54e80e9f2047c4cf91a35050565b6106303361026d565b61064c5760405162461bcd60e51b81526004016103cd90610df4565b6001600160a01b0382166106725760405162461bcd60e51b81526004016103cd90610e86565b6001600160a01b0383811660009081526002602052604090205416156106f65760405162461bcd60e51b815260206004820152603360248201527f6964656e7469747920636f6e747261637420616c7265616479206578697374736044820152722c20706c65617365207573652075706461746560681b60648201526084016103cd565b6001600160a01b0383811660008181526002602052604080822080549487166001600160b01b03199095168517600160a01b61ffff881602179055517e30dea7e9c9afaa2e3c9810f2fc9b5181f1bad74ca5a8db85f746a33585e7479190a3505050565b606060038054806020026020016040519081016040528092919081815260200182805480156107b257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610794575b5050505050905090565b6107c53361026d565b6107e15760405162461bcd60e51b81526004016103cd90610df4565b6001600160a01b03818116600090815260026020526040902054166108575760405162461bcd60e51b815260206004820152602660248201527f796f7520686176656e2774207265676973746572656420616e206964656e74696044820152651d1e481e595d60d21b60648201526084016103cd565b6001600160a01b03811660008181526002602052604080822080546001600160b01b0319169055519091907fca6a4c3370b859312246e7f086284076e557997e10d856b716c23ab67067790b908390a350565b6108b33361026d565b6108cf5760405162461bcd60e51b81526004016103cd90610df4565b6001600160a01b03828116600090815260026020526040902054166109065760405162461bcd60e51b81526004016103cd90610e42565b6001600160a01b03811661092c5760405162461bcd60e51b81526004016103cd90610e86565b6001600160a01b0380831660009081526002602052604080822080548585166001600160a01b031982168117909255915191909316929183917f556ce885dfcea52155c773f1ed2e58781c51945c13030ab8f793c61f51d1b8089190a3505050565b610996610a87565b6001600160a01b0381166109fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103cd565b61029181610ae6565b60006001600160a01b038216610a675760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b60648201526084016103cd565b506001600160a01b03166000908152602091909152604090205460ff1690565b33610a90610373565b6001600160a01b0316146103275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103cd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610b408282610a04565b15610b8d5760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650060448201526064016103cd565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b610bbc8282610a04565b610c125760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b60648201526084016103cd565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b038116811461029157600080fd5b600060208284031215610c5b57600080fd5b8135610c6681610c34565b9392505050565b803561ffff81168114610c7f57600080fd5b919050565b60008060408385031215610c9757600080fd5b8235610ca281610c34565b9150610cb060208401610c6d565b90509250929050565b600080600060608486031215610cce57600080fd5b8335610cd981610c34565b92506020840135610ce981610c34565b9150610cf760408501610c6d565b90509250925092565b6020808252825182820181905260009190848201906040850190845b81811015610d415783516001600160a01b031683529284019291840191600101610d1c565b50909695505050505050565b60008060408385031215610d6057600080fd5b8235610d6b81610c34565b91506020830135610d7b81610c34565b809150509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561027a5761027a610d9c565b634e487b7160e01b600052603160045260246000fd5b600060018201610ded57610ded610d9c565b5060010190565b6020808252602e908201527f4167656e74526f6c653a2063616c6c657220646f6573206e6f7420686176652060408201526d746865204167656e7420726f6c6560901b606082015260800190565b60208082526024908201527f74686973207573657220686173206e6f206964656e7469747920726567697374604082015263195c995960e21b606082015260800190565b60208082526028908201527f636f6e747261637420616464726573732063616e27742062652061207a65726f604082015267206164647265737360c01b60608201526080019056fea264697066735822122009edceadcb2451f3037e223ade026e82e665d80757b1616e1eddae8e0e637bb264736f6c63430008110033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610c258061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100995760003560e01c806304bc7e841461009e57806334a89987146100b3578063715018a6146100db5780638da5cb5b146100e35780639f63ea9814610103578063b93d28eb14610116578063c28fb27814610129578063d9dd24c514610149578063e36dce281461015e578063ef2ed1a414610171578063f2fde38b14610184575b600080fd5b6100b16100ac3660046109b6565b610197565b005b6100c66100c1366004610a3d565b610297565b60405190151581526020015b60405180910390f35b6100b1610357565b6100eb61036b565b6040516001600160a01b0390911681526020016100d2565b6100b16101113660046109b6565b61037a565b6100b1610124366004610a69565b6104de565b61013c610137366004610a69565b61067c565b6040516100d29190610a8d565b61015161071f565b6040516100d29190610ad1565b6100b161016c366004610a69565b610781565b6100c661017f366004610a69565b610795565b6100b1610192366004610a69565b610802565b61019f610878565b6001600160a01b03831660009081526002602052604081205490036101df5760405162461bcd60e51b81526004016101d690610b12565b60405180910390fd5b8061022b5760405162461bcd60e51b815260206004820152601c60248201527b636c61696d20746f706963732063616e6e6f7420626520656d70747960201b60448201526064016101d6565b6001600160a01b038316600090815260026020526040902061024e908383610927565b50826001600160a01b03167fec753cfc52044f61676f18a11e500093a9f2b1cd5e4942bc476f2b0438159bcf838360405161028a929190610b48565b60405180910390a2505050565b6001600160a01b03821660009081526002602090815260408083208054825181850281018501909352808352928492919084908301828280156102f957602002820191906000526020600020905b8154815260200190600101908083116102e5575b5050505050905060005b82811015610349578482828151811061031e5761031e610b81565b6020026020010151036103375760019350505050610351565b8061034181610bad565b915050610303565b506000925050505b92915050565b61035f610878565b61036960006108d7565b565b6000546001600160a01b031690565b610382610878565b6001600160a01b038316600090815260026020526040902054156103e85760405162461bcd60e51b815260206004820152601d60248201527f747275737465642049737375657220616c72656164792065786973747300000060448201526064016101d6565b806104415760405162461bcd60e51b8152602060048201526024808201527f7472757374656420636c61696d20746f706963732063616e6e6f7420626520656044820152636d70747960e01b60648201526084016101d6565b600180548082019091557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b03851690811790915560009081526002602052604090206104a2908383610927565b50826001600160a01b03167ffedc33fd34859594822c0ff6f3f4f9fc279cc6d5cae53068f706a088e4500872838360405161028a929190610b48565b6104e6610878565b6001600160a01b038116600090815260026020526040812054900361051d5760405162461bcd60e51b81526004016101d690610b12565b60015460005b8181101561062257826001600160a01b03166001828154811061054857610548610b81565b6000918252602090912001546001600160a01b03160361061057600161056e8184610bc6565b8154811061057e5761057e610b81565b600091825260209091200154600180546001600160a01b0390921691839081106105aa576105aa610b81565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060018054806105e9576105e9610bd9565b600082815260209020810160001990810180546001600160a01b0319169055019055610622565b8061061a81610bad565b915050610523565b506001600160a01b038216600090815260026020526040812061064491610972565b6040516001600160a01b038316907f2214ded40113cc3fb63fc206cafee88270b0a903dac7245d54efdde30ebb032190600090a25050565b6001600160a01b038116600090815260026020526040812054606091036106b55760405162461bcd60e51b81526004016101d690610b12565b6001600160a01b0382166000908152600260209081526040918290208054835181840281018401909452808452909183018282801561071357602002820191906000526020600020905b8154815260200190600101908083116106ff575b50505050509050919050565b6060600180548060200260200160405190810160405280929190818152602001828054801561077757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610759575b5050505050905090565b610789610878565b61079281610802565b50565b600154600090815b818110156107f857836001600160a01b0316600182815481106107c2576107c2610b81565b6000918252602090912001546001600160a01b0316036107e6575060019392505050565b806107f081610bad565b91505061079d565b5060009392505050565b61080a610878565b6001600160a01b03811661086f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101d6565b610792816108d7565b3361088161036b565b6001600160a01b0316146103695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054828255906000526020600020908101928215610962579160200282015b82811115610962578235825591602001919060010190610947565b5061096e92915061098c565b5090565b508054600082559060005260206000209081019061079291905b5b8082111561096e576000815560010161098d565b6001600160a01b038116811461079257600080fd5b6000806000604084860312156109cb57600080fd5b83356109d6816109a1565b925060208401356001600160401b03808211156109f257600080fd5b818601915086601f830112610a0657600080fd5b813581811115610a1557600080fd5b8760208260051b8501011115610a2a57600080fd5b6020830194508093505050509250925092565b60008060408385031215610a5057600080fd5b8235610a5b816109a1565b946020939093013593505050565b600060208284031215610a7b57600080fd5b8135610a86816109a1565b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610ac557835183529284019291840191600101610aa9565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610ac55783516001600160a01b031683529284019291840191600101610aed565b6020808252601c908201527b1d1c9d5cdd195908125cdcdd595c88191bd95cdb89dd08195e1a5cdd60221b604082015260600190565b6020808252810182905260006001600160fb1b03831115610b6857600080fd5b8260051b80856040850137919091016040019392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201610bbf57610bbf610b97565b5060010190565b8181038181111561035157610351610b97565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220139504a27f83c102617d3e819ffa688d5017e003b7b379771d195c703df093f464736f6c63430008110033a26469706673582212204772bf0cb49a8ae232d9929b977792ac7e08e3eea519c004833659d000934c0264736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c80634f3428ee1461006757806354174040146100965780635d4b2d121461009e578063820d385e146100a65780638da5cb5b146100ae578063c1c7ee40146100c1575b600080fd5b61007a6100753660046101d6565b6100c9565b6040516001600160a01b03909116815260200160405180910390f35b61007a61011f565b61007a61014f565b61007a61015d565b60005461007a906001600160a01b031681565b61007a61016b565b60008383836040516100da90610179565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610116573d6000803e3d6000fd5b50949350505050565b600060405161012d90610186565b604051809103906000f080158015610149573d6000803e3d6000fd5b50905090565b600060405161012d90610193565b600060405161012d906101a0565b600060405161012d906101ad565b611a468061021a83390190565b61065080611c6083390190565b6107d7806122b083390190565b610f8280612a8783390190565b610ca380613a0983390190565b80356001600160a01b03811681146101d157600080fd5b919050565b6000806000606084860312156101eb57600080fd5b6101f4846101ba565b9250610202602085016101ba565b9150610210604085016101ba565b9050925092509256fe60806040523480156200001157600080fd5b5060405162001a4638038062001a46833981016040819052620000349162000181565b6200003f3362000114565b600280546001600160a01b038085166001600160a01b031992831681179093556003805487831690841617905560048054918516919092161790556040517f7170bf15b246e880b2369cd7c67d057760d8a35149e8c64dde91efa22bcc76d090600090a26040516001600160a01b038416907f1b98cb79e6f73020175fe87333f1b91ad6a881519c0afe30340c2599b2b4bde090600090a26040516001600160a01b038216907f2fa8b95c1db7afe99e3398f3792f008135cedc1fa26b0bb2ecd2352cd166d53c90600090a2505050620001cb565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200017c57600080fd5b919050565b6000806000606084860312156200019757600080fd5b620001a28462000164565b9250620001b26020850162000164565b9150620001c26040850162000164565b90509250925092565b61186b80620001db6000396000f3fe608060405234801561001057600080fd5b50600436106101285760003560e01c80631ffbb0641461012d57806326d941ae146101555780633b239a7f1461016a5780633b3e12f41461017d578063454a03e01461019757806350bc7bda146101aa5780635dbe47e8146101bd5780635e5741f3146101d0578063653dc9f1146101e3578063670af6a9146101f6578063715018a6146102095780637e42683b1461021157806384e79842146102375780638da5cb5b1461024a5780638e098ca11461025257806397a6278e14610265578063a8d29d1d14610278578063b4f3fcb71461028b578063b9209e331461029c578063ce240d9c146102af578063e744d789146102c2578063f0eb5e54146102d5578063f11abfd8146102e8578063f2fde38b146102f9575b600080fd5b61014061013b366004611269565b61030c565b60405190151581526020015b60405180910390f35b610168610163366004611269565b61031f565b005b61016861017836600461129d565b610371565b6002546001600160a01b03165b60405161014c91906112d6565b6101686101a53660046112ea565b610448565b6101686101b8366004611269565b61051d565b6101406101cb366004611269565b610529565b6101686101de366004611269565b610553565b6101686101f1366004611380565b61055c565b610168610204366004611269565b6105fa565b61016861064c565b61022461021f366004611269565b610660565b60405161ffff909116815260200161014c565b610168610245366004611269565b6106d3565b61018a61071d565b610168610260366004611419565b61072c565b610168610273366004611269565b610804565b610168610286366004611269565b61084e565b6003546001600160a01b031661018a565b6101406102aa366004611269565b61091f565b6101686102bd366004611269565b610ed8565b6101686102d0366004611269565b610ee9565b61018a6102e3366004611269565b610f3b565b6004546001600160a01b031661018a565b610168610307366004611269565b610fae565b6000610319600183611024565b92915050565b6103276110a7565b600480546001600160a01b0319166001600160a01b0383169081179091556040517f2fa8b95c1db7afe99e3398f3792f008135cedc1fa26b0bb2ecd2352cd166d53c90600090a250565b61037a3361030c565b61039f5760405162461bcd60e51b815260040161039690611447565b60405180910390fd5b60048054604051639f3418d560e01b81526001600160a01b038581169382019390935261ffff84166024820152911690639f3418d590604401600060405180830381600087803b1580156103f257600080fd5b505af1158015610406573d6000803e3d6000fd5b505060405161ffff841692506001600160a01b03851691507f04ed3b726495c2dca1ff1215d9ca54e1a4030abb5e82b0f6ce55702416cee85390600090a35050565b6104513361030c565b61046d5760405162461bcd60e51b815260040161039690611447565b6004805460405163a53410dd60e01b81526001600160a01b0386811693820193909352848316602482015261ffff8416604482015291169063a53410dd90606401600060405180830381600087803b1580156104c857600080fd5b505af11580156104dc573d6000803e3d6000fd5b50506040516001600160a01b038086169350861691507f6ae73635c50d24a45af6fbd5e016ac4bed179addbc8bf24e04ff0fcc6d33af1990600090a3505050565b610526816106d3565b50565b60008061053583610f3b565b6001600160a01b03160361054b57506000919050565b506001919050565b61052681610804565b60005b858110156105f1576105df87878381811061057c5761057c611495565b90506020020160208101906105919190611269565b8686848181106105a3576105a3611495565b90506020020160208101906105b89190611269565b8585858181106105ca576105ca611495565b90506020020160208101906101a591906114ab565b806105e9816114de565b91505061055f565b50505050505050565b6106026110a7565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f7170bf15b246e880b2369cd7c67d057760d8a35149e8c64dde91efa22bcc76d090600090a250565b6106546110a7565b61065e6000611106565b565b60048054604051631c9f84ef60e21b81526000926001600160a01b039092169163727e13bc91610692918691016112d6565b602060405180830381865afa1580156106af573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061031991906114f7565b6106db6110a7565b6106e6600182611156565b6040516001600160a01b038216907ff68e73cec97f2d70aa641fb26e87a4383686e2efacb648f2165aeb02ac562ec590600090a250565b6000546001600160a01b031690565b6107353361030c565b6107515760405162461bcd60e51b815260040161039690611447565b600061075c83610f3b565b60048054604051637402e7c360e11b81526001600160a01b03878116938201939093528583166024820152929350169063e805cf8690604401600060405180830381600087803b1580156107af57600080fd5b505af11580156107c3573d6000803e3d6000fd5b50506040516001600160a01b038086169350841691507fe98082932c8056a0f514da9104e4a66bc2cbaef102ad59d90c4b24220ebf601090600090a3505050565b61080c6110a7565b6108176001826111d2565b6040516001600160a01b038216907fed9c8ad8d5a0a66898ea49d2956929c93ae2e8bd50281b2ed897c5d1a6737e0b90600090a250565b6108573361030c565b6108735760405162461bcd60e51b815260040161039690611447565b6004805460405163cf191bcd60e01b81526001600160a01b039091169163cf191bcd916108a2918591016112d6565b600060405180830381600087803b1580156108bc57600080fd5b505af11580156108d0573d6000803e3d6000fd5b505050506108dd81610f3b565b6001600160a01b0316816001600160a01b03167f59d6590e225b81befe259af056324092801080acbb7feab310eb34678871f32760405160405180910390a350565b60008061092b83610f3b565b6001600160a01b03160361094157506000919050565b600254604080516337c2758160e21b815290516000926001600160a01b03169163df09d60491600480830192869291908290030181865afa15801561098a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109b2919081019061157d565b905080516000036109c65750600192915050565b600080600060608060005b8651811015610ec95760006109e58a610f3b565b6001600160a01b03166380e9e9e1898481518110610a0557610a05611495565b60200260200101516040518263ffffffff1660e01b8152600401610a2b91815260200190565b600060405180830381865afa158015610a48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a70919081019061157d565b90508051600003610a8b575060009998505050505050505050565b60005b8151811015610eb457610aa08b610f3b565b6001600160a01b031663c9100bcb838381518110610ac057610ac0611495565b60200260200101516040518263ffffffff1660e01b8152600401610ae691815260200190565b600060405180830381865afa158015610b03573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b2b91908101906116a4565b50939b509199509750955093506001600160a01b03861663c0969a6e610b508d610f3b565b8b8681518110610b6257610b62611495565b602002602001015188886040518563ffffffff1660e01b8152600401610b8b9493929190611791565b602060405180830381865afa925050508015610bc4575060408051601f3d908101601f19168201909252610bc1918101906117ca565b60015b610bf25760018251610bd691906117ec565b8103610bed575060009a9950505050505050505050565b610ea2565b808015610c8b57506003548a516001600160a01b03909116906334a899879089908d9088908110610c2557610c25611495565b60200260200101516040518363ffffffff1660e01b8152600401610c4a9291906117ff565b602060405180830381865afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8b91906117ca565b8015610d035750600354604051633bcbb46960e21b81526001600160a01b039091169063ef2ed1a490610cc2908a906004016112d6565b602060405180830381865afa158015610cdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0391906117ca565b15610d0d57825191505b600354604051633bcbb46960e21b81526001600160a01b039091169063ef2ed1a490610d3d908a906004016112d6565b602060405180830381865afa158015610d5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7e91906117ca565b158015610d97575060018351610d9491906117ec565b82145b15610dae575060009b9a5050505050505050505050565b6003548a516001600160a01b03909116906334a899879089908d9088908110610dd957610dd9611495565b60200260200101516040518363ffffffff1660e01b8152600401610dfe9291906117ff565b602060405180830381865afa158015610e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3f91906117ca565b158015610e58575060018351610e5591906117ec565b82145b15610e6f575060009b9a5050505050505050505050565b80158015610e89575060018351610e8691906117ec565b82145b15610ea0575060009b9a5050505050505050505050565b505b80610eac816114de565b915050610a8e565b50508080610ec1906114de565b9150506109d1565b50600198975050505050505050565b610ee06110a7565b61052681610fae565b610ef16110a7565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f1b98cb79e6f73020175fe87333f1b91ad6a881519c0afe30340c2599b2b4bde090600090a250565b60048054604051637988d3a560e01b81526000926001600160a01b0390921691637988d3a591610f6d918691016112d6565b602060405180830381865afa158015610f8a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103199190611818565b610fb66110a7565b6001600160a01b03811661101b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610396565b61052681611106565b60006001600160a01b0382166110875760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b6064820152608401610396565b506001600160a01b03166000908152602091909152604090205460ff1690565b336110b061071d565b6001600160a01b03161461065e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610396565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6111608282611024565b156111ad5760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006044820152606401610396565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6111dc8282611024565b6112325760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b6064820152608401610396565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b038116811461052657600080fd5b60006020828403121561127b57600080fd5b813561128681611254565b9392505050565b61ffff8116811461052657600080fd5b600080604083850312156112b057600080fd5b82356112bb81611254565b915060208301356112cb8161128d565b809150509250929050565b6001600160a01b0391909116815260200190565b6000806000606084860312156112ff57600080fd5b833561130a81611254565b9250602084013561131a81611254565b9150604084013561132a8161128d565b809150509250925092565b60008083601f84011261134757600080fd5b5081356001600160401b0381111561135e57600080fd5b6020830191508360208260051b850101111561137957600080fd5b9250929050565b6000806000806000806060878903121561139957600080fd5b86356001600160401b03808211156113b057600080fd5b6113bc8a838b01611335565b909850965060208901359150808211156113d557600080fd5b6113e18a838b01611335565b909650945060408901359150808211156113fa57600080fd5b5061140789828a01611335565b979a9699509497509295939492505050565b6000806040838503121561142c57600080fd5b823561143781611254565b915060208301356112cb81611254565b6020808252602e908201527f4167656e74526f6c653a2063616c6c657220646f6573206e6f7420686176652060408201526d746865204167656e7420726f6c6560901b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156114bd57600080fd5b81356112868161128d565b634e487b7160e01b600052601160045260246000fd5b6000600182016114f0576114f06114c8565b5060010190565b60006020828403121561150957600080fd5b81516112868161128d565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561155257611552611514565b604052919050565b60006001600160401b0382111561157357611573611514565b5060051b60200190565b6000602080838503121561159057600080fd5b82516001600160401b038111156115a657600080fd5b8301601f810185136115b757600080fd5b80516115ca6115c58261155a565b61152a565b81815260059190911b820183019083810190878311156115e957600080fd5b928401925b82841015611607578351825292840192908401906115ee565b979650505050505050565b60005b8381101561162d578181015183820152602001611615565b50506000910152565b60006001600160401b0383111561164f5761164f611514565b611662601f8401601f191660200161152a565b905082815283838301111561167657600080fd5b611286836020830184611612565b600082601f83011261169557600080fd5b61128683835160208501611636565b60008060008060008060c087890312156116bd57600080fd5b865195506020870151945060408701516116d681611254565b60608801519094506001600160401b03808211156116f357600080fd5b6116ff8a838b01611684565b9450608089015191508082111561171557600080fd5b6117218a838b01611684565b935060a089015191508082111561173757600080fd5b508701601f8101891361174957600080fd5b61175889825160208401611636565b9150509295509295509295565b6000815180845261177d816020860160208601611612565b601f01601f19169290920160200192915050565b60018060a01b03851681528360208201526080604082015260006117b86080830185611765565b82810360608401526116078185611765565b6000602082840312156117dc57600080fd5b8151801515811461128657600080fd5b81810381811115610319576103196114c8565b6001600160a01b03929092168252602082015260400190565b60006020828403121561182a57600080fd5b81516112868161125456fea26469706673582212207ee5ed5cffd617d877c97c9e8194bc9f310fff132e95ae4c4c4c3076fbaa2e2164736f6c63430008110033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6105d28061007e6000396000f3fe608060405234801561001057600080fd5b506004361061006d5760003560e01c80630829784614610072578063715018a6146100875780638da5cb5b1461008f578063c7b22551146100b4578063d5144472146100c7578063df09d604146100da578063f2fde38b146100ef575b600080fd5b61008561008036600461049b565b610102565b005b6100856101f2565b610097610206565b6040516001600160a01b0390911681526020015b60405180910390f35b6100856100c236600461049b565b610215565b6100856100d53660046104b4565b61030a565b6100e261031e565b6040516100ab91906104e4565b6100856100fd3660046104b4565b610376565b61010a6103ec565b60015460005b818110156101ed57826001828154811061012c5761012c610528565b9060005260206000200154036101db5760016101488184610554565b8154811061015857610158610528565b90600052602060002001546001828154811061017657610176610528565b60009182526020909120015560018054806101935761019361056d565b60019003818190600052602060002001600090559055827f0b1381093c776453c1bbe54fd68be1b235c65db61d099cb50d194b2991e0eec560405160405180910390a2505050565b806101e581610583565b915050610110565b505050565b6101fa6103ec565b610204600061044b565b565b6000546001600160a01b031690565b61021d6103ec565b60015460005b818110156102aa57826001828154811061023f5761023f610528565b9060005260206000200154036102985760405162461bcd60e51b8152602060048201526019602482015278636c61696d546f70696320616c72656164792065786973747360381b60448201526064015b60405180910390fd5b806102a281610583565b915050610223565b5060018054808201825560009182527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60183905560405183917f01c928b7f7ade2949e92366aa9454dbef3a416b731cf6ec786ba9595bbd814d691a25050565b6103126103ec565b61031b81610376565b50565b6060600180548060200260200160405190810160405280929190818152602001828054801561036c57602002820191906000526020600020905b815481526020019060010190808311610358575b5050505050905090565b61037e6103ec565b6001600160a01b0381166103e35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161028f565b61031b8161044b565b336103f5610206565b6001600160a01b0316146102045760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156104ad57600080fd5b5035919050565b6000602082840312156104c657600080fd5b81356001600160a01b03811681146104dd57600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b8181101561051c57835183529284019291840191600101610500565b50909695505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156105675761056761053e565b92915050565b634e487b7160e01b600052603160045260246000fd5b6000600182016105955761059561053e565b506001019056fea2646970667358221220a78a451c1b3d166bef39ca48e02f82b4494847fc7fe085f9a619d95f9a4fb1aa64736f6c63430008110033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6107598061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100ba5760003560e01c8063346531fa146100bf5780633ff5aa021461010057806340db3b50146101155780635f8dead314610128578063715018a61461013a5780637bcf0487146101425780638baf29b4146101555780638d2ea772146101285780638da5cb5b14610168578063993e8b951461017d578063cdde2932146101a9578063e46638e6146101bc578063f2fde38b146101d3578063ff3e6954146101e6575b600080fd5b6100eb6100cd366004610687565b6001600160a01b031660009081526001602052604090205460ff1690565b60405190151581526020015b60405180910390f35b61011361010e366004610687565b6101f9565b005b610113610123366004610687565b6102cb565b6101136101363660046106a9565b5050565b610113610389565b610113610150366004610687565b61039d565b6101136101633660046106d3565b505050565b6101706103b1565b6040516100f7919061070f565b6100eb61018b366004610687565b6001600160a01b031660009081526002602052604090205460ff1690565b6101136101b7366004610687565b6103c0565b6100eb6101ca3660046106d3565b60019392505050565b6101136101e1366004610687565b610480565b6101136101f4366004610687565b6104f6565b6102016105bc565b6001600160a01b03811660009081526002602052604090205460ff161561026d5760405162461bcd60e51b815260206004820152601b60248201527a151a1a5cc81d1bdad95b881a5cc8185b1c9958591e48189bdd5b99602a1b60448201526064015b60405180910390fd5b6001600160a01b03811660009081526002602052604090819020805460ff19166001179055517f2de35142b19ed5a07796cf30791959c592018f70b1d2d7c460eef8ffe713692b906102c090839061070f565b60405180910390a150565b6102d36105bc565b6001600160a01b03811660009081526002602052604090205460ff166103395760405162461bcd60e51b815260206004820152601b60248201527a151a1a5cc81d1bdad95b881a5cc81b9bdd08189bdd5b99081e595d602a1b6044820152606401610264565b6001600160a01b03811660009081526002602052604090819020805460ff19169055517f28a4ca7134a3b3f9aff286e79ad3daadb4a06d1b43d037a3a98bdc074edd9b7a906102c090839061070f565b6103916105bc565b61039b600061061b565b565b6103a56105bc565b6103ae81610480565b50565b6000546001600160a01b031690565b6103c86105bc565b6001600160a01b03811660009081526001602052604090205460ff166104305760405162461bcd60e51b815260206004820181905260248201527f54686973204167656e74206973206e6f742072656769737465726564207965746044820152606401610264565b6001600160a01b03811660009081526001602052604090819020805460ff19169055517f6a659bb87bb23efbdc295f8eed8ae8c4379bfb77660ced2ef0f3d7d26b05c6a6906102c090839061070f565b6104886105bc565b6001600160a01b0381166104ed5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610264565b6103ae8161061b565b6104fe6105bc565b6001600160a01b03811660009081526001602052604090205460ff16156105675760405162461bcd60e51b815260206004820181905260248201527f54686973204167656e7420697320616c726561647920726567697374657265646044820152606401610264565b6001600160a01b038116600090815260016020819052604091829020805460ff19169091179055517fd62c45e13ac30396aceb3ad37c89bd1ba9048032fe61679000e92eb93dbfd67d906102c090839061070f565b336105c56103b1565b6001600160a01b03161461039b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610264565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461068257600080fd5b919050565b60006020828403121561069957600080fd5b6106a28261066b565b9392505050565b600080604083850312156106bc57600080fd5b6106c58361066b565b946020939093013593505050565b6000806000606084860312156106e857600080fd5b6106f18461066b565b92506106ff6020850161066b565b9150604084013590509250925092565b6001600160a01b039190911681526020019056fea2646970667358221220a07950ac50d69eda6d9047a66840e329950d44170805982a8421f7a81637ad5c64736f6c63430008110033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f048061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100d05760003560e01c80631ffbb064146100d55780635ccbbe49146100fd578063690a49f914610112578063715018a614610125578063727e13bc1461012d5780637988d3a51461017457806384e79842146101b85780638da5cb5b146101cb57806397a012f7146101d357806397a6278e146101e65780639f3418d5146101f9578063a53410dd1461020c578063bf9eb9591461021f578063cf191bcd14610234578063e805cf8614610247578063f2fde38b1461025a575b600080fd5b6100e86100e3366004610c49565b61026d565b60405190151581526020015b60405180910390f35b61011061010b366004610c49565b610280565b005b610110610120366004610c49565b610294565b610110610315565b61016161013b366004610c49565b6001600160a01b0316600090815260026020526040902054600160a01b900461ffff1690565b60405161ffff90911681526020016100f4565b6101a0610182366004610c49565b6001600160a01b039081166000908152600260205260409020541690565b6040516001600160a01b0390911681526020016100f4565b6101106101c6366004610c49565b610329565b6101a0610373565b6101106101e1366004610c49565b610382565b6101106101f4366004610c49565b61051e565b610110610207366004610c84565b610568565b61011061021a366004610cb9565b610627565b61022761075a565b6040516100f49190610d00565b610110610242366004610c49565b6107bc565b610110610255366004610d4d565b6108aa565b610110610268366004610c49565b61098e565b600061027a600183610a04565b92915050565b610288610a87565b6102918161098e565b50565b61029d81610329565b6003805460018101825560009182527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b03841690811790915560405190917f500c250171aa20e861b680f93502547b9d436eda7d4c537fc360db6e0c6eedfb91a250565b61031d610a87565b6103276000610ae6565b565b610331610a87565b61033c600182610b36565b6040516001600160a01b038216907ff68e73cec97f2d70aa641fb26e87a4383686e2efacb648f2165aeb02ac562ec590600090a250565b6000546001600160a01b031690565b6003546103d65760405162461bcd60e51b815260206004820152601f60248201527f6964656e74697479207265676973747279206973206e6f742073746f7265640060448201526064015b60405180910390fd5b60035460005b818110156104dc57826001600160a01b03166003828154811061040157610401610d86565b6000918252602090912001546001600160a01b0316036104ca576003610428600184610db2565b8154811061043857610438610d86565b600091825260209091200154600380546001600160a01b03909216918390811061046457610464610d86565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060038054806104a3576104a3610dc5565b600082815260209020810160001990810180546001600160a01b03191690550190556104dc565b806104d481610ddb565b9150506103dc565b506104e68261051e565b6040516001600160a01b038316907f51f353eb5801583fdf2706e43c045b62fdf6b1566820b349390616363ecf72c990600090a25050565b610526610a87565b610531600182610bb2565b6040516001600160a01b038216907fed9c8ad8d5a0a66898ea49d2956929c93ae2e8bd50281b2ed897c5d1a6737e0b90600090a250565b6105713361026d565b61058d5760405162461bcd60e51b81526004016103cd90610df4565b6001600160a01b03828116600090815260026020526040902054166105c45760405162461bcd60e51b81526004016103cd90610e42565b6001600160a01b038216600081815260026020526040808220805461ffff60a01b1916600160a01b61ffff87169081029190911790915590519092917f20965fcdc6eed7ae398065b40ece4e732ba667992ca819fc54e80e9f2047c4cf91a35050565b6106303361026d565b61064c5760405162461bcd60e51b81526004016103cd90610df4565b6001600160a01b0382166106725760405162461bcd60e51b81526004016103cd90610e86565b6001600160a01b0383811660009081526002602052604090205416156106f65760405162461bcd60e51b815260206004820152603360248201527f6964656e7469747920636f6e747261637420616c7265616479206578697374736044820152722c20706c65617365207573652075706461746560681b60648201526084016103cd565b6001600160a01b0383811660008181526002602052604080822080549487166001600160b01b03199095168517600160a01b61ffff881602179055517e30dea7e9c9afaa2e3c9810f2fc9b5181f1bad74ca5a8db85f746a33585e7479190a3505050565b606060038054806020026020016040519081016040528092919081815260200182805480156107b257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610794575b5050505050905090565b6107c53361026d565b6107e15760405162461bcd60e51b81526004016103cd90610df4565b6001600160a01b03818116600090815260026020526040902054166108575760405162461bcd60e51b815260206004820152602660248201527f796f7520686176656e2774207265676973746572656420616e206964656e74696044820152651d1e481e595d60d21b60648201526084016103cd565b6001600160a01b03811660008181526002602052604080822080546001600160b01b0319169055519091907fca6a4c3370b859312246e7f086284076e557997e10d856b716c23ab67067790b908390a350565b6108b33361026d565b6108cf5760405162461bcd60e51b81526004016103cd90610df4565b6001600160a01b03828116600090815260026020526040902054166109065760405162461bcd60e51b81526004016103cd90610e42565b6001600160a01b03811661092c5760405162461bcd60e51b81526004016103cd90610e86565b6001600160a01b0380831660009081526002602052604080822080548585166001600160a01b031982168117909255915191909316929183917f556ce885dfcea52155c773f1ed2e58781c51945c13030ab8f793c61f51d1b8089190a3505050565b610996610a87565b6001600160a01b0381166109fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103cd565b61029181610ae6565b60006001600160a01b038216610a675760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b60648201526084016103cd565b506001600160a01b03166000908152602091909152604090205460ff1690565b33610a90610373565b6001600160a01b0316146103275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103cd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610b408282610a04565b15610b8d5760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650060448201526064016103cd565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b610bbc8282610a04565b610c125760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b60648201526084016103cd565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b038116811461029157600080fd5b600060208284031215610c5b57600080fd5b8135610c6681610c34565b9392505050565b803561ffff81168114610c7f57600080fd5b919050565b60008060408385031215610c9757600080fd5b8235610ca281610c34565b9150610cb060208401610c6d565b90509250929050565b600080600060608486031215610cce57600080fd5b8335610cd981610c34565b92506020840135610ce981610c34565b9150610cf760408501610c6d565b90509250925092565b6020808252825182820181905260009190848201906040850190845b81811015610d415783516001600160a01b031683529284019291840191600101610d1c565b50909695505050505050565b60008060408385031215610d6057600080fd5b8235610d6b81610c34565b91506020830135610d7b81610c34565b809150509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561027a5761027a610d9c565b634e487b7160e01b600052603160045260246000fd5b600060018201610ded57610ded610d9c565b5060010190565b6020808252602e908201527f4167656e74526f6c653a2063616c6c657220646f6573206e6f7420686176652060408201526d746865204167656e7420726f6c6560901b606082015260800190565b60208082526024908201527f74686973207573657220686173206e6f206964656e7469747920726567697374604082015263195c995960e21b606082015260800190565b60208082526028908201527f636f6e747261637420616464726573732063616e27742062652061207a65726f604082015267206164647265737360c01b60608201526080019056fea264697066735822122009edceadcb2451f3037e223ade026e82e665d80757b1616e1eddae8e0e637bb264736f6c63430008110033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610c258061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100995760003560e01c806304bc7e841461009e57806334a89987146100b3578063715018a6146100db5780638da5cb5b146100e35780639f63ea9814610103578063b93d28eb14610116578063c28fb27814610129578063d9dd24c514610149578063e36dce281461015e578063ef2ed1a414610171578063f2fde38b14610184575b600080fd5b6100b16100ac3660046109b6565b610197565b005b6100c66100c1366004610a3d565b610297565b60405190151581526020015b60405180910390f35b6100b1610357565b6100eb61036b565b6040516001600160a01b0390911681526020016100d2565b6100b16101113660046109b6565b61037a565b6100b1610124366004610a69565b6104de565b61013c610137366004610a69565b61067c565b6040516100d29190610a8d565b61015161071f565b6040516100d29190610ad1565b6100b161016c366004610a69565b610781565b6100c661017f366004610a69565b610795565b6100b1610192366004610a69565b610802565b61019f610878565b6001600160a01b03831660009081526002602052604081205490036101df5760405162461bcd60e51b81526004016101d690610b12565b60405180910390fd5b8061022b5760405162461bcd60e51b815260206004820152601c60248201527b636c61696d20746f706963732063616e6e6f7420626520656d70747960201b60448201526064016101d6565b6001600160a01b038316600090815260026020526040902061024e908383610927565b50826001600160a01b03167fec753cfc52044f61676f18a11e500093a9f2b1cd5e4942bc476f2b0438159bcf838360405161028a929190610b48565b60405180910390a2505050565b6001600160a01b03821660009081526002602090815260408083208054825181850281018501909352808352928492919084908301828280156102f957602002820191906000526020600020905b8154815260200190600101908083116102e5575b5050505050905060005b82811015610349578482828151811061031e5761031e610b81565b6020026020010151036103375760019350505050610351565b8061034181610bad565b915050610303565b506000925050505b92915050565b61035f610878565b61036960006108d7565b565b6000546001600160a01b031690565b610382610878565b6001600160a01b038316600090815260026020526040902054156103e85760405162461bcd60e51b815260206004820152601d60248201527f747275737465642049737375657220616c72656164792065786973747300000060448201526064016101d6565b806104415760405162461bcd60e51b8152602060048201526024808201527f7472757374656420636c61696d20746f706963732063616e6e6f7420626520656044820152636d70747960e01b60648201526084016101d6565b600180548082019091557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b03851690811790915560009081526002602052604090206104a2908383610927565b50826001600160a01b03167ffedc33fd34859594822c0ff6f3f4f9fc279cc6d5cae53068f706a088e4500872838360405161028a929190610b48565b6104e6610878565b6001600160a01b038116600090815260026020526040812054900361051d5760405162461bcd60e51b81526004016101d690610b12565b60015460005b8181101561062257826001600160a01b03166001828154811061054857610548610b81565b6000918252602090912001546001600160a01b03160361061057600161056e8184610bc6565b8154811061057e5761057e610b81565b600091825260209091200154600180546001600160a01b0390921691839081106105aa576105aa610b81565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060018054806105e9576105e9610bd9565b600082815260209020810160001990810180546001600160a01b0319169055019055610622565b8061061a81610bad565b915050610523565b506001600160a01b038216600090815260026020526040812061064491610972565b6040516001600160a01b038316907f2214ded40113cc3fb63fc206cafee88270b0a903dac7245d54efdde30ebb032190600090a25050565b6001600160a01b038116600090815260026020526040812054606091036106b55760405162461bcd60e51b81526004016101d690610b12565b6001600160a01b0382166000908152600260209081526040918290208054835181840281018401909452808452909183018282801561071357602002820191906000526020600020905b8154815260200190600101908083116106ff575b50505050509050919050565b6060600180548060200260200160405190810160405280929190818152602001828054801561077757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610759575b5050505050905090565b610789610878565b61079281610802565b50565b600154600090815b818110156107f857836001600160a01b0316600182815481106107c2576107c2610b81565b6000918252602090912001546001600160a01b0316036107e6575060019392505050565b806107f081610bad565b91505061079d565b5060009392505050565b61080a610878565b6001600160a01b03811661086f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101d6565b610792816108d7565b3361088161036b565b6001600160a01b0316146103695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054828255906000526020600020908101928215610962579160200282015b82811115610962578235825591602001919060010190610947565b5061096e92915061098c565b5090565b508054600082559060005260206000209081019061079291905b5b8082111561096e576000815560010161098d565b6001600160a01b038116811461079257600080fd5b6000806000604084860312156109cb57600080fd5b83356109d6816109a1565b925060208401356001600160401b03808211156109f257600080fd5b818601915086601f830112610a0657600080fd5b813581811115610a1557600080fd5b8760208260051b8501011115610a2a57600080fd5b6020830194508093505050509250925092565b60008060408385031215610a5057600080fd5b8235610a5b816109a1565b946020939093013593505050565b600060208284031215610a7b57600080fd5b8135610a86816109a1565b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610ac557835183529284019291840191600101610aa9565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610ac55783516001600160a01b031683529284019291840191600101610aed565b6020808252601c908201527b1d1c9d5cdd195908125cdcdd595c88191bd95cdb89dd08195e1a5cdd60221b604082015260600190565b6020808252810182905260006001600160fb1b03831115610b6857600080fd5b8260051b80856040850137919091016040019392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201610bbf57610bbf610b97565b5060010190565b8181038181111561035157610351610b97565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220139504a27f83c102617d3e819ffa688d5017e003b7b379771d195c703df093f464736f6c63430008110033a26469706673582212204772bf0cb49a8ae232d9929b977792ac7e08e3eea519c004833659d000934c0264736f6c63430008110033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:1125:54",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:54",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "63:124:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "73:29:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "95:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "82:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "82:20:54"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "73:5:54"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "165:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "174:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "177:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "167:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "167:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "167:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "124:5:54"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "135:5:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "150:3:54",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "155:1:54",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "146:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "146:11:54"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "159:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "142:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "142:19:54"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "131:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "131:31:54"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "121:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "121:42:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "114:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "114:50:54"
                  },
                  "nodeType": "YulIf",
                  "src": "111:70:54"
                }
              ]
            },
            "name": "abi_decode_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "42:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "53:5:54",
                "type": ""
              }
            ],
            "src": "14:173:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "296:230:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "342:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "351:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "354:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "344:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "344:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "344:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "317:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "326:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "313:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "313:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "338:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "309:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "309:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "306:52:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "367:39:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "396:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "377:18:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "377:29:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "367:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "415:48:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "448:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "459:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "444:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "444:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "425:18:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "425:38:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "415:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "472:48:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "505:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "516:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "501:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "501:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "482:18:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "482:38:54"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "472:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_addresst_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "246:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "257:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "269:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "277:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "285:6:54",
                "type": ""
              }
            ],
            "src": "192:334:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "632:102:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "642:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "654:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "665:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "650:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "650:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "642:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "684:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "699:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "715:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "720:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "711:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "711:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "724:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "707:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "707:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "695:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "695:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "677:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "677:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "677:51:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "601:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "612:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "623:4:54",
                "type": ""
              }
            ],
            "src": "531:203:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "896:227:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "906:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "918:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "929:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "914:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "914:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "906:4:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "941:29:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "959:3:54",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "964:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "955:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "955:11:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "968:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "951:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "951:19:54"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "945:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "986:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "1001:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "1009:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "997:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "997:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "979:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "979:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "979:34:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1033:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1044:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1029:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1029:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "1053:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "1061:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "1049:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1049:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1022:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1022:43:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1022:43:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1085:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1096:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1081:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1081:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "1105:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "1113:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "1101:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1101:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1074:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1074:43:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1074:43:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "849:9:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "860:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "868:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "876:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "887:4:54",
                "type": ""
              }
            ],
            "src": "739:384:54"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := abi_decode_address(add(headStart, 64))\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    function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n}",
      "id": 54,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "319:937:27:-:0;;;382:49;;;;;;;;;-1:-1:-1;406:5:27;:18;;-1:-1:-1;;;;;;406:18:27;414:10;406:18;;;319:937;;;;;;",
  "deployedSourceMap": "319:937:27:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;829:310;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;695:32:54;;;677:51;;665:2;650:18;829:310:27;;;;;;;437:120;;;:::i;1145:109::-;;;:::i;695:128::-;;;:::i;355:20::-;;;;;-1:-1:-1;;;;;355:20:27;;;563:126;;;:::i;829:310::-;1004:7;1059:23;1084:20;1106:24;1038:93;;;;;:::i;:::-;-1:-1:-1;;;;;997:15:54;;;979:34;;1049:15;;;1044:2;1029:18;;1022:43;1101:15;;;1096:2;1081:18;;1074:43;929:2;914:18;1038:93:27;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1023:109:27;829:310;-1:-1:-1;;;;829:310:27:o;437:120::-;490:7;524:25;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;509:41;;437:120;:::o;1145:109::-;1189:7;1223:23;;;;;:::i;695:128::-;752:7;786:29;;;;;:::i;563:126::-;619:7;653:28;;;;;:::i;-1:-1:-1:-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;14:173:54:-;82:20;;-1:-1:-1;;;;;131:31:54;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:334::-;269:6;277;285;338:2;326:9;317:7;313:23;309:32;306:52;;;354:1;351;344:12;306:52;377:29;396:9;377:29;:::i;:::-;367:39;;425:38;459:2;448:9;444:18;425:38;:::i;:::-;415:48;;482:38;516:2;505:9;501:18;482:38;:::i;:::-;472:48;;192:334;;;;;:::o",
  "source": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.0;\n\nimport './registry/ClaimTopicsRegistry.sol';\nimport './registry/TrustedIssuersRegistry.sol';\nimport './registry/IdentityRegistryStorage.sol';\nimport './registry/IdentityRegistry.sol';\nimport './token/Token.sol';\nimport './compliance/DefaultCompliance.sol';\n\ncontract SecurityTokenManager {\n    address public owner;\n\n    constructor() {\n        owner = msg.sender;\n    }\n\n    function deployClaimTopicsRegistry() public returns (address) {\n        return address(new ClaimTopicsRegistry());\n    }\n\n    function deployTrustedIssuersRegistry() public returns (address) {\n        return address(new TrustedIssuersRegistry());\n    }\n\n    function deployIdentityRegistryStorage() public returns (address) {\n        return address(new IdentityRegistryStorage());\n    }\n\n    function deployIdentityRegistry(\n        address _trustedIssuersRegistry,\n        address _claimTopicsRegistry,\n        address _identityRegistryStorage\n    ) public returns (address) {\n        return address(new IdentityRegistry(_trustedIssuersRegistry, _claimTopicsRegistry, _identityRegistryStorage));\n    }\n\n    function deployCompliance() public returns (address) {\n        return address(new DefaultCompliance());\n    }\n}\n",
  "sourcePath": "/home/webxpert/workspace/shipfinex/latest-repos/tokenx_smartcontract/contracts/SecurityTokenManager.sol",
  "ast": {
    "absolutePath": "project:/contracts/SecurityTokenManager.sol",
    "exportedSymbols": {
      "AddressUpgradeable": [
        2350
      ],
      "AgentRole": [
        9120
      ],
      "AgentRoleUpgradeable": [
        9203
      ],
      "ClaimTopicsRegistry": [
        6406
      ],
      "Context": [
        3401
      ],
      "ContextUpgradeable": [
        2392
      ],
      "DefaultCompliance": [
        5489
      ],
      "IClaimIssuer": [
        1456
      ],
      "IClaimTopicsRegistry": [
        6444
      ],
      "ICompliance": [
        5596
      ],
      "IERC20": [
        3317
      ],
      "IERC734": [
        1609
      ],
      "IERC735": [
        1734
      ],
      "IIdentity": [
        1743
      ],
      "IIdentityRegistry": [
        6637
      ],
      "IIdentityRegistryStorage": [
        6759
      ],
      "IToken": [
        12234
      ],
      "ITrustedIssuersRegistry": [
        6856
      ],
      "IdentityRegistry": [
        7490
      ],
      "IdentityRegistryStorage": [
        7862
      ],
      "Initializable": [
        2107
      ],
      "Ownable": [
        2505
      ],
      "OwnableUpgradeable": [
        1956
      ],
      "Roles": [
        11901
      ],
      "SecurityTokenManager": [
        5003
      ],
      "Token": [
        13849
      ],
      "TokenStorage": [
        12284
      ],
      "TrustedIssuersRegistry": [
        8213
      ]
    },
    "id": 5004,
    "license": "GPL-3.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4906,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "36:23:27"
      },
      {
        "absolutePath": "project:/contracts/registry/ClaimTopicsRegistry.sol",
        "file": "./registry/ClaimTopicsRegistry.sol",
        "id": 4907,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 5004,
        "sourceUnit": 6407,
        "src": "61:44:27",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/registry/TrustedIssuersRegistry.sol",
        "file": "./registry/TrustedIssuersRegistry.sol",
        "id": 4908,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 5004,
        "sourceUnit": 8214,
        "src": "106:47:27",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/registry/IdentityRegistryStorage.sol",
        "file": "./registry/IdentityRegistryStorage.sol",
        "id": 4909,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 5004,
        "sourceUnit": 7863,
        "src": "154:48:27",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/registry/IdentityRegistry.sol",
        "file": "./registry/IdentityRegistry.sol",
        "id": 4910,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 5004,
        "sourceUnit": 7491,
        "src": "203:41:27",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/token/Token.sol",
        "file": "./token/Token.sol",
        "id": 4911,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 5004,
        "sourceUnit": 13850,
        "src": "245:27:27",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/compliance/DefaultCompliance.sol",
        "file": "./compliance/DefaultCompliance.sol",
        "id": 4912,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 5004,
        "sourceUnit": 5490,
        "src": "273:44:27",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "SecurityTokenManager",
        "contractDependencies": [
          5489,
          6406,
          7490,
          7862,
          8213
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 5003,
        "linearizedBaseContracts": [
          5003
        ],
        "name": "SecurityTokenManager",
        "nameLocation": "328:20:27",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "functionSelector": "8da5cb5b",
            "id": 4914,
            "mutability": "mutable",
            "name": "owner",
            "nameLocation": "370:5:27",
            "nodeType": "VariableDeclaration",
            "scope": 5003,
            "src": "355:20:27",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 4913,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "355:7:27",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "body": {
              "id": 4922,
              "nodeType": "Block",
              "src": "396:35:27",
              "statements": [
                {
                  "expression": {
                    "id": 4920,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 4917,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4914,
                      "src": "406:5:27",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 4918,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967281,
                        "src": "414:3:27",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 4919,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "418:6:27",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "414:10:27",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "406:18:27",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4921,
                  "nodeType": "ExpressionStatement",
                  "src": "406:18:27"
                }
              ]
            },
            "id": 4923,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4915,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "393:2:27"
            },
            "returnParameters": {
              "id": 4916,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "396:0:27"
            },
            "scope": 5003,
            "src": "382:49:27",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4936,
              "nodeType": "Block",
              "src": "499:58:27",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 4932,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "NewExpression",
                          "src": "524:23:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_creation_nonpayable$__$returns$_t_contract$_ClaimTopicsRegistry_$6406_$",
                            "typeString": "function () returns (contract ClaimTopicsRegistry)"
                          },
                          "typeName": {
                            "id": 4931,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                              "id": 4930,
                              "name": "ClaimTopicsRegistry",
                              "nameLocations": [
                                "528:19:27"
                              ],
                              "nodeType": "IdentifierPath",
                              "referencedDeclaration": 6406,
                              "src": "528:19:27"
                            },
                            "referencedDeclaration": 6406,
                            "src": "528:19:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ClaimTopicsRegistry_$6406",
                              "typeString": "contract ClaimTopicsRegistry"
                            }
                          }
                        },
                        "id": 4933,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "524:25:27",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ClaimTopicsRegistry_$6406",
                          "typeString": "contract ClaimTopicsRegistry"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ClaimTopicsRegistry_$6406",
                          "typeString": "contract ClaimTopicsRegistry"
                        }
                      ],
                      "id": 4929,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "516:7:27",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 4928,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "516:7:27",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 4934,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "516:34:27",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 4927,
                  "id": 4935,
                  "nodeType": "Return",
                  "src": "509:41:27"
                }
              ]
            },
            "functionSelector": "54174040",
            "id": 4937,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deployClaimTopicsRegistry",
            "nameLocation": "446:25:27",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4924,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "471:2:27"
            },
            "returnParameters": {
              "id": 4927,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4926,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 4937,
                  "src": "490:7:27",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4925,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "490:7:27",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "489:9:27"
            },
            "scope": 5003,
            "src": "437:120:27",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4950,
              "nodeType": "Block",
              "src": "628:61:27",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 4946,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "NewExpression",
                          "src": "653:26:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_creation_nonpayable$__$returns$_t_contract$_TrustedIssuersRegistry_$8213_$",
                            "typeString": "function () returns (contract TrustedIssuersRegistry)"
                          },
                          "typeName": {
                            "id": 4945,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                              "id": 4944,
                              "name": "TrustedIssuersRegistry",
                              "nameLocations": [
                                "657:22:27"
                              ],
                              "nodeType": "IdentifierPath",
                              "referencedDeclaration": 8213,
                              "src": "657:22:27"
                            },
                            "referencedDeclaration": 8213,
                            "src": "657:22:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_TrustedIssuersRegistry_$8213",
                              "typeString": "contract TrustedIssuersRegistry"
                            }
                          }
                        },
                        "id": 4947,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "653:28:27",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TrustedIssuersRegistry_$8213",
                          "typeString": "contract TrustedIssuersRegistry"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_TrustedIssuersRegistry_$8213",
                          "typeString": "contract TrustedIssuersRegistry"
                        }
                      ],
                      "id": 4943,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "645:7:27",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 4942,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "645:7:27",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 4948,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "645:37:27",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 4941,
                  "id": 4949,
                  "nodeType": "Return",
                  "src": "638:44:27"
                }
              ]
            },
            "functionSelector": "c1c7ee40",
            "id": 4951,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deployTrustedIssuersRegistry",
            "nameLocation": "572:28:27",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4938,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "600:2:27"
            },
            "returnParameters": {
              "id": 4941,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4940,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 4951,
                  "src": "619:7:27",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4939,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "619:7:27",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "618:9:27"
            },
            "scope": 5003,
            "src": "563:126:27",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4964,
              "nodeType": "Block",
              "src": "761:62:27",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 4960,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "NewExpression",
                          "src": "786:27:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_creation_nonpayable$__$returns$_t_contract$_IdentityRegistryStorage_$7862_$",
                            "typeString": "function () returns (contract IdentityRegistryStorage)"
                          },
                          "typeName": {
                            "id": 4959,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                              "id": 4958,
                              "name": "IdentityRegistryStorage",
                              "nameLocations": [
                                "790:23:27"
                              ],
                              "nodeType": "IdentifierPath",
                              "referencedDeclaration": 7862,
                              "src": "790:23:27"
                            },
                            "referencedDeclaration": 7862,
                            "src": "790:23:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IdentityRegistryStorage_$7862",
                              "typeString": "contract IdentityRegistryStorage"
                            }
                          }
                        },
                        "id": 4961,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "786:29:27",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IdentityRegistryStorage_$7862",
                          "typeString": "contract IdentityRegistryStorage"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IdentityRegistryStorage_$7862",
                          "typeString": "contract IdentityRegistryStorage"
                        }
                      ],
                      "id": 4957,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "778:7:27",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 4956,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "778:7:27",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 4962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "778:38:27",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 4955,
                  "id": 4963,
                  "nodeType": "Return",
                  "src": "771:45:27"
                }
              ]
            },
            "functionSelector": "820d385e",
            "id": 4965,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deployIdentityRegistryStorage",
            "nameLocation": "704:29:27",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4952,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "733:2:27"
            },
            "returnParameters": {
              "id": 4955,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4954,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 4965,
                  "src": "752:7:27",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4953,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "752:7:27",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "751:9:27"
            },
            "scope": 5003,
            "src": "695:128:27",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4987,
              "nodeType": "Block",
              "src": "1013:126:27",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 4981,
                            "name": "_trustedIssuersRegistry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4967,
                            "src": "1059:23:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 4982,
                            "name": "_claimTopicsRegistry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4969,
                            "src": "1084:20:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 4983,
                            "name": "_identityRegistryStorage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4971,
                            "src": "1106:24:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 4980,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "NewExpression",
                          "src": "1038:20:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$_t_address_$returns$_t_contract$_IdentityRegistry_$7490_$",
                            "typeString": "function (address,address,address) returns (contract IdentityRegistry)"
                          },
                          "typeName": {
                            "id": 4979,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                              "id": 4978,
                              "name": "IdentityRegistry",
                              "nameLocations": [
                                "1042:16:27"
                              ],
                              "nodeType": "IdentifierPath",
                              "referencedDeclaration": 7490,
                              "src": "1042:16:27"
                            },
                            "referencedDeclaration": 7490,
                            "src": "1042:16:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IdentityRegistry_$7490",
                              "typeString": "contract IdentityRegistry"
                            }
                          }
                        },
                        "id": 4984,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1038:93:27",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IdentityRegistry_$7490",
                          "typeString": "contract IdentityRegistry"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IdentityRegistry_$7490",
                          "typeString": "contract IdentityRegistry"
                        }
                      ],
                      "id": 4977,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1030:7:27",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 4976,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1030:7:27",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 4985,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1030:102:27",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 4975,
                  "id": 4986,
                  "nodeType": "Return",
                  "src": "1023:109:27"
                }
              ]
            },
            "functionSelector": "4f3428ee",
            "id": 4988,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deployIdentityRegistry",
            "nameLocation": "838:22:27",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4972,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4967,
                  "mutability": "mutable",
                  "name": "_trustedIssuersRegistry",
                  "nameLocation": "878:23:27",
                  "nodeType": "VariableDeclaration",
                  "scope": 4988,
                  "src": "870:31:27",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4966,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "870:7:27",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4969,
                  "mutability": "mutable",
                  "name": "_claimTopicsRegistry",
                  "nameLocation": "919:20:27",
                  "nodeType": "VariableDeclaration",
                  "scope": 4988,
                  "src": "911:28:27",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4968,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "911:7:27",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4971,
                  "mutability": "mutable",
                  "name": "_identityRegistryStorage",
                  "nameLocation": "957:24:27",
                  "nodeType": "VariableDeclaration",
                  "scope": 4988,
                  "src": "949:32:27",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4970,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "949:7:27",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "860:127:27"
            },
            "returnParameters": {
              "id": 4975,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4974,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 4988,
                  "src": "1004:7:27",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4973,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1004:7:27",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1003:9:27"
            },
            "scope": 5003,
            "src": "829:310:27",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5001,
              "nodeType": "Block",
              "src": "1198:56:27",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 4997,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "NewExpression",
                          "src": "1223:21:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_creation_nonpayable$__$returns$_t_contract$_DefaultCompliance_$5489_$",
                            "typeString": "function () returns (contract DefaultCompliance)"
                          },
                          "typeName": {
                            "id": 4996,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                              "id": 4995,
                              "name": "DefaultCompliance",
                              "nameLocations": [
                                "1227:17:27"
                              ],
                              "nodeType": "IdentifierPath",
                              "referencedDeclaration": 5489,
                              "src": "1227:17:27"
                            },
                            "referencedDeclaration": 5489,
                            "src": "1227:17:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DefaultCompliance_$5489",
                              "typeString": "contract DefaultCompliance"
                            }
                          }
                        },
                        "id": 4998,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1223:23:27",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DefaultCompliance_$5489",
                          "typeString": "contract DefaultCompliance"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_DefaultCompliance_$5489",
                          "typeString": "contract DefaultCompliance"
                        }
                      ],
                      "id": 4994,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1215:7:27",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 4993,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1215:7:27",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 4999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1215:32:27",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 4992,
                  "id": 5000,
                  "nodeType": "Return",
                  "src": "1208:39:27"
                }
              ]
            },
            "functionSelector": "5d4b2d12",
            "id": 5002,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deployCompliance",
            "nameLocation": "1154:16:27",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4989,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1170:2:27"
            },
            "returnParameters": {
              "id": 4992,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4991,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 5002,
                  "src": "1189:7:27",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4990,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1189:7:27",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1188:9:27"
            },
            "scope": 5003,
            "src": "1145:109:27",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 5004,
        "src": "319:937:27",
        "usedErrors": []
      }
    ],
    "src": "36:1221:27"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.17+commit.8df45f5f.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.8",
  "updatedAt": "2022-12-08T12:51:01.349Z",
  "devdoc": {
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}