{
  "_format": "hh-sol-artifact-1",
  "contractName": "TransferFeesModule",
  "sourceName": "contracts/compliance/modular/modules/TransferFeesModule.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "compliance",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "collector",
          "type": "address"
        }
      ],
      "name": "CollectorAddressIsNotVerified",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "compliance",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "rate",
          "type": "uint256"
        }
      ],
      "name": "FeeRateIsOutOfRange",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "beacon",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_compliance",
          "type": "address"
        }
      ],
      "name": "ComplianceBound",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_compliance",
          "type": "address"
        }
      ],
      "name": "ComplianceUnbound",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "compliance",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_rate",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_collector",
          "type": "address"
        }
      ],
      "name": "FeeUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_compliance",
          "type": "address"
        }
      ],
      "name": "bindCompliance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_compliance",
          "type": "address"
        }
      ],
      "name": "canComplianceBind",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_compliance",
          "type": "address"
        }
      ],
      "name": "getFee",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "rate",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "collector",
              "type": "address"
            }
          ],
          "internalType": "struct TransferFeesModule.Fee",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_compliance",
          "type": "address"
        }
      ],
      "name": "isComplianceBound",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isPlugAndPlay",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "moduleBurnAction",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_compliance",
          "type": "address"
        }
      ],
      "name": "moduleCheck",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "moduleMintAction",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "moduleTransferAction",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "_name",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_rate",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_collector",
          "type": "address"
        }
      ],
      "name": "setFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_compliance",
          "type": "address"
        }
      ],
      "name": "unbindCompliance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        }
      ],
      "name": "upgradeTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a06040523060805234801561001457600080fd5b50608051611b8d61004c600039600081816107a4015281816107e401528181610a0a01528181610a4a0152610add0152611b8d6000f3fe6080604052600436106101145760003560e01c806352d1902d116100a0578063b88c914811610064578063b88c91481461031f578063bcc21053146103a5578063e6f5e807146103c5578063f104a8c9146101f1578063f2fde38b146103d957600080fd5b806352d1902d1461028a578063715018a6146102ad5780638129fc1c146102c25780638da5cb5b146102d7578063b4f2e8b8146102ff57600080fd5b80633659cfe6116100e75780633659cfe6146101d1578063372491a2146101f15780634a932544146102115780634cf4d295146102315780634f1ef2861461027757600080fd5b8063013b7ce4146101195780630694a5fb1461014e57806306fdde03146101705780632cb7e1ec146101b1575b600080fd5b34801561012557600080fd5b5061013961013436600461169c565b6103f9565b60405190151581526020015b60405180910390f35b34801561015a57600080fd5b5061016e6101693660046116ef565b610404565b005b34801561017c57600080fd5b5060408051808201825260128152715472616e73666572466565734d6f64756c6560701b602082015290516101459190611730565b3480156101bd57600080fd5b5061016e6101cc366004611763565b610524565b3480156101dd57600080fd5b5061016e6101ec3660046116ef565b61079a565b3480156101fd57600080fd5b5061016e61020c3660046117a4565b610879565b34801561021d57600080fd5b5061016e61022c3660046116ef565b6108bd565b34801561023d57600080fd5b5061013961024c3660046116ef565b6001600160a01b03166000908152600080516020611b38833981519152602052604090205460ff1690565b61016e6102853660046117e6565b610a00565b34801561029657600080fd5b5061029f610ad0565b604051908152602001610145565b3480156102b957600080fd5b5061016e610b83565b3480156102ce57600080fd5b5061016e610b97565b3480156102e357600080fd5b506033546040516001600160a01b039091168152602001610145565b34801561030b57600080fd5b5061016e61031a3660046118aa565b610ca7565b34801561032b57600080fd5b5061038161033a3660046116ef565b604080518082018252600080825260209182018190526001600160a01b03938416815260c98252829020825180840190935280548352600101549092169181019190915290565b60408051825181526020928301516001600160a01b03169281019290925201610145565b3480156103b157600080fd5b506101396103c03660046116ef565b610ee8565b3480156103d157600080fd5b506000610139565b3480156103e557600080fd5b5061016e6103f43660046116ef565b610fbf565b60015b949350505050565b336000908152600080516020611b38833981519152602081905260409091205460ff1661044c5760405162461bcd60e51b8152600401610443906118da565b60405180910390fd5b600080516020611b388339815191526001600160a01b0383166104b15760405162461bcd60e51b815260206004820152601f60248201527f696e76616c696420617267756d656e74202d207a65726f2061646472657373006044820152606401610443565b336001600160a01b038416146104d95760405162461bcd60e51b815260040161044390611911565b6001600160a01b038316600081815260208390526040808220805460ff19169055517f408b49d9be1c914c52a0227e18a077e5a892dddf32a26cfa94a5d9708fad77189190a2505050565b336000908152600080516020611b38833981519152602081905260409091205460ff166105635760405162461bcd60e51b8152600401610443906118da565b600061056f3386611035565b9050600061057d3386611035565b9050806001600160a01b0316826001600160a01b03160361059f575050610794565b33600090815260c96020908152604091829020825180840190935280548084526001909101546001600160a01b03169183019190915215806105f6575080602001516001600160a01b0316876001600160a01b0316145b80610616575080602001516001600160a01b0316866001600160a01b0316145b1561062357505050610794565b8051600090612710906106369088611952565b6106409190611977565b9050806000036106535750505050610794565b6000336001600160a01b0316636a3edf286040518163ffffffff1660e01b8152600401602060405180830381865afa158015610693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b79190611999565b6020840151604051639fc1d0e760e01b81526001600160a01b038b8116600483015291821660248201526044810185905291925060009190831690639fc1d0e7906064016020604051808303816000875af115801561071a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073e91906119b6565b90508061078d5760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066656520636f6c6c656374696f6e206661696c656400006044820152606401610443565b5050505050505b50505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036107e25760405162461bcd60e51b8152600401610443906119d8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661082b600080516020611af1833981519152546001600160a01b031690565b6001600160a01b0316146108515760405162461bcd60e51b815260040161044390611a24565b61085a8161116f565b6040805160008082526020820190925261087691839190611177565b50565b336000908152600080516020611b38833981519152602081905260409091205460ff166108b85760405162461bcd60e51b8152600401610443906118da565b505050565b600080516020611b388339815191526001600160a01b0382166109225760405162461bcd60e51b815260206004820152601f60248201527f696e76616c696420617267756d656e74202d207a65726f2061646472657373006044820152606401610443565b6001600160a01b03821660009081526020829052604090205460ff161561098b5760405162461bcd60e51b815260206004820152601860248201527f636f6d706c69616e636520616c726561647920626f756e6400000000000000006044820152606401610443565b336001600160a01b038316146109b35760405162461bcd60e51b815260040161044390611911565b6001600160a01b038216600081815260208390526040808220805460ff19166001179055517f1f7b76c58fb697eb53c6c7c1becb96911516a136e24d7ced386b2355358b75a39190a25050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610a485760405162461bcd60e51b8152600401610443906119d8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610a91600080516020611af1833981519152546001600160a01b031690565b6001600160a01b031614610ab75760405162461bcd60e51b815260040161044390611a24565b610ac08261116f565b610acc82826001611177565b5050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b705760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610443565b50600080516020611af183398151915290565b610b8b6112e2565b610b95600061133c565b565b600054610100900460ff1615808015610bb75750600054600160ff909116105b80610bd15750303b158015610bd1575060005460ff166001145b610c345760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610443565b6000805460ff191660011790558015610c57576000805461ff0019166101001790555b610c5f61138e565b8015610876576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b336000908152600080516020611b38833981519152602081905260409091205460ff16610ce65760405162461bcd60e51b8152600401610443906118da565b6000336001600160a01b0316636a3edf286040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4a9190611999565b9050612710841115610d7857604051630e33b43d60e01b815233600482015260248101859052604401610443565b6000816001600160a01b031663134e18f46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610db8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddc9190611999565b60405163b9209e3360e01b81526001600160a01b0386811660048301529192509082169063b9209e3390602401602060405180830381865afa158015610e26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4a91906119b6565b610e7857604051639bca970d60e01b81523360048201526001600160a01b0385166024820152604401610443565b33600081815260c9602090815260409182902088815560010180546001600160a01b0319166001600160a01b0389169081179091558251898152918201527f47b231849a3ba3af6f4ec32a2da80e3106ab81fb5eca9ffde8b33ed2901af2b6910160405180910390a25050505050565b600080826001600160a01b0316636a3edf286040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4d9190611999565b6040516307feec1960e21b81523060048201529091506001600160a01b03821690631ffbb06490602401602060405180830381865afa158015610f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb891906119b6565b9392505050565b610fc76112e2565b6001600160a01b03811661102c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610443565b6108768161133c565b6000826001600160a01b0316636a3edf286040518163ffffffff1660e01b8152600401602060405180830381865afa158015611075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110999190611999565b6001600160a01b031663134e18f46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fa9190611999565b604051633c3ad79560e21b81526001600160a01b038481166004830152919091169063f0eb5e5490602401602060405180830381865afa158015611142573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111669190611999565b90505b92915050565b6108766112e2565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156111aa576108b8836113c5565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611204575060408051601f3d908101601f1916820190925261120191810190611a70565b60015b6112675760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610443565b600080516020611af183398151915281146112d65760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610443565b506108b8838383611461565b6033546001600160a01b03163314610b955760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610443565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166113b55760405162461bcd60e51b815260040161044390611a89565b6113bd611486565b610b956114b5565b6001600160a01b0381163b6114325760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610443565b600080516020611af183398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61146a836114dc565b6000825111806114775750805b156108b857610794838361151c565b600054610100900460ff166114ad5760405162461bcd60e51b815260040161044390611a89565b610b95611541565b600054610100900460ff16610b955760405162461bcd60e51b815260040161044390611a89565b6114e5816113c5565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606111668383604051806060016040528060278152602001611b1160279139611571565b600054610100900460ff166115685760405162461bcd60e51b815260040161044390611a89565b610b953361133c565b6060600080856001600160a01b03168560405161158e9190611ad4565b600060405180830381855af49150503d80600081146115c9576040519150601f19603f3d011682016040523d82523d6000602084013e6115ce565b606091505b50915091506115df868383876115e9565b9695505050505050565b60608315611658578251600003611651576001600160a01b0385163b6116515760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610443565b50816103fc565b6103fc838381511561166d5781518083602001fd5b8060405162461bcd60e51b81526004016104439190611730565b6001600160a01b038116811461087657600080fd5b600080600080608085870312156116b257600080fd5b84356116bd81611687565b935060208501356116cd81611687565b92506040850135915060608501356116e481611687565b939692955090935050565b60006020828403121561170157600080fd5b8135610fb881611687565b60005b8381101561172757818101518382015260200161170f565b50506000910152565b602081526000825180602084015261174f81604085016020870161170c565b601f01601f19169190910160400192915050565b60008060006060848603121561177857600080fd5b833561178381611687565b9250602084013561179381611687565b929592945050506040919091013590565b600080604083850312156117b757600080fd5b82356117c281611687565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156117f957600080fd5b823561180481611687565b9150602083013567ffffffffffffffff8082111561182157600080fd5b818501915085601f83011261183557600080fd5b813581811115611847576118476117d0565b604051601f8201601f19908116603f0116810190838211818310171561186f5761186f6117d0565b8160405282815288602084870101111561188857600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600080604083850312156118bd57600080fd5b8235915060208301356118cf81611687565b809150509250929050565b6020808252601e908201527f6f6e6c7920626f756e6420636f6d706c69616e63652063616e2063616c6c0000604082015260600190565b60208082526021908201527f6f6e6c7920636f6d706c69616e636520636f6e74726163742063616e2063616c6040820152601b60fa1b606082015260800190565b808202811582820484141761116957634e487b7160e01b600052601160045260246000fd5b60008261199457634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156119ab57600080fd5b8151610fb881611687565b6000602082840312156119c857600080fd5b81518015158114610fb857600080fd5b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b600060208284031215611a8257600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008251611ae681846020870161170c565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564f6cc97de1266c180cd39f3b311632644143ce7873d2927755382ad4b39e8ae00a26469706673582212201c404de668ac4a85ce83ed57d991547ac56c374e0b517e18e2021b6474facc6964736f6c63430008110033",
  "deployedBytecode": "0x6080604052600436106101145760003560e01c806352d1902d116100a0578063b88c914811610064578063b88c91481461031f578063bcc21053146103a5578063e6f5e807146103c5578063f104a8c9146101f1578063f2fde38b146103d957600080fd5b806352d1902d1461028a578063715018a6146102ad5780638129fc1c146102c25780638da5cb5b146102d7578063b4f2e8b8146102ff57600080fd5b80633659cfe6116100e75780633659cfe6146101d1578063372491a2146101f15780634a932544146102115780634cf4d295146102315780634f1ef2861461027757600080fd5b8063013b7ce4146101195780630694a5fb1461014e57806306fdde03146101705780632cb7e1ec146101b1575b600080fd5b34801561012557600080fd5b5061013961013436600461169c565b6103f9565b60405190151581526020015b60405180910390f35b34801561015a57600080fd5b5061016e6101693660046116ef565b610404565b005b34801561017c57600080fd5b5060408051808201825260128152715472616e73666572466565734d6f64756c6560701b602082015290516101459190611730565b3480156101bd57600080fd5b5061016e6101cc366004611763565b610524565b3480156101dd57600080fd5b5061016e6101ec3660046116ef565b61079a565b3480156101fd57600080fd5b5061016e61020c3660046117a4565b610879565b34801561021d57600080fd5b5061016e61022c3660046116ef565b6108bd565b34801561023d57600080fd5b5061013961024c3660046116ef565b6001600160a01b03166000908152600080516020611b38833981519152602052604090205460ff1690565b61016e6102853660046117e6565b610a00565b34801561029657600080fd5b5061029f610ad0565b604051908152602001610145565b3480156102b957600080fd5b5061016e610b83565b3480156102ce57600080fd5b5061016e610b97565b3480156102e357600080fd5b506033546040516001600160a01b039091168152602001610145565b34801561030b57600080fd5b5061016e61031a3660046118aa565b610ca7565b34801561032b57600080fd5b5061038161033a3660046116ef565b604080518082018252600080825260209182018190526001600160a01b03938416815260c98252829020825180840190935280548352600101549092169181019190915290565b60408051825181526020928301516001600160a01b03169281019290925201610145565b3480156103b157600080fd5b506101396103c03660046116ef565b610ee8565b3480156103d157600080fd5b506000610139565b3480156103e557600080fd5b5061016e6103f43660046116ef565b610fbf565b60015b949350505050565b336000908152600080516020611b38833981519152602081905260409091205460ff1661044c5760405162461bcd60e51b8152600401610443906118da565b60405180910390fd5b600080516020611b388339815191526001600160a01b0383166104b15760405162461bcd60e51b815260206004820152601f60248201527f696e76616c696420617267756d656e74202d207a65726f2061646472657373006044820152606401610443565b336001600160a01b038416146104d95760405162461bcd60e51b815260040161044390611911565b6001600160a01b038316600081815260208390526040808220805460ff19169055517f408b49d9be1c914c52a0227e18a077e5a892dddf32a26cfa94a5d9708fad77189190a2505050565b336000908152600080516020611b38833981519152602081905260409091205460ff166105635760405162461bcd60e51b8152600401610443906118da565b600061056f3386611035565b9050600061057d3386611035565b9050806001600160a01b0316826001600160a01b03160361059f575050610794565b33600090815260c96020908152604091829020825180840190935280548084526001909101546001600160a01b03169183019190915215806105f6575080602001516001600160a01b0316876001600160a01b0316145b80610616575080602001516001600160a01b0316866001600160a01b0316145b1561062357505050610794565b8051600090612710906106369088611952565b6106409190611977565b9050806000036106535750505050610794565b6000336001600160a01b0316636a3edf286040518163ffffffff1660e01b8152600401602060405180830381865afa158015610693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b79190611999565b6020840151604051639fc1d0e760e01b81526001600160a01b038b8116600483015291821660248201526044810185905291925060009190831690639fc1d0e7906064016020604051808303816000875af115801561071a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073e91906119b6565b90508061078d5760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066656520636f6c6c656374696f6e206661696c656400006044820152606401610443565b5050505050505b50505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036107e25760405162461bcd60e51b8152600401610443906119d8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661082b600080516020611af1833981519152546001600160a01b031690565b6001600160a01b0316146108515760405162461bcd60e51b815260040161044390611a24565b61085a8161116f565b6040805160008082526020820190925261087691839190611177565b50565b336000908152600080516020611b38833981519152602081905260409091205460ff166108b85760405162461bcd60e51b8152600401610443906118da565b505050565b600080516020611b388339815191526001600160a01b0382166109225760405162461bcd60e51b815260206004820152601f60248201527f696e76616c696420617267756d656e74202d207a65726f2061646472657373006044820152606401610443565b6001600160a01b03821660009081526020829052604090205460ff161561098b5760405162461bcd60e51b815260206004820152601860248201527f636f6d706c69616e636520616c726561647920626f756e6400000000000000006044820152606401610443565b336001600160a01b038316146109b35760405162461bcd60e51b815260040161044390611911565b6001600160a01b038216600081815260208390526040808220805460ff19166001179055517f1f7b76c58fb697eb53c6c7c1becb96911516a136e24d7ced386b2355358b75a39190a25050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610a485760405162461bcd60e51b8152600401610443906119d8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610a91600080516020611af1833981519152546001600160a01b031690565b6001600160a01b031614610ab75760405162461bcd60e51b815260040161044390611a24565b610ac08261116f565b610acc82826001611177565b5050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b705760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610443565b50600080516020611af183398151915290565b610b8b6112e2565b610b95600061133c565b565b600054610100900460ff1615808015610bb75750600054600160ff909116105b80610bd15750303b158015610bd1575060005460ff166001145b610c345760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610443565b6000805460ff191660011790558015610c57576000805461ff0019166101001790555b610c5f61138e565b8015610876576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b336000908152600080516020611b38833981519152602081905260409091205460ff16610ce65760405162461bcd60e51b8152600401610443906118da565b6000336001600160a01b0316636a3edf286040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4a9190611999565b9050612710841115610d7857604051630e33b43d60e01b815233600482015260248101859052604401610443565b6000816001600160a01b031663134e18f46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610db8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddc9190611999565b60405163b9209e3360e01b81526001600160a01b0386811660048301529192509082169063b9209e3390602401602060405180830381865afa158015610e26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4a91906119b6565b610e7857604051639bca970d60e01b81523360048201526001600160a01b0385166024820152604401610443565b33600081815260c9602090815260409182902088815560010180546001600160a01b0319166001600160a01b0389169081179091558251898152918201527f47b231849a3ba3af6f4ec32a2da80e3106ab81fb5eca9ffde8b33ed2901af2b6910160405180910390a25050505050565b600080826001600160a01b0316636a3edf286040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4d9190611999565b6040516307feec1960e21b81523060048201529091506001600160a01b03821690631ffbb06490602401602060405180830381865afa158015610f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb891906119b6565b9392505050565b610fc76112e2565b6001600160a01b03811661102c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610443565b6108768161133c565b6000826001600160a01b0316636a3edf286040518163ffffffff1660e01b8152600401602060405180830381865afa158015611075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110999190611999565b6001600160a01b031663134e18f46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fa9190611999565b604051633c3ad79560e21b81526001600160a01b038481166004830152919091169063f0eb5e5490602401602060405180830381865afa158015611142573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111669190611999565b90505b92915050565b6108766112e2565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156111aa576108b8836113c5565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611204575060408051601f3d908101601f1916820190925261120191810190611a70565b60015b6112675760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610443565b600080516020611af183398151915281146112d65760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610443565b506108b8838383611461565b6033546001600160a01b03163314610b955760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610443565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166113b55760405162461bcd60e51b815260040161044390611a89565b6113bd611486565b610b956114b5565b6001600160a01b0381163b6114325760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610443565b600080516020611af183398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61146a836114dc565b6000825111806114775750805b156108b857610794838361151c565b600054610100900460ff166114ad5760405162461bcd60e51b815260040161044390611a89565b610b95611541565b600054610100900460ff16610b955760405162461bcd60e51b815260040161044390611a89565b6114e5816113c5565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606111668383604051806060016040528060278152602001611b1160279139611571565b600054610100900460ff166115685760405162461bcd60e51b815260040161044390611a89565b610b953361133c565b6060600080856001600160a01b03168560405161158e9190611ad4565b600060405180830381855af49150503d80600081146115c9576040519150601f19603f3d011682016040523d82523d6000602084013e6115ce565b606091505b50915091506115df868383876115e9565b9695505050505050565b60608315611658578251600003611651576001600160a01b0385163b6116515760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610443565b50816103fc565b6103fc838381511561166d5781518083602001fd5b8060405162461bcd60e51b81526004016104439190611730565b6001600160a01b038116811461087657600080fd5b600080600080608085870312156116b257600080fd5b84356116bd81611687565b935060208501356116cd81611687565b92506040850135915060608501356116e481611687565b939692955090935050565b60006020828403121561170157600080fd5b8135610fb881611687565b60005b8381101561172757818101518382015260200161170f565b50506000910152565b602081526000825180602084015261174f81604085016020870161170c565b601f01601f19169190910160400192915050565b60008060006060848603121561177857600080fd5b833561178381611687565b9250602084013561179381611687565b929592945050506040919091013590565b600080604083850312156117b757600080fd5b82356117c281611687565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156117f957600080fd5b823561180481611687565b9150602083013567ffffffffffffffff8082111561182157600080fd5b818501915085601f83011261183557600080fd5b813581811115611847576118476117d0565b604051601f8201601f19908116603f0116810190838211818310171561186f5761186f6117d0565b8160405282815288602084870101111561188857600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600080604083850312156118bd57600080fd5b8235915060208301356118cf81611687565b809150509250929050565b6020808252601e908201527f6f6e6c7920626f756e6420636f6d706c69616e63652063616e2063616c6c0000604082015260600190565b60208082526021908201527f6f6e6c7920636f6d706c69616e636520636f6e74726163742063616e2063616c6040820152601b60fa1b606082015260800190565b808202811582820484141761116957634e487b7160e01b600052601160045260246000fd5b60008261199457634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156119ab57600080fd5b8151610fb881611687565b6000602082840312156119c857600080fd5b81518015158114610fb857600080fd5b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b600060208284031215611a8257600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008251611ae681846020870161170c565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564f6cc97de1266c180cd39f3b311632644143ce7873d2927755382ad4b39e8ae00a26469706673582212201c404de668ac4a85ce83ed57d991547ac56c374e0b517e18e2021b6474facc6964736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
