{
  "contractName": "PercentageTransferManagerFactory",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "monthlySubscriptionCost",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newSubscriptionCost",
          "type": "uint256"
        }
      ],
      "name": "changeFactorySubscriptionFee",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newSetupCost",
          "type": "uint256"
        }
      ],
      "name": "changeFactorySetupFee",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "polyToken",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "setupCost",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newUsageCost",
          "type": "uint256"
        }
      ],
      "name": "changeFactoryUsageFee",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "usageCost",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_polyAddress",
          "type": "address"
        },
        {
          "name": "_setupCost",
          "type": "uint256"
        },
        {
          "name": "_usageCost",
          "type": "uint256"
        },
        {
          "name": "_subscriptionCost",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_oldSetupcost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_newSetupCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_moduleFactory",
          "type": "address"
        }
      ],
      "name": "LogChangeFactorySetupFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_oldUsageCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_newUsageCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_moduleFactory",
          "type": "address"
        }
      ],
      "name": "LogChangeFactoryUsageFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_oldSubscriptionCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_newMonthlySubscriptionCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_moduleFactory",
          "type": "address"
        }
      ],
      "name": "LogChangeFactorySubscriptionFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_module",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_moduleName",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "_moduleFactory",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_creator",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_timestamp",
          "type": "uint256"
        }
      ],
      "name": "LogGenerateModuleFromFactory",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipRenounced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "deploy",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getType",
      "outputs": [
        {
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getName",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getDescription",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getTitle",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getInstructions",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getTags",
      "outputs": [
        {
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b506040516080806121b8833981016040908152815160208301519183015160609093015160008054600160a060020a0319908116331790915560018054600160a060020a039094169390911692909217909155600291909155600391909155600455612137806100816000396000f3006080604052600436106100d65763ffffffff60e060020a60003504166277436081146100db57806306184a251461011757806315dae03e1461013e57806317d7de7c146101695780631a0925411461017e5780633ae192bd1461020857806358a191c3146102225780636faa22a51461023a578063715018a61461024f5780637e363ffa146102645780638da5cb5b14610279578063995d9ab71461028e578063aac67b05146102f3578063d54c47261461030b578063e0d5497014610320578063f2fde38b14610335578063ff3c1a8f14610356575b600080fd5b3480156100e757600080fd5b506100fb600480356024810191013561036b565b60408051600160a060020a039092168252519081900360200190f35b34801561012357600080fd5b5061012c61076b565b60408051918252519081900360200190f35b34801561014a57600080fd5b50610153610771565b6040805160ff9092168252519081900360200190f35b34801561017557600080fd5b5061012c610776565b34801561018a57600080fd5b5061019361079a565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101cd5781810151838201526020016101b5565b50505050905090810190601f1680156101fa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561021457600080fd5b506102206004356107d1565b005b34801561022e57600080fd5b5061022060043561082e565b34801561024657600080fd5b506100fb61088b565b34801561025b57600080fd5b5061022061089a565b34801561027057600080fd5b5061012c610906565b34801561028557600080fd5b506100fb61090c565b34801561029a57600080fd5b506102a361091b565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102df5781810151838201526020016102c7565b505050509050019250505060405180910390f35b3480156102ff57600080fd5b506102206004356109b9565b34801561031757600080fd5b5061012c610a16565b34801561032c57600080fd5b50610193610a1c565b34801561034157600080fd5b50610220600160a060020a0360043516610aa1565b34801561036257600080fd5b50610193610ac4565b600080600060025411156104dd5760015460008054600254604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03938416602482015260448101929092525191909316926323b872dd9260648083019360209390929083900390910190829087803b1580156103f857600080fd5b505af115801561040c573d6000803e3d6000fd5b505050506040513d602081101561042257600080fd5b505115156104dd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f4661696c6564207472616e7366657246726f6d2062656361757365206f66207360448201527f7566666963656e7420416c6c6f77616e6365206973206e6f742070726f76696460648201527f6564000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6001543390600160a060020a03166104f3610bf9565b600160a060020a03928316815291166020820152604080519182900301906000f080158015610526573d6000803e3d6000fd5b50905080600160a060020a0316631613ec9d6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561056757600080fd5b505af115801561057b573d6000803e3d6000fd5b505050506040513d602081101561059157600080fd5b5051604080516020601f87018190048102820181019092528581527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19909216916105ec91879087908190840183828082843750610afb945050505050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461067757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f76696465642064617461206973206e6f742076616c6964000000000000604482015290519081900360640190fd5b80600160a060020a03168484604051808383808284378201915050925050506000604051808303816000865af1915050151561071457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f556e2d7375636365737366756c6c2063616c6c00000000000000000000000000604482015290519081900360640190fd5b3061071d610776565b60408051600160a060020a0385168152336020820152428183015290517f1b81ebef84f1d2411caa47894fb587822eff7c2a8a3580a2d52ce516f840c8219181900360600190a39392505050565b60045481565b600290565b7f50657263656e746167655472616e736665724d616e616765720000000000000090565b6040805180820190915260208082527f526573747269637420746865206e756d626572206f6620696e766573746f72739082015290565b600054600160a060020a031633146107e857600080fd5b60045460408051918252602082018390523082820152517fc15ef5ae01a170635c048bc2ddb0e834fe5d866424709f0a7398496a80852ec89181900360600190a1600455565b600054600160a060020a0316331461084557600080fd5b60025460408051918252602082018390523082820152517ff9c53ed8f7f318ac63991d13acab4cf653984ce56b7dc1b3a2083af3f412262d9181900360600190a1600255565b600154600160a060020a031681565b600054600160a060020a031633146108b157600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60025481565b600054600160a060020a031681565b6040805160028082526060808301845292839291906020830190803883390190505090507f50657263656e746167650000000000000000000000000000000000000000000081600081518110151561096f57fe5b6020908102909101015280517f5472616e73666572205265737472696374696f6e00000000000000000000000090829060019081106109aa57fe5b60209081029091010152905090565b600054600160a060020a031633146109d057600080fd5b60035460408051918252602082018390523082820152517fff5bf6a8d25c4e30ad5778be1e2a41c7c45173313279bcbba6e2bb1b1bf7a6db9181900360600190a1600355565b60035481565b60408051608081018252604781527f416c6c6f777320616e2069737375657220746f2072657374726963742074686560208201527f20746f74616c206e756d626572206f66206e6f6e2d7a65726f20746f6b656e20918101919091527f686f6c6465727300000000000000000000000000000000000000000000000000606082015290565b600054600160a060020a03163314610ab857600080fd5b610ac181610b7c565b50565b60408051808201909152601b81527f50657263656e74616765205472616e73666572204d616e616765720000000000602082015290565b60008060006004845110610b10576004610b13565b83515b9150600090505b81811015610b755780600183030360080260020a8482815181101515610b3c57fe5b90602001015160f860020a900460f860020a0260f860020a9004028360e060020a90040160e060020a0292508080600101915050610b1a565b5050919050565b600160a060020a0381161515610b9157600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60405161150280610c0a83390190560060806040526002805460a060020a60ff021916905534801561002057600080fd5b5060405160408061150283398101604052805160209091015160018054600160a060020a03938416600160a060020a0319918216179091556000805482163317905560028054939092169216919091179055611481806100816000396000f3006080604052600436106100e25763ffffffff60e060020a600035041663060d206e81146100e75780631613ec9d1461010f5780631bb7cc99146101595780631eb25e0a1461018057806334dee40f146101985780633f4ba83a146101ad5780635c975abb146101c25780635f7619a4146101eb57806366ffebb8146102035780636faa22a51461021b5780637915c9e01461024c5780638456cb591461029f5780639b19251a146102b4578063a5891bb0146102d5578063b84dfbd214610363578063c3a07df614610378578063c45a0155146103dd578063d70afa96146103f2575b600080fd5b3480156100f357600080fd5b5061010d600160a060020a03600435166024351515610407565b005b34801561011b57600080fd5b5061012461062a565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561016557600080fd5b5061016e61065f565b60408051918252519081900360200190f35b34801561018c57600080fd5b5061010d600435610671565b3480156101a457600080fd5b5061016e6106d8565b3480156101b957600080fd5b5061010d6106de565b3480156101ce57600080fd5b506101d76107c6565b604080519115158252519081900360200190f35b3480156101f757600080fd5b506101d76004356107d6565b34801561020f57600080fd5b5061010d600435610b15565b34801561022757600080fd5b50610230610c35565b60408051600160a060020a039092168252519081900360200190f35b34801561025857600080fd5b5061027b600160a060020a03600435811690602435166044356064351515610c44565b6040518082600381111561028b57fe5b60ff16815260200191505060405180910390f35b3480156102ab57600080fd5b5061010d610e82565b3480156102c057600080fd5b506101d7600160a060020a0360043516610f68565b3480156102e157600080fd5b506040805160206004803580820135838102808601850190965280855261010d95369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750949750610f7d9650505050505050565b34801561036f57600080fd5b506102306111df565b34801561038457600080fd5b5061038d6111ee565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103c95781810151838201526020016103b1565b505050509050019250505060405180910390f35b3480156103e957600080fd5b50610230611240565b3480156103fe57600080fd5b5061016e61124f565b600080516020611436833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561046c57600080fd5b505af1158015610480573d6000803e3d6000fd5b505050506040513d602081101561049657600080fd5b505160005433600160a060020a0392831681149450911614905081806104b95750805b8061055f5750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561053257600080fd5b505af1158015610546573d6000803e3d6000fd5b505050506040513d602081101561055c57600080fd5b50515b15156105b5576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b600160a060020a038516600081815260046020908152604091829020805488151560ff1990911681179091558251938452429184019190915233838301526060830152517f92a32e2db0bd4f3560b8a5c04f3fb10141a87a75950b53a8d8f830abcf80a2989181900360800190a15050505050565b604080517f636f6e6669677572652875696e743235362900000000000000000000000000008152905190819003601201902090565b60008051602061143683398151915281565b600054600160a060020a031633146106d3576040805160e560020a62461bcd02815260206004820152601560248201527f53656e646572206973206e6f7420666163746f72790000000000000000000000604482015290519081900360640190fd5b600355565b60035481565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561073157600080fd5b505af1158015610745573d6000803e3d6000fd5b505050506040513d602081101561075b57600080fd5b5051600160a060020a031633146107bc576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b6107c4611273565b565b60025460a060020a900460ff1681565b60007f4645455f41444d494e0000000000000000000000000000000000000000000000600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561084f57600080fd5b505af1158015610863573d6000803e3d6000fd5b505050506040513d602081101561087957600080fd5b505160005433600160a060020a03928316811494509116149050818061089c5750805b806109425750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561091557600080fd5b505af1158015610929573d6000803e3d6000fd5b505050506040513d602081101561093f57600080fd5b50515b1515610998576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b60025460008054604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051600160a060020a03948516946323b872dd94309490911692638da5cb5b9260048083019360209383900390910190829087803b158015610a0757600080fd5b505af1158015610a1b573d6000803e3d6000fd5b505050506040513d6020811015610a3157600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039384166004820152929091166024830152604482018990525160648083019260209291908290030181600087803b158015610a8857600080fd5b505af1158015610a9c573d6000803e3d6000fd5b505050506040513d6020811015610ab257600080fd5b50511515610b0a576040805160e560020a62461bcd02815260206004820152601260248201527f556e61626c6520746f2074616b65206665650000000000000000000000000000604482015290519081900360640190fd5b506001949350505050565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610b6857600080fd5b505af1158015610b7c573d6000803e3d6000fd5b505050506040513d6020811015610b9257600080fd5b5051600160a060020a03163314610bf3576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b600354604080519182526020820183905280517f5e1376565b86c90c6291f3905cefa4a3c34472b6c5bf57f935d6c5b6de95e4979281900390910190a1600355565b600254600160a060020a031681565b600254600090819060a060020a900460ff161515610e7457600160a060020a03851660009081526004602052604090205460ff1615610c865760019150610e79565b600154604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a0388811660048301529151610d2993889316916370a082319160248083019260209291908290030181600087803b158015610cf157600080fd5b505af1158015610d05573d6000803e3d6000fd5b505050506040513d6020811015610d1b57600080fd5b50519063ffffffff61132916565b9050600354610e5c600160009054906101000a9004600160a060020a0316600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610d8457600080fd5b505af1158015610d98573d6000803e3d6000fd5b505050506040513d6020811015610dae57600080fd5b5051600154604080517f313ce5670000000000000000000000000000000000000000000000000000000081529051610e5092600160a060020a03169163313ce5679160048083019260209291908290030181600087803b158015610e1157600080fd5b505af1158015610e25573d6000803e3d6000fd5b505050506040513d6020811015610e3b57600080fd5b5051859060ff16600a0a63ffffffff61133c16565b9063ffffffff61136516565b1115610e6b5760009150610e79565b60019150610e79565b600191505b50949350505050565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610ed557600080fd5b505af1158015610ee9573d6000803e3d6000fd5b505050506040513d6020811015610eff57600080fd5b5051600160a060020a03163314610f60576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b6107c461137a565b60046020526000908152604090205460ff1681565b6000600080516020611436833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610fe457600080fd5b505af1158015610ff8573d6000803e3d6000fd5b505050506040513d602081101561100e57600080fd5b505160005433600160a060020a0392831681149450911614905081806110315750805b806110d75750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b1580156110aa57600080fd5b505af11580156110be573d6000803e3d6000fd5b505050506040513d60208110156110d457600080fd5b50515b151561112d576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b8451865114611186576040805160e560020a62461bcd02815260206004820152601c60248201527f496e707574206172726179206c656e677468206d69732d6d6174636800000000604482015290519081900360640190fd5b600093505b85518410156111d7576111cc86858151811015156111a557fe5b9060200190602002015186868151811015156111bd57fe5b90602001906020020151610407565b60019093019261118b565b505050505050565b600154600160a060020a031681565b6040805160018082528183019092526060918291906020808301908038833901905050905060008051602061143683398151915281600081518110151561123157fe5b60209081029091010152905090565b600054600160a060020a031681565b7f4645455f41444d494e000000000000000000000000000000000000000000000081565b60025460a060020a900460ff1615156112d6576040805160e560020a62461bcd02815260206004820152601660248201527f436f6e7472616374206973206e6f742070617573656400000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191690556040805142815290517faaa520fdd7d2c83061d632fa017b0432407e798818af63ea908589fceda39ab79181900360200190a1565b8181018281101561133657fe5b92915050565b600082151561134d57506000611336565b5081810281838281151561135d57fe5b041461133657fe5b6000818381151561137257fe5b049392505050565b60025460a060020a900460ff16156113dc576040805160e560020a62461bcd02815260206004820152601260248201527f436f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a1790556040805142815290517f68b095021b1f40fe513109f513c66692f0b3219aee674a69f4efc57badb8201d9181900360200190a1560057484954454c4953540000000000000000000000000000000000000000000000a165627a7a72305820ef822a79206faaf6d7cdafa3a4b49ee2ec18484baf4740e8b1149d1da07cac430029a165627a7a72305820f04693079f1a5ce881f86e90bf4f3585ad7e6b48fb1200fc938f1fdd67234ea80029",
  "deployedBytecode": "0x6080604052600436106100d65763ffffffff60e060020a60003504166277436081146100db57806306184a251461011757806315dae03e1461013e57806317d7de7c146101695780631a0925411461017e5780633ae192bd1461020857806358a191c3146102225780636faa22a51461023a578063715018a61461024f5780637e363ffa146102645780638da5cb5b14610279578063995d9ab71461028e578063aac67b05146102f3578063d54c47261461030b578063e0d5497014610320578063f2fde38b14610335578063ff3c1a8f14610356575b600080fd5b3480156100e757600080fd5b506100fb600480356024810191013561036b565b60408051600160a060020a039092168252519081900360200190f35b34801561012357600080fd5b5061012c61076b565b60408051918252519081900360200190f35b34801561014a57600080fd5b50610153610771565b6040805160ff9092168252519081900360200190f35b34801561017557600080fd5b5061012c610776565b34801561018a57600080fd5b5061019361079a565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101cd5781810151838201526020016101b5565b50505050905090810190601f1680156101fa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561021457600080fd5b506102206004356107d1565b005b34801561022e57600080fd5b5061022060043561082e565b34801561024657600080fd5b506100fb61088b565b34801561025b57600080fd5b5061022061089a565b34801561027057600080fd5b5061012c610906565b34801561028557600080fd5b506100fb61090c565b34801561029a57600080fd5b506102a361091b565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102df5781810151838201526020016102c7565b505050509050019250505060405180910390f35b3480156102ff57600080fd5b506102206004356109b9565b34801561031757600080fd5b5061012c610a16565b34801561032c57600080fd5b50610193610a1c565b34801561034157600080fd5b50610220600160a060020a0360043516610aa1565b34801561036257600080fd5b50610193610ac4565b600080600060025411156104dd5760015460008054600254604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03938416602482015260448101929092525191909316926323b872dd9260648083019360209390929083900390910190829087803b1580156103f857600080fd5b505af115801561040c573d6000803e3d6000fd5b505050506040513d602081101561042257600080fd5b505115156104dd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f4661696c6564207472616e7366657246726f6d2062656361757365206f66207360448201527f7566666963656e7420416c6c6f77616e6365206973206e6f742070726f76696460648201527f6564000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6001543390600160a060020a03166104f3610bf9565b600160a060020a03928316815291166020820152604080519182900301906000f080158015610526573d6000803e3d6000fd5b50905080600160a060020a0316631613ec9d6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561056757600080fd5b505af115801561057b573d6000803e3d6000fd5b505050506040513d602081101561059157600080fd5b5051604080516020601f87018190048102820181019092528581527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19909216916105ec91879087908190840183828082843750610afb945050505050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461067757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f76696465642064617461206973206e6f742076616c6964000000000000604482015290519081900360640190fd5b80600160a060020a03168484604051808383808284378201915050925050506000604051808303816000865af1915050151561071457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f556e2d7375636365737366756c6c2063616c6c00000000000000000000000000604482015290519081900360640190fd5b3061071d610776565b60408051600160a060020a0385168152336020820152428183015290517f1b81ebef84f1d2411caa47894fb587822eff7c2a8a3580a2d52ce516f840c8219181900360600190a39392505050565b60045481565b600290565b7f50657263656e746167655472616e736665724d616e616765720000000000000090565b6040805180820190915260208082527f526573747269637420746865206e756d626572206f6620696e766573746f72739082015290565b600054600160a060020a031633146107e857600080fd5b60045460408051918252602082018390523082820152517fc15ef5ae01a170635c048bc2ddb0e834fe5d866424709f0a7398496a80852ec89181900360600190a1600455565b600054600160a060020a0316331461084557600080fd5b60025460408051918252602082018390523082820152517ff9c53ed8f7f318ac63991d13acab4cf653984ce56b7dc1b3a2083af3f412262d9181900360600190a1600255565b600154600160a060020a031681565b600054600160a060020a031633146108b157600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60025481565b600054600160a060020a031681565b6040805160028082526060808301845292839291906020830190803883390190505090507f50657263656e746167650000000000000000000000000000000000000000000081600081518110151561096f57fe5b6020908102909101015280517f5472616e73666572205265737472696374696f6e00000000000000000000000090829060019081106109aa57fe5b60209081029091010152905090565b600054600160a060020a031633146109d057600080fd5b60035460408051918252602082018390523082820152517fff5bf6a8d25c4e30ad5778be1e2a41c7c45173313279bcbba6e2bb1b1bf7a6db9181900360600190a1600355565b60035481565b60408051608081018252604781527f416c6c6f777320616e2069737375657220746f2072657374726963742074686560208201527f20746f74616c206e756d626572206f66206e6f6e2d7a65726f20746f6b656e20918101919091527f686f6c6465727300000000000000000000000000000000000000000000000000606082015290565b600054600160a060020a03163314610ab857600080fd5b610ac181610b7c565b50565b60408051808201909152601b81527f50657263656e74616765205472616e73666572204d616e616765720000000000602082015290565b60008060006004845110610b10576004610b13565b83515b9150600090505b81811015610b755780600183030360080260020a8482815181101515610b3c57fe5b90602001015160f860020a900460f860020a0260f860020a9004028360e060020a90040160e060020a0292508080600101915050610b1a565b5050919050565b600160a060020a0381161515610b9157600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60405161150280610c0a83390190560060806040526002805460a060020a60ff021916905534801561002057600080fd5b5060405160408061150283398101604052805160209091015160018054600160a060020a03938416600160a060020a0319918216179091556000805482163317905560028054939092169216919091179055611481806100816000396000f3006080604052600436106100e25763ffffffff60e060020a600035041663060d206e81146100e75780631613ec9d1461010f5780631bb7cc99146101595780631eb25e0a1461018057806334dee40f146101985780633f4ba83a146101ad5780635c975abb146101c25780635f7619a4146101eb57806366ffebb8146102035780636faa22a51461021b5780637915c9e01461024c5780638456cb591461029f5780639b19251a146102b4578063a5891bb0146102d5578063b84dfbd214610363578063c3a07df614610378578063c45a0155146103dd578063d70afa96146103f2575b600080fd5b3480156100f357600080fd5b5061010d600160a060020a03600435166024351515610407565b005b34801561011b57600080fd5b5061012461062a565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561016557600080fd5b5061016e61065f565b60408051918252519081900360200190f35b34801561018c57600080fd5b5061010d600435610671565b3480156101a457600080fd5b5061016e6106d8565b3480156101b957600080fd5b5061010d6106de565b3480156101ce57600080fd5b506101d76107c6565b604080519115158252519081900360200190f35b3480156101f757600080fd5b506101d76004356107d6565b34801561020f57600080fd5b5061010d600435610b15565b34801561022757600080fd5b50610230610c35565b60408051600160a060020a039092168252519081900360200190f35b34801561025857600080fd5b5061027b600160a060020a03600435811690602435166044356064351515610c44565b6040518082600381111561028b57fe5b60ff16815260200191505060405180910390f35b3480156102ab57600080fd5b5061010d610e82565b3480156102c057600080fd5b506101d7600160a060020a0360043516610f68565b3480156102e157600080fd5b506040805160206004803580820135838102808601850190965280855261010d95369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750949750610f7d9650505050505050565b34801561036f57600080fd5b506102306111df565b34801561038457600080fd5b5061038d6111ee565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103c95781810151838201526020016103b1565b505050509050019250505060405180910390f35b3480156103e957600080fd5b50610230611240565b3480156103fe57600080fd5b5061016e61124f565b600080516020611436833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561046c57600080fd5b505af1158015610480573d6000803e3d6000fd5b505050506040513d602081101561049657600080fd5b505160005433600160a060020a0392831681149450911614905081806104b95750805b8061055f5750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561053257600080fd5b505af1158015610546573d6000803e3d6000fd5b505050506040513d602081101561055c57600080fd5b50515b15156105b5576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b600160a060020a038516600081815260046020908152604091829020805488151560ff1990911681179091558251938452429184019190915233838301526060830152517f92a32e2db0bd4f3560b8a5c04f3fb10141a87a75950b53a8d8f830abcf80a2989181900360800190a15050505050565b604080517f636f6e6669677572652875696e743235362900000000000000000000000000008152905190819003601201902090565b60008051602061143683398151915281565b600054600160a060020a031633146106d3576040805160e560020a62461bcd02815260206004820152601560248201527f53656e646572206973206e6f7420666163746f72790000000000000000000000604482015290519081900360640190fd5b600355565b60035481565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561073157600080fd5b505af1158015610745573d6000803e3d6000fd5b505050506040513d602081101561075b57600080fd5b5051600160a060020a031633146107bc576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b6107c4611273565b565b60025460a060020a900460ff1681565b60007f4645455f41444d494e0000000000000000000000000000000000000000000000600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561084f57600080fd5b505af1158015610863573d6000803e3d6000fd5b505050506040513d602081101561087957600080fd5b505160005433600160a060020a03928316811494509116149050818061089c5750805b806109425750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561091557600080fd5b505af1158015610929573d6000803e3d6000fd5b505050506040513d602081101561093f57600080fd5b50515b1515610998576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b60025460008054604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051600160a060020a03948516946323b872dd94309490911692638da5cb5b9260048083019360209383900390910190829087803b158015610a0757600080fd5b505af1158015610a1b573d6000803e3d6000fd5b505050506040513d6020811015610a3157600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039384166004820152929091166024830152604482018990525160648083019260209291908290030181600087803b158015610a8857600080fd5b505af1158015610a9c573d6000803e3d6000fd5b505050506040513d6020811015610ab257600080fd5b50511515610b0a576040805160e560020a62461bcd02815260206004820152601260248201527f556e61626c6520746f2074616b65206665650000000000000000000000000000604482015290519081900360640190fd5b506001949350505050565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610b6857600080fd5b505af1158015610b7c573d6000803e3d6000fd5b505050506040513d6020811015610b9257600080fd5b5051600160a060020a03163314610bf3576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b600354604080519182526020820183905280517f5e1376565b86c90c6291f3905cefa4a3c34472b6c5bf57f935d6c5b6de95e4979281900390910190a1600355565b600254600160a060020a031681565b600254600090819060a060020a900460ff161515610e7457600160a060020a03851660009081526004602052604090205460ff1615610c865760019150610e79565b600154604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a0388811660048301529151610d2993889316916370a082319160248083019260209291908290030181600087803b158015610cf157600080fd5b505af1158015610d05573d6000803e3d6000fd5b505050506040513d6020811015610d1b57600080fd5b50519063ffffffff61132916565b9050600354610e5c600160009054906101000a9004600160a060020a0316600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610d8457600080fd5b505af1158015610d98573d6000803e3d6000fd5b505050506040513d6020811015610dae57600080fd5b5051600154604080517f313ce5670000000000000000000000000000000000000000000000000000000081529051610e5092600160a060020a03169163313ce5679160048083019260209291908290030181600087803b158015610e1157600080fd5b505af1158015610e25573d6000803e3d6000fd5b505050506040513d6020811015610e3b57600080fd5b5051859060ff16600a0a63ffffffff61133c16565b9063ffffffff61136516565b1115610e6b5760009150610e79565b60019150610e79565b600191505b50949350505050565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610ed557600080fd5b505af1158015610ee9573d6000803e3d6000fd5b505050506040513d6020811015610eff57600080fd5b5051600160a060020a03163314610f60576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b6107c461137a565b60046020526000908152604090205460ff1681565b6000600080516020611436833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610fe457600080fd5b505af1158015610ff8573d6000803e3d6000fd5b505050506040513d602081101561100e57600080fd5b505160005433600160a060020a0392831681149450911614905081806110315750805b806110d75750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b1580156110aa57600080fd5b505af11580156110be573d6000803e3d6000fd5b505050506040513d60208110156110d457600080fd5b50515b151561112d576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b8451865114611186576040805160e560020a62461bcd02815260206004820152601c60248201527f496e707574206172726179206c656e677468206d69732d6d6174636800000000604482015290519081900360640190fd5b600093505b85518410156111d7576111cc86858151811015156111a557fe5b9060200190602002015186868151811015156111bd57fe5b90602001906020020151610407565b60019093019261118b565b505050505050565b600154600160a060020a031681565b6040805160018082528183019092526060918291906020808301908038833901905050905060008051602061143683398151915281600081518110151561123157fe5b60209081029091010152905090565b600054600160a060020a031681565b7f4645455f41444d494e000000000000000000000000000000000000000000000081565b60025460a060020a900460ff1615156112d6576040805160e560020a62461bcd02815260206004820152601660248201527f436f6e7472616374206973206e6f742070617573656400000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191690556040805142815290517faaa520fdd7d2c83061d632fa017b0432407e798818af63ea908589fceda39ab79181900360200190a1565b8181018281101561133657fe5b92915050565b600082151561134d57506000611336565b5081810281838281151561135d57fe5b041461133657fe5b6000818381151561137257fe5b049392505050565b60025460a060020a900460ff16156113dc576040805160e560020a62461bcd02815260206004820152601260248201527f436f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a1790556040805142815290517f68b095021b1f40fe513109f513c66692f0b3219aee674a69f4efc57badb8201d9181900360200190a1560057484954454c4953540000000000000000000000000000000000000000000000a165627a7a72305820ef822a79206faaf6d7cdafa3a4b49ee2ec18484baf4740e8b1149d1da07cac430029a165627a7a72305820f04693079f1a5ce881f86e90bf4f3585ad7e6b48fb1200fc938f1fdd67234ea80029",
  "sourceMap": "188:2546:54:-;;;350:199;8:9:-1;5:2;;;30:1;27;20:12;5:2;350:199:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;567:5:64;:18;;-1:-1:-1;;;;;;567:18:64;;;575:10;567:18;;;;;1123:31:14;;-1:-1:-1;;;;;1123:31:14;;;;;;;;;;;;;;1162:9;:22;;;;1192:9;:22;;;;1222:23;:43;188:2546:54;;;;;;",
  "deployedSourceMap": "188:2546:54:-;;;;;;;;;-1:-1:-1;;;188:2546:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;775:729;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;775:729:54;;;;;;;;;;;;;;;;-1:-1:-1;;;;;775:729:54;;;;;;;;;;;;;;363:38:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;363:38:14;;;;;;;;;;;;;;;;;;;;1589:71:54;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1589:71:54;;;;;;;;;;;;;;;;;;;;;;;1724:99;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1724:99:54;;;;1894:112;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1894:112:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1894:112:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3197:265:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3197:265:14;;;;;;;2548:193;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2548:193:14;;;;;275:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;275:22:14;;;;827:111:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;827:111:64;;;;303:24:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;303:24:14;;;;238:20:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;238:20:64;;;;2493:239:54;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2493:239:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2493:239:54;;;;;;;;;;;;;;;;;2862:193:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2862:193:14;;;;;333:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;333:24:14;;;;2261:152:54;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2261:152:54;;;;1100:103:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1100:103:64;-1:-1:-1;;;;;1100:103:64;;;;;2071:101:54;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2071:101:54;;;;775:729;821:7;1011:51;855:1;843:9;;:13;840:161;;;878:9;;;913:5;;920:9;;878:52;;;;;;901:10;878:52;;;;-1:-1:-1;;;;;913:5:54;;;878:52;;;;;;;;;;;;:9;;;;;:22;;:52;;;;;;;;;;;;;;;;;;;:9;:52;;;5:2:-1;;;;30:1;27;20:12;5:2;878:52:54;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;878:52:54;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;878:52:54;870:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1115:9;;1095:10;;-1:-1:-1;;;;;1115:9:54;1065:61;;:::i;:::-;-1:-1:-1;;;;;1065:61:54;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1065:61:54;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1065:61:54;1011:115;;1161:25;-1:-1:-1;;;;;1161:41:54;;:43;;;;;-1:-1:-1;;;1161:43:54;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1161:43:54;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1161:43:54;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1161:43:54;1144:13;;;1161:43;1144:13;;;;;;;;;;;;;;;;;;-1:-1:-1;;1144:60:54;;;;:13;;1151:5;;;;;;1144:13;;1151:5;;;;1144:13;;-1:-1:-1;1144:6:54;;-1:-1:-1;;;;;1144:13:54:i;:::-;-1:-1:-1;;1144:60:54;;1136:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1261:25;-1:-1:-1;;;;;1253:39:54;1293:5;;1253:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1245:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1422:4;1403:9;:7;:9::i;:::-;1338:107;;;-1:-1:-1;;;;;1338:107:54;;;;1429:10;1338:107;;;;1441:3;1338:107;;;;;;;;;;;;;;;1470:25;775:729;-1:-1:-1;;;775:729:54:o;363:38:14:-;;;;:::o;1589:71:54:-;1652:1;1589:71;:::o;1724:99::-;1782:34;1724:99;:::o;1894:112::-;1958:41;;;;;;;;;;;;;;;;;;1894:112;:::o;3197:265:14:-;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;3329:23:14;;3297:93;;;;;;;;;;;;3384:4;3297:93;;;;;;;;;;;;;;3400:23;:46;3197:265::o;2548:193::-;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;2659:9:14;;2634:65;;;;;;;;;;;;2693:4;2634:65;;;;;;;;;;;;;;2709:9;:25;2548:193::o;275:22::-;;;-1:-1:-1;;;;;275:22:14;;:::o;827:111:64:-;719:5;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;903:5;;;884:25;;-1:-1:-1;;;;;903:5:64;;;;884:25;;;931:1;915:18;;-1:-1:-1;;915:18:64;;;827:111::o;303:24:14:-;;;;:::o;238:20:64:-;;;-1:-1:-1;;;;;238:20:64;;:::o;2493:239:54:-;2587:16;;;2601:1;2587:16;;;2532:9;2587:16;;;;;2532:9;;;2587:16;2601:1;2587:16;;;;;105:10:-1;2587:16:54;88:34:-1;136:17;;-1:-1;2587:16:54;2554:49;;2613:31;:13;2627:1;2613:16;;;;;;;;;;;;;;;;;;:31;2654:16;;:41;;:13;;2668:1;;2654:16;;;;;;;;;;;;;;:41;2712:13;-1:-1:-1;2493:239:54;:::o;2862:193:14:-;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;2973:9:14;;2948:65;;;;;;;;;;;;3007:4;2948:65;;;;;;;;;;;;;;3023:9;:25;2862:193::o;333:24::-;;;;:::o;2261:152:54:-;2326:80;;;;;;;;;;;;;;;;;;;;;;;;;2308:6;2326:80;;;2261:152;:::o;1100:103:64:-;719:5;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;1169:29;1188:9;1169:18;:29::i;:::-;1100:103;:::o;2071:101:54:-;2129:36;;;;;;;;;;;;;;;;;2071:101;:::o;2166:261:14:-;2218:10;2240:8;2301:6;2266:1;2251:5;:12;:16;:35;;2285:1;2251:35;;;2270:5;:12;2251:35;2240:46;;2310:1;2301:10;;2296:125;2317:3;2313:1;:7;2296:125;;;2405:1;2401;2395:3;:7;:11;2390:1;:17;2384:1;:24;2371:5;2377:1;2371:8;;;;;;;;;;;;;;;-1:-1:-1;;;2371:8:14;;-1:-1:-1;;;2371:8:14;-1:-1:-1;;;2366:14:14;;:43;2359:3;-1:-1:-1;;;2354:9:14;;:55;-1:-1:-1;;;2347:63:14;2341:69;;2322:3;;;;;;;2296:125;;;2166:261;;;;;:::o;1338:171:64:-;-1:-1:-1;;;;;1408:23:64;;;;1400:32;;;;;;1464:5;;;1443:38;;-1:-1:-1;;;;;1443:38:64;;;;1464:5;;;1443:38;;;1487:5;:17;;-1:-1:-1;;1487:17:64;-1:-1:-1;;;;;1487:17:64;;;;;;;;;;1338:171::o;188:2546:54:-;;;;;;;;;;:::o",
  "source": "pragma solidity ^0.4.24;\n\nimport \"./PercentageTransferManager.sol\";\nimport \"../../interfaces/IModuleFactory.sol\";\n\n/**\n * @title Factory for deploying PercentageTransferManager module\n */\ncontract PercentageTransferManagerFactory is IModuleFactory {\n\n    /**\n     * @notice Constructor\n     * @param _polyAddress Address of the polytoken\n     */\n    constructor (address _polyAddress, uint256 _setupCost, uint256 _usageCost, uint256 _subscriptionCost) public\n      IModuleFactory(_polyAddress, _setupCost, _usageCost, _subscriptionCost)\n    {\n\n    }\n\n    /**\n     * @notice used to launch the Module with the help of factory\n     * @param _data Data used for the intialization of the module factory variables\n     * @return address Contract address of the Module\n     */\n    function deploy(bytes _data) external returns(address) {\n        if(setupCost > 0)\n            require(polyToken.transferFrom(msg.sender, owner, setupCost), \"Failed transferFrom because of sufficent Allowance is not provided\");\n        PercentageTransferManager percentageTransferManager = new PercentageTransferManager(msg.sender, address(polyToken));\n        require(getSig(_data) == percentageTransferManager.getInitFunction(), \"Provided data is not valid\");\n        require(address(percentageTransferManager).call(_data), \"Un-successfull call\");\n        emit LogGenerateModuleFromFactory(address(percentageTransferManager), getName(), address(this), msg.sender, now);\n        return address(percentageTransferManager);\n\n    }\n\n    /**\n     * @notice Type of the Module factory\n     * @return uint8\n     */\n    function getType() public view returns(uint8) {\n        return 2;\n    }\n\n    /**\n     * @notice Get the name of the Module\n     */\n    function getName() public view returns(bytes32) {\n        return \"PercentageTransferManager\";\n    }\n\n    /**\n     * @notice Get the description of the Module\n     */\n    function getDescription() public view returns(string) {\n        return \"Restrict the number of investors\";\n    }\n\n    /**\n     * @notice Get the title of the Module\n     */\n    function getTitle() public view returns(string) {\n        return \"Percentage Transfer Manager\";\n    }\n\n    /**\n     * @notice Get the Instructions that helped to used the module\n     */\n    function getInstructions() public view returns(string) {\n        return \"Allows an issuer to restrict the total number of non-zero token holders\";\n    }\n\n    /**\n     * @notice Get the tags related to the module factory\n     */\n    function getTags() public view returns(bytes32[]) {\n         bytes32[] memory availableTags = new bytes32[](2);\n        availableTags[0] = \"Percentage\";\n        availableTags[1] = \"Transfer Restriction\";\n        return availableTags;\n    }\n}\n",
  "sourcePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/TransferManager/PercentageTransferManagerFactory.sol",
  "ast": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/TransferManager/PercentageTransferManagerFactory.sol",
    "exportedSymbols": {
      "PercentageTransferManagerFactory": [
        19371
      ]
    },
    "id": 19372,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 19204,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:54"
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/TransferManager/PercentageTransferManager.sol",
        "file": "./PercentageTransferManager.sol",
        "id": 19205,
        "nodeType": "ImportDirective",
        "scope": 19372,
        "sourceUnit": 19203,
        "src": "26:41:54",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModuleFactory.sol",
        "file": "../../interfaces/IModuleFactory.sol",
        "id": 19206,
        "nodeType": "ImportDirective",
        "scope": 19372,
        "sourceUnit": 9955,
        "src": "68:45:54",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 19207,
              "name": "IModuleFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9954,
              "src": "233:14:54",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                "typeString": "contract IModuleFactory"
              }
            },
            "id": 19208,
            "nodeType": "InheritanceSpecifier",
            "src": "233:14:54"
          }
        ],
        "contractDependencies": [
          9954,
          19202,
          22664
        ],
        "contractKind": "contract",
        "documentation": "@title Factory for deploying PercentageTransferManager module",
        "fullyImplemented": true,
        "id": 19371,
        "linearizedBaseContracts": [
          19371,
          9954,
          22664
        ],
        "name": "PercentageTransferManagerFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 19225,
              "nodeType": "Block",
              "src": "541:8:54",
              "statements": []
            },
            "documentation": "@notice Constructor\n@param _polyAddress Address of the polytoken",
            "id": 19226,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 19219,
                    "name": "_polyAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 19210,
                    "src": "480:12:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 19220,
                    "name": "_setupCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 19212,
                    "src": "494:10:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 19221,
                    "name": "_usageCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 19214,
                    "src": "506:10:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 19222,
                    "name": "_subscriptionCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 19216,
                    "src": "518:17:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 19223,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 19218,
                  "name": "IModuleFactory",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9954,
                  "src": "465:14:54",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_IModuleFactory_$9954_$",
                    "typeString": "type(contract IModuleFactory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "465:71:54"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19217,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19210,
                  "name": "_polyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 19226,
                  "src": "363:20:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19209,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "363:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19212,
                  "name": "_setupCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 19226,
                  "src": "385:18:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19211,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "385:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19214,
                  "name": "_usageCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 19226,
                  "src": "405:18:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19213,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "405:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19216,
                  "name": "_subscriptionCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 19226,
                  "src": "425:25:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19215,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "425:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "362:89:54"
            },
            "payable": false,
            "returnParameters": {
              "id": 19224,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "541:0:54"
            },
            "scope": 19371,
            "src": "350:199:54",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19298,
              "nodeType": "Block",
              "src": "830:674:54",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 19235,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 19233,
                      "name": "setupCost",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9727,
                      "src": "843:9:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 19234,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "855:1:54",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "843:13:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 19247,
                  "nodeType": "IfStatement",
                  "src": "840:161:54",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 19239,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 23131,
                                "src": "901:3:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 19240,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "901:10:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 19241,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22582,
                              "src": "913:5:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 19242,
                              "name": "setupCost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9727,
                              "src": "920:9:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 19237,
                              "name": "polyToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9725,
                              "src": "878:9:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$22837",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 19238,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22819,
                            "src": "878:22:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 19243,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "878:52:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "4661696c6564207472616e7366657246726f6d2062656361757365206f6620737566666963656e7420416c6c6f77616e6365206973206e6f742070726f7669646564",
                          "id": 19244,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "932:68:54",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_39f8133d9e40dc5e6b34d9a9e536ce9c723fe05af13c2feb51de7d902ca65f7f",
                            "typeString": "literal_string \"Failed transferFrom because of sufficent Allowance is not provided\""
                          },
                          "value": "Failed transferFrom because of sufficent Allowance is not provided"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_39f8133d9e40dc5e6b34d9a9e536ce9c723fe05af13c2feb51de7d902ca65f7f",
                            "typeString": "literal_string \"Failed transferFrom because of sufficent Allowance is not provided\""
                          }
                        ],
                        "id": 19236,
                        "name": "require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          23134,
                          23135
                        ],
                        "referencedDeclaration": 23135,
                        "src": "870:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (bool,string memory) pure"
                        }
                      },
                      "id": 19245,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "870:131:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 19246,
                    "nodeType": "ExpressionStatement",
                    "src": "870:131:54"
                  }
                },
                {
                  "assignments": [
                    19249
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19249,
                      "name": "percentageTransferManager",
                      "nodeType": "VariableDeclaration",
                      "scope": 19299,
                      "src": "1011:51:54",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_PercentageTransferManager_$19202",
                        "typeString": "contract PercentageTransferManager"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 19248,
                        "name": "PercentageTransferManager",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 19202,
                        "src": "1011:25:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_PercentageTransferManager_$19202",
                          "typeString": "contract PercentageTransferManager"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19258,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19252,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "1095:3:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 19253,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1095:10:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 19255,
                            "name": "polyToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9725,
                            "src": "1115:9:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 19254,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1107:7:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 19256,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1107:18:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 19251,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "1065:29:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$returns$_t_contract$_PercentageTransferManager_$19202_$",
                        "typeString": "function (address,address) returns (contract PercentageTransferManager)"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 19250,
                        "name": "PercentageTransferManager",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 19202,
                        "src": "1069:25:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_PercentageTransferManager_$19202",
                          "typeString": "contract PercentageTransferManager"
                        }
                      }
                    },
                    "id": 19257,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1065:61:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PercentageTransferManager_$19202",
                      "typeString": "contract PercentageTransferManager"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1011:115:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 19266,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 19261,
                              "name": "_data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19228,
                              "src": "1151:5:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            ],
                            "id": 19260,
                            "name": "getSig",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9893,
                            "src": "1144:6:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                              "typeString": "function (bytes memory) pure returns (bytes4)"
                            }
                          },
                          "id": 19262,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1144:13:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 19263,
                              "name": "percentageTransferManager",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19249,
                              "src": "1161:25:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_PercentageTransferManager_$19202",
                                "typeString": "contract PercentageTransferManager"
                              }
                            },
                            "id": 19264,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getInitFunction",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19090,
                            "src": "1161:41:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_pure$__$returns$_t_bytes4_$",
                              "typeString": "function () pure external returns (bytes4)"
                            }
                          },
                          "id": 19265,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1161:43:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "1144:60:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "50726f76696465642064617461206973206e6f742076616c6964",
                        "id": 19267,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1206:28:54",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f8008f13ad2e2367c07367b70af99d6be231b2b5463054f52084cbdc49de8315",
                          "typeString": "literal_string \"Provided data is not valid\""
                        },
                        "value": "Provided data is not valid"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f8008f13ad2e2367c07367b70af99d6be231b2b5463054f52084cbdc49de8315",
                          "typeString": "literal_string \"Provided data is not valid\""
                        }
                      ],
                      "id": 19259,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "1136:7:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 19268,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1136:99:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19269,
                  "nodeType": "ExpressionStatement",
                  "src": "1136:99:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 19275,
                            "name": "_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19228,
                            "src": "1293:5:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 19272,
                                "name": "percentageTransferManager",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19249,
                                "src": "1261:25:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_PercentageTransferManager_$19202",
                                  "typeString": "contract PercentageTransferManager"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_PercentageTransferManager_$19202",
                                  "typeString": "contract PercentageTransferManager"
                                }
                              ],
                              "id": 19271,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1253:7:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 19273,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1253:34:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 19274,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "call",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1253:39:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_barecall_payable$__$returns$_t_bool_$",
                            "typeString": "function () payable returns (bool)"
                          }
                        },
                        "id": 19276,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1253:46:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "556e2d7375636365737366756c6c2063616c6c",
                        "id": 19277,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1301:21:54",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c4b1d57bea6997b31af3b7d5cb2f4ae47da92d71f0f5964b88132fc35f347c32",
                          "typeString": "literal_string \"Un-successfull call\""
                        },
                        "value": "Un-successfull call"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c4b1d57bea6997b31af3b7d5cb2f4ae47da92d71f0f5964b88132fc35f347c32",
                          "typeString": "literal_string \"Un-successfull call\""
                        }
                      ],
                      "id": 19270,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "1245:7:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 19278,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1245:78:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19279,
                  "nodeType": "ExpressionStatement",
                  "src": "1245:78:54"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 19282,
                            "name": "percentageTransferManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19249,
                            "src": "1375:25:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_PercentageTransferManager_$19202",
                              "typeString": "contract PercentageTransferManager"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_PercentageTransferManager_$19202",
                              "typeString": "contract PercentageTransferManager"
                            }
                          ],
                          "id": 19281,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1367:7:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 19283,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1367:34:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 19284,
                          "name": "getName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            19315
                          ],
                          "referencedDeclaration": 19315,
                          "src": "1403:7:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view returns (bytes32)"
                          }
                        },
                        "id": 19285,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1403:9:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 19287,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23300,
                            "src": "1422:4:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_PercentageTransferManagerFactory_$19371",
                              "typeString": "contract PercentageTransferManagerFactory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_PercentageTransferManagerFactory_$19371",
                              "typeString": "contract PercentageTransferManagerFactory"
                            }
                          ],
                          "id": 19286,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1414:7:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 19288,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1414:13:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19289,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "1429:3:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 19290,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1429:10:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19291,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "1441:3:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 19280,
                      "name": "LogGenerateModuleFromFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9767,
                      "src": "1338:28:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes32,address,address,uint256)"
                      }
                    },
                    "id": 19292,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1338:107:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19293,
                  "nodeType": "EmitStatement",
                  "src": "1333:112:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19295,
                        "name": "percentageTransferManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19249,
                        "src": "1470:25:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_PercentageTransferManager_$19202",
                          "typeString": "contract PercentageTransferManager"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_PercentageTransferManager_$19202",
                          "typeString": "contract PercentageTransferManager"
                        }
                      ],
                      "id": 19294,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1462:7:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 19296,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1462:34:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 19232,
                  "id": 19297,
                  "nodeType": "Return",
                  "src": "1455:41:54"
                }
              ]
            },
            "documentation": "@notice used to launch the Module with the help of factory\n@param _data Data used for the intialization of the module factory variables\n@return address Contract address of the Module",
            "id": 19299,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "deploy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19229,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19228,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 19299,
                  "src": "791:11:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 19227,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "791:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "790:13:54"
            },
            "payable": false,
            "returnParameters": {
              "id": 19232,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19231,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 19299,
                  "src": "821:7:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19230,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "821:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "820:9:54"
            },
            "scope": 19371,
            "src": "775:729:54",
            "stateMutability": "nonpayable",
            "superFunction": 9804,
            "visibility": "external"
          },
          {
            "body": {
              "id": 19306,
              "nodeType": "Block",
              "src": "1635:25:54",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "32",
                    "id": 19304,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1652:1:54",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2_by_1",
                      "typeString": "int_const 2"
                    },
                    "value": "2"
                  },
                  "functionReturnParameters": 19303,
                  "id": 19305,
                  "nodeType": "Return",
                  "src": "1645:8:54"
                }
              ]
            },
            "documentation": "@notice Type of the Module factory\n@return uint8",
            "id": 19307,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getType",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19300,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1605:2:54"
            },
            "payable": false,
            "returnParameters": {
              "id": 19303,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19302,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 19307,
                  "src": "1628:5:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 19301,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1628:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1627:7:54"
            },
            "scope": 19371,
            "src": "1589:71:54",
            "stateMutability": "view",
            "superFunction": 9809,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19314,
              "nodeType": "Block",
              "src": "1772:51:54",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "50657263656e746167655472616e736665724d616e61676572",
                    "id": 19312,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1789:27:54",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_975737d6beb41db135f7ad4760c494beb207b05cbbe083b2e9fc40c97156b9f5",
                      "typeString": "literal_string \"PercentageTransferManager\""
                    },
                    "value": "PercentageTransferManager"
                  },
                  "functionReturnParameters": 19311,
                  "id": 19313,
                  "nodeType": "Return",
                  "src": "1782:34:54"
                }
              ]
            },
            "documentation": "@notice Get the name of the Module",
            "id": 19315,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19308,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1740:2:54"
            },
            "payable": false,
            "returnParameters": {
              "id": 19311,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19310,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 19315,
                  "src": "1763:7:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 19309,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1763:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1762:9:54"
            },
            "scope": 19371,
            "src": "1724:99:54",
            "stateMutability": "view",
            "superFunction": 9814,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19322,
              "nodeType": "Block",
              "src": "1948:58:54",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "526573747269637420746865206e756d626572206f6620696e766573746f7273",
                    "id": 19320,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1965:34:54",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_b0e375a30c90b24713b6d36c167eb8503f613ecb2a31061b71f83621ea75f68b",
                      "typeString": "literal_string \"Restrict the number of investors\""
                    },
                    "value": "Restrict the number of investors"
                  },
                  "functionReturnParameters": 19319,
                  "id": 19321,
                  "nodeType": "Return",
                  "src": "1958:41:54"
                }
              ]
            },
            "documentation": "@notice Get the description of the Module",
            "id": 19323,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getDescription",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19316,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1917:2:54"
            },
            "payable": false,
            "returnParameters": {
              "id": 19319,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19318,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 19323,
                  "src": "1940:6:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 19317,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1940:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1939:8:54"
            },
            "scope": 19371,
            "src": "1894:112:54",
            "stateMutability": "view",
            "superFunction": 9819,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19330,
              "nodeType": "Block",
              "src": "2119:53:54",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "50657263656e74616765205472616e73666572204d616e61676572",
                    "id": 19328,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2136:29:54",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_890c8bbc9869e0bda7090d2e91397cc6c08386fe3ca8b1e4c449a0ccf15bd6a9",
                      "typeString": "literal_string \"Percentage Transfer Manager\""
                    },
                    "value": "Percentage Transfer Manager"
                  },
                  "functionReturnParameters": 19327,
                  "id": 19329,
                  "nodeType": "Return",
                  "src": "2129:36:54"
                }
              ]
            },
            "documentation": "@notice Get the title of the Module",
            "id": 19331,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTitle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19324,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2088:2:54"
            },
            "payable": false,
            "returnParameters": {
              "id": 19327,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19326,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 19331,
                  "src": "2111:6:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 19325,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2111:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2110:8:54"
            },
            "scope": 19371,
            "src": "2071:101:54",
            "stateMutability": "view",
            "superFunction": 9824,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19338,
              "nodeType": "Block",
              "src": "2316:97:54",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "416c6c6f777320616e2069737375657220746f2072657374726963742074686520746f74616c206e756d626572206f66206e6f6e2d7a65726f20746f6b656e20686f6c64657273",
                    "id": 19336,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2333:73:54",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_8c2299aa2b59479861038a454cded3af7ac03c6a3cd1316e837be78ce9918dae",
                      "typeString": "literal_string \"Allows an issuer to restrict the total number of non-zero token holders\""
                    },
                    "value": "Allows an issuer to restrict the total number of non-zero token holders"
                  },
                  "functionReturnParameters": 19335,
                  "id": 19337,
                  "nodeType": "Return",
                  "src": "2326:80:54"
                }
              ]
            },
            "documentation": "@notice Get the Instructions that helped to used the module",
            "id": 19339,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInstructions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19332,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2285:2:54"
            },
            "payable": false,
            "returnParameters": {
              "id": 19335,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19334,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 19339,
                  "src": "2308:6:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 19333,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2308:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2307:8:54"
            },
            "scope": 19371,
            "src": "2261:152:54",
            "stateMutability": "view",
            "superFunction": 9829,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19369,
              "nodeType": "Block",
              "src": "2543:189:54",
              "statements": [
                {
                  "assignments": [
                    19348
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19348,
                      "name": "availableTags",
                      "nodeType": "VariableDeclaration",
                      "scope": 19370,
                      "src": "2554:30:54",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 19346,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2554:7:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 19347,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2554:9:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19354,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 19352,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2601:1:54",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        }
                      ],
                      "id": 19351,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2587:13:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (bytes32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 19349,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2591:7:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 19350,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2591:9:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 19353,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2587:16:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2554:49:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19359,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 19355,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19348,
                        "src": "2613:13:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 19357,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 19356,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2627:1:54",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2613:16:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "50657263656e74616765",
                      "id": 19358,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2632:12:54",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_44ab891cff8ae09693b2b1e9175aa25d11c36e6e69e914a52207aed558c260f1",
                        "typeString": "literal_string \"Percentage\""
                      },
                      "value": "Percentage"
                    },
                    "src": "2613:31:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 19360,
                  "nodeType": "ExpressionStatement",
                  "src": "2613:31:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19365,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 19361,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19348,
                        "src": "2654:13:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 19363,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 19362,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2668:1:54",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2654:16:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "5472616e73666572205265737472696374696f6e",
                      "id": 19364,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2673:22:54",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_1f1107ce03efdc6815f0e4c8942c399d895b30a78a8c319011b2bf9d6503adb7",
                        "typeString": "literal_string \"Transfer Restriction\""
                      },
                      "value": "Transfer Restriction"
                    },
                    "src": "2654:41:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 19366,
                  "nodeType": "ExpressionStatement",
                  "src": "2654:41:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19367,
                    "name": "availableTags",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 19348,
                    "src": "2712:13:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 19344,
                  "id": 19368,
                  "nodeType": "Return",
                  "src": "2705:20:54"
                }
              ]
            },
            "documentation": "@notice Get the tags related to the module factory",
            "id": 19370,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTags",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19340,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2509:2:54"
            },
            "payable": false,
            "returnParameters": {
              "id": 19344,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19343,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 19370,
                  "src": "2532:9:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 19341,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2532:7:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 19342,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2532:9:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2531:11:54"
            },
            "scope": 19371,
            "src": "2493:239:54",
            "stateMutability": "view",
            "superFunction": 9835,
            "visibility": "public"
          }
        ],
        "scope": 19372,
        "src": "188:2546:54"
      }
    ],
    "src": "0:2735:54"
  },
  "legacyAST": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/TransferManager/PercentageTransferManagerFactory.sol",
    "exportedSymbols": {
      "PercentageTransferManagerFactory": [
        19371
      ]
    },
    "id": 19372,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 19204,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:54"
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/TransferManager/PercentageTransferManager.sol",
        "file": "./PercentageTransferManager.sol",
        "id": 19205,
        "nodeType": "ImportDirective",
        "scope": 19372,
        "sourceUnit": 19203,
        "src": "26:41:54",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModuleFactory.sol",
        "file": "../../interfaces/IModuleFactory.sol",
        "id": 19206,
        "nodeType": "ImportDirective",
        "scope": 19372,
        "sourceUnit": 9955,
        "src": "68:45:54",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 19207,
              "name": "IModuleFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9954,
              "src": "233:14:54",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                "typeString": "contract IModuleFactory"
              }
            },
            "id": 19208,
            "nodeType": "InheritanceSpecifier",
            "src": "233:14:54"
          }
        ],
        "contractDependencies": [
          9954,
          19202,
          22664
        ],
        "contractKind": "contract",
        "documentation": "@title Factory for deploying PercentageTransferManager module",
        "fullyImplemented": true,
        "id": 19371,
        "linearizedBaseContracts": [
          19371,
          9954,
          22664
        ],
        "name": "PercentageTransferManagerFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 19225,
              "nodeType": "Block",
              "src": "541:8:54",
              "statements": []
            },
            "documentation": "@notice Constructor\n@param _polyAddress Address of the polytoken",
            "id": 19226,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 19219,
                    "name": "_polyAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 19210,
                    "src": "480:12:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 19220,
                    "name": "_setupCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 19212,
                    "src": "494:10:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 19221,
                    "name": "_usageCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 19214,
                    "src": "506:10:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 19222,
                    "name": "_subscriptionCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 19216,
                    "src": "518:17:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 19223,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 19218,
                  "name": "IModuleFactory",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9954,
                  "src": "465:14:54",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_IModuleFactory_$9954_$",
                    "typeString": "type(contract IModuleFactory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "465:71:54"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19217,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19210,
                  "name": "_polyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 19226,
                  "src": "363:20:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19209,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "363:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19212,
                  "name": "_setupCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 19226,
                  "src": "385:18:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19211,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "385:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19214,
                  "name": "_usageCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 19226,
                  "src": "405:18:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19213,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "405:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19216,
                  "name": "_subscriptionCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 19226,
                  "src": "425:25:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19215,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "425:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "362:89:54"
            },
            "payable": false,
            "returnParameters": {
              "id": 19224,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "541:0:54"
            },
            "scope": 19371,
            "src": "350:199:54",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19298,
              "nodeType": "Block",
              "src": "830:674:54",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 19235,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 19233,
                      "name": "setupCost",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9727,
                      "src": "843:9:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 19234,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "855:1:54",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "843:13:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 19247,
                  "nodeType": "IfStatement",
                  "src": "840:161:54",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 19239,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 23131,
                                "src": "901:3:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 19240,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "901:10:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 19241,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22582,
                              "src": "913:5:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 19242,
                              "name": "setupCost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9727,
                              "src": "920:9:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 19237,
                              "name": "polyToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9725,
                              "src": "878:9:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$22837",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 19238,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22819,
                            "src": "878:22:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 19243,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "878:52:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "4661696c6564207472616e7366657246726f6d2062656361757365206f6620737566666963656e7420416c6c6f77616e6365206973206e6f742070726f7669646564",
                          "id": 19244,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "932:68:54",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_39f8133d9e40dc5e6b34d9a9e536ce9c723fe05af13c2feb51de7d902ca65f7f",
                            "typeString": "literal_string \"Failed transferFrom because of sufficent Allowance is not provided\""
                          },
                          "value": "Failed transferFrom because of sufficent Allowance is not provided"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_39f8133d9e40dc5e6b34d9a9e536ce9c723fe05af13c2feb51de7d902ca65f7f",
                            "typeString": "literal_string \"Failed transferFrom because of sufficent Allowance is not provided\""
                          }
                        ],
                        "id": 19236,
                        "name": "require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          23134,
                          23135
                        ],
                        "referencedDeclaration": 23135,
                        "src": "870:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (bool,string memory) pure"
                        }
                      },
                      "id": 19245,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "870:131:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 19246,
                    "nodeType": "ExpressionStatement",
                    "src": "870:131:54"
                  }
                },
                {
                  "assignments": [
                    19249
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19249,
                      "name": "percentageTransferManager",
                      "nodeType": "VariableDeclaration",
                      "scope": 19299,
                      "src": "1011:51:54",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_PercentageTransferManager_$19202",
                        "typeString": "contract PercentageTransferManager"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 19248,
                        "name": "PercentageTransferManager",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 19202,
                        "src": "1011:25:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_PercentageTransferManager_$19202",
                          "typeString": "contract PercentageTransferManager"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19258,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19252,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "1095:3:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 19253,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1095:10:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 19255,
                            "name": "polyToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9725,
                            "src": "1115:9:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 19254,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1107:7:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 19256,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1107:18:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 19251,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "1065:29:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$returns$_t_contract$_PercentageTransferManager_$19202_$",
                        "typeString": "function (address,address) returns (contract PercentageTransferManager)"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 19250,
                        "name": "PercentageTransferManager",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 19202,
                        "src": "1069:25:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_PercentageTransferManager_$19202",
                          "typeString": "contract PercentageTransferManager"
                        }
                      }
                    },
                    "id": 19257,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1065:61:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PercentageTransferManager_$19202",
                      "typeString": "contract PercentageTransferManager"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1011:115:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 19266,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 19261,
                              "name": "_data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19228,
                              "src": "1151:5:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            ],
                            "id": 19260,
                            "name": "getSig",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9893,
                            "src": "1144:6:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                              "typeString": "function (bytes memory) pure returns (bytes4)"
                            }
                          },
                          "id": 19262,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1144:13:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 19263,
                              "name": "percentageTransferManager",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19249,
                              "src": "1161:25:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_PercentageTransferManager_$19202",
                                "typeString": "contract PercentageTransferManager"
                              }
                            },
                            "id": 19264,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getInitFunction",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19090,
                            "src": "1161:41:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_pure$__$returns$_t_bytes4_$",
                              "typeString": "function () pure external returns (bytes4)"
                            }
                          },
                          "id": 19265,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1161:43:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "1144:60:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "50726f76696465642064617461206973206e6f742076616c6964",
                        "id": 19267,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1206:28:54",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f8008f13ad2e2367c07367b70af99d6be231b2b5463054f52084cbdc49de8315",
                          "typeString": "literal_string \"Provided data is not valid\""
                        },
                        "value": "Provided data is not valid"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f8008f13ad2e2367c07367b70af99d6be231b2b5463054f52084cbdc49de8315",
                          "typeString": "literal_string \"Provided data is not valid\""
                        }
                      ],
                      "id": 19259,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "1136:7:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 19268,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1136:99:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19269,
                  "nodeType": "ExpressionStatement",
                  "src": "1136:99:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 19275,
                            "name": "_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19228,
                            "src": "1293:5:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 19272,
                                "name": "percentageTransferManager",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19249,
                                "src": "1261:25:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_PercentageTransferManager_$19202",
                                  "typeString": "contract PercentageTransferManager"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_PercentageTransferManager_$19202",
                                  "typeString": "contract PercentageTransferManager"
                                }
                              ],
                              "id": 19271,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1253:7:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 19273,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1253:34:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 19274,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "call",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1253:39:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_barecall_payable$__$returns$_t_bool_$",
                            "typeString": "function () payable returns (bool)"
                          }
                        },
                        "id": 19276,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1253:46:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "556e2d7375636365737366756c6c2063616c6c",
                        "id": 19277,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1301:21:54",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c4b1d57bea6997b31af3b7d5cb2f4ae47da92d71f0f5964b88132fc35f347c32",
                          "typeString": "literal_string \"Un-successfull call\""
                        },
                        "value": "Un-successfull call"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c4b1d57bea6997b31af3b7d5cb2f4ae47da92d71f0f5964b88132fc35f347c32",
                          "typeString": "literal_string \"Un-successfull call\""
                        }
                      ],
                      "id": 19270,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "1245:7:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 19278,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1245:78:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19279,
                  "nodeType": "ExpressionStatement",
                  "src": "1245:78:54"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 19282,
                            "name": "percentageTransferManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19249,
                            "src": "1375:25:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_PercentageTransferManager_$19202",
                              "typeString": "contract PercentageTransferManager"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_PercentageTransferManager_$19202",
                              "typeString": "contract PercentageTransferManager"
                            }
                          ],
                          "id": 19281,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1367:7:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 19283,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1367:34:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 19284,
                          "name": "getName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            19315
                          ],
                          "referencedDeclaration": 19315,
                          "src": "1403:7:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view returns (bytes32)"
                          }
                        },
                        "id": 19285,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1403:9:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 19287,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23300,
                            "src": "1422:4:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_PercentageTransferManagerFactory_$19371",
                              "typeString": "contract PercentageTransferManagerFactory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_PercentageTransferManagerFactory_$19371",
                              "typeString": "contract PercentageTransferManagerFactory"
                            }
                          ],
                          "id": 19286,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1414:7:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 19288,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1414:13:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19289,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "1429:3:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 19290,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1429:10:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19291,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "1441:3:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 19280,
                      "name": "LogGenerateModuleFromFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9767,
                      "src": "1338:28:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes32,address,address,uint256)"
                      }
                    },
                    "id": 19292,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1338:107:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19293,
                  "nodeType": "EmitStatement",
                  "src": "1333:112:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19295,
                        "name": "percentageTransferManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19249,
                        "src": "1470:25:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_PercentageTransferManager_$19202",
                          "typeString": "contract PercentageTransferManager"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_PercentageTransferManager_$19202",
                          "typeString": "contract PercentageTransferManager"
                        }
                      ],
                      "id": 19294,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1462:7:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 19296,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1462:34:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 19232,
                  "id": 19297,
                  "nodeType": "Return",
                  "src": "1455:41:54"
                }
              ]
            },
            "documentation": "@notice used to launch the Module with the help of factory\n@param _data Data used for the intialization of the module factory variables\n@return address Contract address of the Module",
            "id": 19299,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "deploy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19229,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19228,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 19299,
                  "src": "791:11:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 19227,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "791:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "790:13:54"
            },
            "payable": false,
            "returnParameters": {
              "id": 19232,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19231,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 19299,
                  "src": "821:7:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19230,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "821:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "820:9:54"
            },
            "scope": 19371,
            "src": "775:729:54",
            "stateMutability": "nonpayable",
            "superFunction": 9804,
            "visibility": "external"
          },
          {
            "body": {
              "id": 19306,
              "nodeType": "Block",
              "src": "1635:25:54",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "32",
                    "id": 19304,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1652:1:54",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2_by_1",
                      "typeString": "int_const 2"
                    },
                    "value": "2"
                  },
                  "functionReturnParameters": 19303,
                  "id": 19305,
                  "nodeType": "Return",
                  "src": "1645:8:54"
                }
              ]
            },
            "documentation": "@notice Type of the Module factory\n@return uint8",
            "id": 19307,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getType",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19300,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1605:2:54"
            },
            "payable": false,
            "returnParameters": {
              "id": 19303,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19302,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 19307,
                  "src": "1628:5:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 19301,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1628:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1627:7:54"
            },
            "scope": 19371,
            "src": "1589:71:54",
            "stateMutability": "view",
            "superFunction": 9809,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19314,
              "nodeType": "Block",
              "src": "1772:51:54",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "50657263656e746167655472616e736665724d616e61676572",
                    "id": 19312,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1789:27:54",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_975737d6beb41db135f7ad4760c494beb207b05cbbe083b2e9fc40c97156b9f5",
                      "typeString": "literal_string \"PercentageTransferManager\""
                    },
                    "value": "PercentageTransferManager"
                  },
                  "functionReturnParameters": 19311,
                  "id": 19313,
                  "nodeType": "Return",
                  "src": "1782:34:54"
                }
              ]
            },
            "documentation": "@notice Get the name of the Module",
            "id": 19315,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19308,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1740:2:54"
            },
            "payable": false,
            "returnParameters": {
              "id": 19311,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19310,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 19315,
                  "src": "1763:7:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 19309,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1763:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1762:9:54"
            },
            "scope": 19371,
            "src": "1724:99:54",
            "stateMutability": "view",
            "superFunction": 9814,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19322,
              "nodeType": "Block",
              "src": "1948:58:54",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "526573747269637420746865206e756d626572206f6620696e766573746f7273",
                    "id": 19320,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1965:34:54",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_b0e375a30c90b24713b6d36c167eb8503f613ecb2a31061b71f83621ea75f68b",
                      "typeString": "literal_string \"Restrict the number of investors\""
                    },
                    "value": "Restrict the number of investors"
                  },
                  "functionReturnParameters": 19319,
                  "id": 19321,
                  "nodeType": "Return",
                  "src": "1958:41:54"
                }
              ]
            },
            "documentation": "@notice Get the description of the Module",
            "id": 19323,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getDescription",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19316,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1917:2:54"
            },
            "payable": false,
            "returnParameters": {
              "id": 19319,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19318,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 19323,
                  "src": "1940:6:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 19317,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1940:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1939:8:54"
            },
            "scope": 19371,
            "src": "1894:112:54",
            "stateMutability": "view",
            "superFunction": 9819,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19330,
              "nodeType": "Block",
              "src": "2119:53:54",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "50657263656e74616765205472616e73666572204d616e61676572",
                    "id": 19328,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2136:29:54",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_890c8bbc9869e0bda7090d2e91397cc6c08386fe3ca8b1e4c449a0ccf15bd6a9",
                      "typeString": "literal_string \"Percentage Transfer Manager\""
                    },
                    "value": "Percentage Transfer Manager"
                  },
                  "functionReturnParameters": 19327,
                  "id": 19329,
                  "nodeType": "Return",
                  "src": "2129:36:54"
                }
              ]
            },
            "documentation": "@notice Get the title of the Module",
            "id": 19331,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTitle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19324,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2088:2:54"
            },
            "payable": false,
            "returnParameters": {
              "id": 19327,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19326,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 19331,
                  "src": "2111:6:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 19325,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2111:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2110:8:54"
            },
            "scope": 19371,
            "src": "2071:101:54",
            "stateMutability": "view",
            "superFunction": 9824,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19338,
              "nodeType": "Block",
              "src": "2316:97:54",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "416c6c6f777320616e2069737375657220746f2072657374726963742074686520746f74616c206e756d626572206f66206e6f6e2d7a65726f20746f6b656e20686f6c64657273",
                    "id": 19336,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2333:73:54",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_8c2299aa2b59479861038a454cded3af7ac03c6a3cd1316e837be78ce9918dae",
                      "typeString": "literal_string \"Allows an issuer to restrict the total number of non-zero token holders\""
                    },
                    "value": "Allows an issuer to restrict the total number of non-zero token holders"
                  },
                  "functionReturnParameters": 19335,
                  "id": 19337,
                  "nodeType": "Return",
                  "src": "2326:80:54"
                }
              ]
            },
            "documentation": "@notice Get the Instructions that helped to used the module",
            "id": 19339,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInstructions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19332,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2285:2:54"
            },
            "payable": false,
            "returnParameters": {
              "id": 19335,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19334,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 19339,
                  "src": "2308:6:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 19333,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2308:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2307:8:54"
            },
            "scope": 19371,
            "src": "2261:152:54",
            "stateMutability": "view",
            "superFunction": 9829,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19369,
              "nodeType": "Block",
              "src": "2543:189:54",
              "statements": [
                {
                  "assignments": [
                    19348
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19348,
                      "name": "availableTags",
                      "nodeType": "VariableDeclaration",
                      "scope": 19370,
                      "src": "2554:30:54",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 19346,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2554:7:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 19347,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2554:9:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19354,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 19352,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2601:1:54",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        }
                      ],
                      "id": 19351,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2587:13:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (bytes32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 19349,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2591:7:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 19350,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2591:9:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 19353,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2587:16:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2554:49:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19359,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 19355,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19348,
                        "src": "2613:13:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 19357,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 19356,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2627:1:54",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2613:16:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "50657263656e74616765",
                      "id": 19358,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2632:12:54",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_44ab891cff8ae09693b2b1e9175aa25d11c36e6e69e914a52207aed558c260f1",
                        "typeString": "literal_string \"Percentage\""
                      },
                      "value": "Percentage"
                    },
                    "src": "2613:31:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 19360,
                  "nodeType": "ExpressionStatement",
                  "src": "2613:31:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19365,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 19361,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19348,
                        "src": "2654:13:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 19363,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 19362,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2668:1:54",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2654:16:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "5472616e73666572205265737472696374696f6e",
                      "id": 19364,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2673:22:54",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_1f1107ce03efdc6815f0e4c8942c399d895b30a78a8c319011b2bf9d6503adb7",
                        "typeString": "literal_string \"Transfer Restriction\""
                      },
                      "value": "Transfer Restriction"
                    },
                    "src": "2654:41:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 19366,
                  "nodeType": "ExpressionStatement",
                  "src": "2654:41:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19367,
                    "name": "availableTags",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 19348,
                    "src": "2712:13:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 19344,
                  "id": 19368,
                  "nodeType": "Return",
                  "src": "2705:20:54"
                }
              ]
            },
            "documentation": "@notice Get the tags related to the module factory",
            "id": 19370,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTags",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19340,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2509:2:54"
            },
            "payable": false,
            "returnParameters": {
              "id": 19344,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19343,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 19370,
                  "src": "2532:9:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 19341,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2532:7:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 19342,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2532:9:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2531:11:54"
            },
            "scope": 19371,
            "src": "2493:239:54",
            "stateMutability": "view",
            "superFunction": 9835,
            "visibility": "public"
          }
        ],
        "scope": 19372,
        "src": "188:2546:54"
      }
    ],
    "src": "0:2735:54"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {
    "15": {
      "events": {},
      "links": {},
      "address": "0x96ab805ff5ef3e5de347373d073418997aa5d3c9",
      "transactionHash": "0xb31ff8de0eda88edd700a9e9394e8706b0d440c99fc6240c760bb17f655d568f"
    }
  },
  "schemaVersion": "2.0.1",
  "updatedAt": "2018-08-21T09:48:28.916Z"
}